JFJOCH: centralize URL resolution

This commit is contained in:
2026-05-01 16:20:28 +02:00
parent e84e2db32b
commit 499897cb46
4 changed files with 36 additions and 18 deletions
+14
View File
@@ -15,3 +15,17 @@ def mx_beamline() -> MXBeamline:
return MXBeamline.SIMULATED
name=name.strip().upper()
return MXBeamline[name] if name in MXBeamline.__members__ else MXBeamline.SIMULATED
def get_jfjoch_url(bl: MXBeamline) -> str:
"""Centralized URL resolution for JFJoch services."""
match bl:
case MXBeamline.X10SA:
return "http://sls-gpu-002:8080"
case MXBeamline.X06DA:
return "http://sls-gpu-001:8080"
case MXBeamline.SIMULATED:
return "http://localhost:8080"
case MXBeamline.X06SA:
raise NotImplementedError("X06SA beamline not supported yet")
case _:
raise ValueError(f"No JFJoch URL configured for beamline: {bl}")
+8 -15
View File
@@ -4,7 +4,7 @@ from enum import Enum
import jfjoch_client
from aare.common.beamline import MXBeamline
from aare.common.beamline import MXBeamline, get_jfjoch_url
from aare.common.exception_handler import JFJochCommunicationError
from aare.common.models import DAQStatusModel, FluorescenceSpectrumOutputModel
from aare.common.raster_grid import RasterGridRequest
@@ -20,20 +20,13 @@ class ScanTypeEnum(Enum):
class JFJochWrapper:
def __init__(self, bl: MXBeamline):
self.__simulated = False
match bl:
case MXBeamline.X06DA:
self.__url = "http://sls-gpu-001:8080"
case MXBeamline.X10SA:
self.__url = "http://sls-gpu-002:8080"
case MXBeamline.SIMULATED:
self.__url = "http://localhost:8080"
self.__client = None
self.__api = None
self.__simulated = True
return
case _:
raise Exception("unknown beamline")
self.__simulated = (bl == MXBeamline.SIMULATED)
self.__url = get_jfjoch_url(bl)
if self.__url == "simulated":
self.__client = None
self.__api = None
return
self.__client = jfjoch_client.ApiClient(jfjoch_client.Configuration(host=self.__url))
self.__api = jfjoch_client.DefaultApi(self.__client)
@@ -6,6 +6,7 @@ from PySide6.QtGui import QPainter, QPen, QColor, QBrush
from PySide6.QtCore import Qt, QRect
from typing import List, Tuple
from aare.common.beamline import mx_beamline, get_jfjoch_url
from aare.common.coordinate import Coordinate, SmargonCoordinate
from aare.common.models import DAQStatusModel
from aare.common.raster_grid import RasterGridRequest, CompletedRasterGrid, CompletedRasterGridElem
@@ -95,6 +96,8 @@ class RasterGridManager(QObject):
super().__init__()
self.__sample_id = -1
self.__beamline = mx_beamline()
self.__detector_url = get_jfjoch_url(self.__beamline)
self.__beam_size_mm = geom.beam_size_mm
self.__geom = geom
@@ -299,7 +302,7 @@ class RasterGridManager(QObject):
self.__loaded_image_index = grid.result.images[cell].number
print(f"Load {grid.result.file_prefix} {grid.result.images[cell].number}")
#self.image_selected.emit(grid.result.file_prefix, grid.result.images[cell].number)
self.image_selected.emit("http://sls-gpu-001:8080", grid.result.images[cell].number)
self.image_selected.emit(self.__detector_url, grid.result.images[cell].number)
def is_part_of_active_grid(self, point: QPointF) -> bool:
if not self._is_grid_visible(self.__active_grid):
@@ -712,7 +715,7 @@ class RasterGridManager(QObject):
com = last_raster.centre_of_mass
logger.info(f"COM: {com}")
cell = com.max_image if com else 0
self.image_selected.emit("http://sls-gpu-001:8080", cell)
self.image_selected.emit(self.__detector_url, cell)
self.completed_grid_updated.emit()
@Slot(int, bool)
+9 -1
View File
@@ -1,5 +1,7 @@
from PySide6.QtCore import QObject, Slot
from PySide6.QtDBus import QDBusConnection, QDBusInterface
from aare.common.beamline import MXBeamline, mx_beamline, get_jfjoch_url
class JFJochDBusClient(QObject):
def __init__(self):
@@ -9,6 +11,12 @@ class JFJochDBusClient(QObject):
self.__interface = None
self.__dbus_available = False
self.__beamline = mx_beamline()
try:
self.__detector_url = get_jfjoch_url(self.__beamline)
except ValueError:
self.__detector_url = None
try:
self.__session_bus = QDBusConnection.sessionBus()
if self.__session_bus.isConnected():
@@ -66,5 +74,5 @@ class JFJochDBusClient(QObject):
return
if self._ensure_interface():
reply = self.__interface.call("LoadFile", "http://sls-gpu-001:8080", -1, 1)
reply = self.__interface.call("LoadFile", self.__detector_url, -1, 1)