From 1f67f1cb2a6f779bdc0ea3e3470c5e732478f3d7 Mon Sep 17 00:00:00 2001 From: ahmedk <karim.ahmed@xfel.eu> Date: Thu, 22 Dec 2022 11:16:39 +0100 Subject: [PATCH] snapshot_at to pdu_snapshot_at, restful_config.calibration_client(), and move module_mapping to physical_detector_units property --- src/cal_tools/calcat_interface.py | 113 +++++++++++++++--------------- src/cal_tools/restful_config.py | 16 +++++ 2 files changed, 71 insertions(+), 58 deletions(-) diff --git a/src/cal_tools/calcat_interface.py b/src/cal_tools/calcat_interface.py index 3a70239fd..3fd06aecb 100644 --- a/src/cal_tools/calcat_interface.py +++ b/src/cal_tools/calcat_interface.py @@ -145,41 +145,22 @@ class CalCatApi(metaclass=ClientWrapper): def physical_detector_units( self, detector_id, - snapshot_at, - module_naming="da", + pdu_snapshot_at, ): """Physical detector unit metadata.""" resp_pdus = PhysicalDetectorUnit.get_all_by_detector( - self.client, detector_id, self.format_time(snapshot_at) + self.client, detector_id, self.format_time(pdu_snapshot_at) ) if not resp_pdus["success"]: raise CalCatError(resp_pdus) - # Create dict based on requested keys: karabo_da, module number, - # or QxMx naming convention. - if module_naming == "da": - return { - pdu["karabo_da"]: {k: pdu[k] for k in self.get_pdu_keys} - for pdu in resp_pdus["data"] - } - elif module_naming == "modno": - return { - int(pdu["karabo_da"][-2:]): { - k: pdu[k] for k in self.get_pdu_keys - } - for pdu in resp_pdus["data"] - } - elif module_naming == "qm": - return { - module_index_to_qm(int(pdu["karabo_da"][-2:])): { - k: pdu[k] for k in self.get_pdu_keys - } - for pdu in resp_pdus["data"] - } - else: - raise ValueError(f"{module_naming} is unknown!") + return { + pdu['karabo_da']: { + k: pdu[k] for k in self.get_pdu_keys} + for pdu in resp_pdus['data'] + } @lru_cache() def calibration_id(self, calibration_name): @@ -212,7 +193,7 @@ class CalCatApi(metaclass=ClientWrapper): condition, modules=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, metadata=None, module_naming="da", ): @@ -233,7 +214,7 @@ class CalCatApi(metaclass=ClientWrapper): or None for all (default). event_at (datetime, date, str or None): Time at which the CCVs should have been valid or None for now (default). - snapshot_at (datetime, date, str or None): Time of database + pdu_snapshot_at (datetime, date, str or None): Time of database state to look at or None for now (default). metadata (dict or None): Mapping to fill for results or None for a new dictionary (default). @@ -251,7 +232,7 @@ class CalCatApi(metaclass=ClientWrapper): passed. """ event_at = self.format_time(event_at) - snapshot_at = self.format_time(snapshot_at) + pdu_snapshot_at = self.format_time(pdu_snapshot_at) if metadata is None: metadata = CCVMetadata() @@ -286,7 +267,7 @@ class CalCatApi(metaclass=ClientWrapper): self.format_cond(condition), karabo_da=karabo_da, event_at=event_at, - snapshot_at=snapshot_at, + pdu_snapshot_at=pdu_snapshot_at, ) if not resp_versions["success"]: @@ -376,7 +357,7 @@ class CalibrationData: modules=None, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): """Initialize a new CalibrationData object. @@ -393,7 +374,7 @@ class CalibrationData: communication, global one by default. event_at (datetime, date, str or None): Default time at which the CCVs should have been valid, now if omitted - snapshot_at (datetime, date, str or None): Default time of + pdu_snapshot_at (datetime, date, str or None): Default time of database state to look at, now if omitted. module_naming (str or None): Expected module name convention to be used as metadata dict keys. Expected values are: @@ -409,10 +390,11 @@ class CalibrationData: self.detector_name = detector_name self.modules = modules self.event_at = event_at - self.snapshot_at = snapshot_at + self.pdu_snapshot_at = pdu_snapshot_at self.module_naming = module_naming if client is None: + client = ( self.__class__.default_client or self.__class__.new_anonymous_client() @@ -524,9 +506,24 @@ class CalibrationData: @property def physical_detector_units(self): - return self._api.physical_detector_units( - self.detector["id"], self.snapshot_at, self.module_naming - ) + pdu_dict = self._api.physical_detector_units( + self.detector["id"], self.pdu_snapshot_at) + # Create dict based on requested keys: karabo_da, module number, + # or QxMx naming convention. + if self.module_naming == "da": + return pdu_dict + elif self.module_naming == "modno": + return { + int(mod[-2:]): mod_v + for mod, mod_v in pdu_dict.items() + } + elif self.module_naming == "qm": + return { + module_index_to_qm(int(mod[-2:])): mod_v + for mod, mod_v in pdu_dict.items() + } + else: + raise ValueError(f"{self.module_naming} is unknown!") @property def condition(self): @@ -540,7 +537,7 @@ class CalibrationData: "modules", "client", "event_at", - "snapshot_at", + "pdu_snapshot_at", } | {self._simplify_parameter_name(name) for name in self.parameters} kwargs = {key: getattr(self, key) for key in keys} @@ -552,7 +549,7 @@ class CalibrationData: self, calibrations=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, ): """Query CCV metadata for calibrations, conditions and time. @@ -562,7 +559,7 @@ class CalibrationData: event_at (datetime, date, str or None): Time at which the CCVs should have been valid, now or default value passed at initialization time if omitted. - snapshot_at (datetime, date, str or None): Time of database + pdu_snapshot_at (datetime, date, str or None): Time of database state to look at, now or default value passed at initialization time if omitted. @@ -577,7 +574,7 @@ class CalibrationData: self.condition, self.modules, event_at or self.event_at, - snapshot_at or self.snapshot_at, + pdu_snapshot_at or self.pdu_snapshot_at, metadata, module_naming=self.module_naming, ) @@ -832,7 +829,7 @@ class SplitConditionCalibrationData(CalibrationData): self, calibrations=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, ): """Query CCV metadata for calibrations, conditions and time. @@ -842,7 +839,7 @@ class SplitConditionCalibrationData(CalibrationData): event_at (datetime, date, str or None): Time at which the CCVs should have been valid, now or default value passed at initialization time if omitted. - snapshot_at (datetime, date, str or None): Time of database + pdu_snapshot_at (datetime, date, str or None): Time of database state to look at, now or default value passed at initialization time if omitted. @@ -868,7 +865,7 @@ class SplitConditionCalibrationData(CalibrationData): self.dark_condition, self.modules, event_at or self.event_at, - snapshot_at or self.snapshot_at, + pdu_snapshot_at or self.pdu_snapshot_at, metadata, module_naming=self.module_naming, ) @@ -882,7 +879,7 @@ class SplitConditionCalibrationData(CalibrationData): self.illuminated_condition, self.modules, event_at or self.event_at, - snapshot_at or self.snapshot_at, + pdu_snapshot_at or self.pdu_snapshot_at, metadata, module_naming=self.module_naming, ) @@ -927,7 +924,7 @@ class AGIPD_CalibrationData(SplitConditionCalibrationData): modules=None, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, gain_setting=None, gain_mode=None, module_naming="da", @@ -941,7 +938,7 @@ class AGIPD_CalibrationData(SplitConditionCalibrationData): modules, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) @@ -1005,7 +1002,7 @@ class LPD_CalibrationData(SplitConditionCalibrationData): modules=None, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): super().__init__( @@ -1013,7 +1010,7 @@ class LPD_CalibrationData(SplitConditionCalibrationData): modules, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) @@ -1058,7 +1055,7 @@ class DSSC_CalibrationData(CalibrationData): modules=None, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): super().__init__( @@ -1066,7 +1063,7 @@ class DSSC_CalibrationData(CalibrationData): modules, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) @@ -1114,7 +1111,7 @@ class JUNGFRAU_CalibrationData(CalibrationData): modules=None, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): super().__init__( @@ -1122,7 +1119,7 @@ class JUNGFRAU_CalibrationData(CalibrationData): modules, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) @@ -1174,7 +1171,7 @@ class PNCCD_CalibrationData(CalibrationData): pixels_y=1024, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): # Ignore modules for this detector. @@ -1183,7 +1180,7 @@ class PNCCD_CalibrationData(CalibrationData): None, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) @@ -1229,7 +1226,7 @@ class EPIX100_CalibrationData(SplitConditionCalibrationData): source_energy=9.2, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): # Ignore modules for this detector. @@ -1238,7 +1235,7 @@ class EPIX100_CalibrationData(SplitConditionCalibrationData): None, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) @@ -1278,7 +1275,7 @@ class GOTTHARD2_CalibrationData(CalibrationData): single_photon, client=None, event_at=None, - snapshot_at=None, + pdu_snapshot_at=None, module_naming="da", ): # Ignore modules for this detector. @@ -1287,7 +1284,7 @@ class GOTTHARD2_CalibrationData(CalibrationData): None, client, event_at, - snapshot_at, + pdu_snapshot_at, module_naming, ) diff --git a/src/cal_tools/restful_config.py b/src/cal_tools/restful_config.py index 7a7944080..5eb32aad2 100644 --- a/src/cal_tools/restful_config.py +++ b/src/cal_tools/restful_config.py @@ -1,5 +1,6 @@ from pathlib import Path +from calibration_client import CalibrationClient from dynaconf import Dynaconf config_dir = Path(__file__).parent.resolve() @@ -13,3 +14,18 @@ restful_config = Dynaconf( ], merge_enabled=True, ) + + +def calibration_client(): + # Create client for CalCat. + calcat_config = restful_config.get('calcat') + return CalibrationClient( + base_api_url=calcat_config['base-api-url'], + use_oauth2=calcat_config['use-oauth2'], + client_id=calcat_config['user-id'], + client_secret=calcat_config['user-secret'], + user_email=calcat_config['user-email'], + token_url=calcat_config['token-url'], + refresh_url=calcat_config['refresh-url'], + auth_url=calcat_config['auth-url'], + scope='') -- GitLab