diff --git a/csaxs_bec/devices/jungfraujoch/jungfrau_joch_client.py b/csaxs_bec/devices/jungfraujoch/jungfrau_joch_client.py index 5a930b7..7b18c5c 100644 --- a/csaxs_bec/devices/jungfraujoch/jungfrau_joch_client.py +++ b/csaxs_bec/devices/jungfraujoch/jungfrau_joch_client.py @@ -47,10 +47,12 @@ class DetectorState(str, enum.Enum): class JungfrauJochClient: """ Jungfrau Joch API client wrapper. It provides a thin wrapper methods around the API client, - that allow to connect, initialise, wait for state changes, set settings, start and stop acquisitions. + that allow to connect, initialise, wait for state changes, set settings, start and stop + acquisitions. Args: - host (str): Hostname of the Jungfrau Joch broker service. Default is "http://sls-jfjoch-001:8080" + host (str): Hostname of the Jungfrau Joch broker service. + Default is "http://sls-jfjoch-001:8080" parent (Device, optional): Parent ophyd device, used for logging purposes. """ @@ -96,13 +98,14 @@ class JungfrauJochClient: # TODO: #135 Check if the detector has to be in INACTIVE state before initialisation if status != DetectorState.IDLE: self.api.initialize_post() - self.wait_for_idle(timeout, request_timeout=timeout) + self.wait_for_idle(timeout) self.initialised = True def set_detector_settings(self, settings: dict | DetectorSettings, timeout: int = 10) -> None: """ - Set the detector settings. The state of JungfrauJoch must be in IDLE, Error or Inactive state. - Note, a full set of setttings has to be provided, otherwise the settings will be overwritten with default values. + Set the detector settings. The state of JungfrauJoch must be in IDLE, + Error or Inactive state. Please note: a full set of setttings has to be provided, + otherwise the settings will be overwritten with default values. Args: settings (dict): dictionary of settings @@ -111,13 +114,15 @@ class JungfrauJochClient: state = self.detector_state if state not in [DetectorState.IDLE, DetectorState.ERROR, DetectorState.INACTIVE]: logger.info( - f"JungfrauJoch backend fo device {self._parent_name} is not in IDLE state, waiting 1s before retrying..." + f"JungfrauJoch backend fo device {self._parent_name} is not in IDLE state," + " waiting 1s before retrying..." ) time.sleep(1) # Give the detector 1s to become IDLE, retry state = self.detector_state if state not in [DetectorState.IDLE, DetectorState.ERROR, DetectorState.INACTIVE]: raise JungfrauJochClientError( - f"Error on {self._parent_name}. Detector must be in IDLE, ERROR or INACTIVE state to set settings. Current state: {state}" + f"Error on {self._parent_name}. Detector must be in IDLE, ERROR or INACTIVE" + " state to set settings. Current state: {state}" ) if isinstance(settings, dict): @@ -126,30 +131,35 @@ class JungfrauJochClient: self.api.config_detector_put(detector_settings=settings, _request_timeout=timeout) except requests.exceptions.Timeout: raise TimeoutError( - f"Timeout on device {self._parent_name} while setting detector settings {yaml.dump(settings, indent=4)}." + f"Timeout on device {self._parent_name} while setting detector settings:\n " + f"{yaml.dump(settings, indent=4)}." ) except Exception: content = traceback.format_exc() logger.error( - f"Error on device {self._parent_name} while setting detector settings {yaml.dump(settings, indent=4)}. Error traceback: {content}" + f"Error on device {self._parent_name} while setting detector settings:\n " + f"{yaml.dump(settings, indent=4)}. Error traceback: {content}" ) raise JungfrauJochClientError( - f"Error on device {self._parent_name} while setting detector settings {yaml.dump(settings, indent=4)}. Full traceback: {content}." + f"Error on device {self._parent_name} while setting detector settings:\n " + f"{yaml.dump(settings, indent=4)}. Full traceback: {content}." ) def start(self, settings: dict | DatasetSettings, request_timeout: float = 10) -> None: """ - Start the acquisition with the provided dataset settings. The detector must be in IDLE state. - Settings must always provide a full set of parameters, missing parameters will be set to default values. + Start the acquisition with the provided dataset settings. + The detector must be in IDLE state. Settings must always provide a full set of + parameters, missing parameters will be set to default values. Args: settings (dict | DatasetSettings): Dataset settings to start the acquisition with. - request_timeout (float): Timeout in seconds for the HTTP request to start the acquisition. + request_timeout (float): Timeout in sec for the HTTP request to start the acquisition. """ state = self.detector_state if state != DetectorState.IDLE: raise JungfrauJochClientError( - f"Error on device {self._parent_name}. Detector must be in IDLE state to start acquisition. Current state: {state}" + f"Error on device {self._parent_name}. " + f"Detector must be in IDLE state to start acquisition. Current state: {state}" ) if isinstance(settings, dict): @@ -161,18 +171,23 @@ class JungfrauJochClient: except requests.exceptions.Timeout: content = traceback.format_exc() logger.error( - f"Timeout error after {request_timeout} seconds on device {self._parent_name} during 'start' call with dataset settings: {yaml.dump(settings, indent=4)}. Traceback: {content}" + f"Timeout error after {request_timeout} seconds on device {self._parent_name} " + f"during 'start' call with dataset settings: {yaml.dump(settings, indent=4)}. \n" + f"Traceback: {content}" ) raise TimeoutError( - f"Timeout error after {request_timeout} seconds on device {self._parent_name} during 'start' call with dataset settings: {yaml.dump(settings, indent=4)}." + f"Timeout error after {request_timeout} seconds on device {self._parent_name} " + f"during 'start' call with dataset settings: {yaml.dump(settings, indent=4)}." ) except Exception: content = traceback.format_exc() logger.error( - f"Error on device {self._parent_name} during 'start' post with dataset settings: {yaml.dump(settings, indent=4)}. Traceback: {content}" + f"Error on device {self._parent_name} during 'start' post with dataset settings: \n" + f"{yaml.dump(settings, indent=4)}. \nTraceback: {content}" ) raise JungfrauJochClientError( - f"Error on device {self._parent_name} during 'start' post with dataset settings: {yaml.dump(settings, indent=4)}. Full traceback: {content}." + f"Error on device {self._parent_name} during 'start' post with dataset settings: \n" + f"{yaml.dump(settings, indent=4)}. \nTraceback: {content}." ) def stop(self, request_timeout: float = 0.5) -> None: @@ -184,7 +199,8 @@ class JungfrauJochClient: except requests.exceptions.Timeout: content = traceback.format_exc() logger.error( - f"Timeout error after {request_timeout} seconds on device {self._parent_name} during stop: {content}" + f"Timeout error after {request_timeout} seconds on device {self._parent_name} " + f"during stop: {content}" ) except Exception: content = traceback.format_exc()