From 88a7c45b6e35e3d3040b8f826a2c583b002d8524 Mon Sep 17 00:00:00 2001 From: Lewis Blake Date: Sun, 6 Oct 2024 19:29:32 +0200 Subject: [PATCH] get_obs_entry returns ObsEntry instance, not a dict --- pyaerocom/aeroval/_processing_base.py | 4 ++-- pyaerocom/aeroval/experiment_processor.py | 12 ++++++------ pyaerocom/aeroval/obsentry.py | 2 +- pyaerocom/aeroval/setup_classes.py | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pyaerocom/aeroval/_processing_base.py b/pyaerocom/aeroval/_processing_base.py index e9f0829ad..480e19d61 100644 --- a/pyaerocom/aeroval/_processing_base.py +++ b/pyaerocom/aeroval/_processing_base.py @@ -92,7 +92,7 @@ def _get_diurnal_only(self, obs_name): ------- diurnal_only : bool """ - return self.cfg.get_obs_entry(obs_name).get("diurnal_only", False) + return self.cfg.get_obs_entry(obs_name).diurnal_only def get_colocator(self, model_name: str = None, obs_name: str = None) -> Colocator: """ @@ -132,7 +132,7 @@ def get_colocator(self, model_name: str = None, obs_name: str = None) -> Colocat col_cfg["obs_config"] = pyaro_config # Hack and at what lowlevel_helpers's import_from was doing - for key, val in obs_cfg.items(): + for key, val in obs_cfg.model_dump().items(): if key in ColocationSetup.model_fields: col_cfg[key] = val diff --git a/pyaerocom/aeroval/experiment_processor.py b/pyaerocom/aeroval/experiment_processor.py index 4f292135e..046846af9 100644 --- a/pyaerocom/aeroval/experiment_processor.py +++ b/pyaerocom/aeroval/experiment_processor.py @@ -34,7 +34,7 @@ def _run_single_entry(self, model_name, obs_name, var_list): logger.info(msg) return ocfg = self.cfg.get_obs_entry(obs_name) - if ocfg["is_superobs"]: + if ocfg.is_superobs: try: engine = SuperObsEngine(self.cfg) engine.run( @@ -47,19 +47,19 @@ def _run_single_entry(self, model_name, obs_name, var_list): if self.raise_exceptions: raise logger.warning("failed to process superobs...") - elif ocfg["only_superobs"]: + elif ocfg.only_superobs: logger.info( f"Skipping json processing of {obs_name}, as this is " f"marked to be used only as part of a superobs " f"network" ) - elif ocfg["only_json"]: - if not ocfg["coldata_dir"]: + elif ocfg.only_json: + if not ocfg.coldata_dir: raise Exception( "No coldata_dir provided for an obs network for which only_json=True. The assumption of setting only_json=True is that colocated files already exist, and so a directory for these files must be provided." ) else: - preprocessed_coldata_dir = ocfg["coldata_dir"] + preprocessed_coldata_dir = ocfg.coldata_dir mask = f"{preprocessed_coldata_dir}/{model_name}/*.nc" files_to_convert = glob.glob(mask) engine = ColdataToJsonEngine(self.cfg) @@ -69,7 +69,7 @@ def _run_single_entry(self, model_name, obs_name, var_list): # If a var_list is given, only run on the obs networks which contain that variable if var_list: var_list_asked = var_list - obs_vars = ocfg["obs_vars"] + obs_vars = ocfg.obs_vars var_list = list(set(obs_vars) & set(var_list)) if not var_list: logger.warning( diff --git a/pyaerocom/aeroval/obsentry.py b/pyaerocom/aeroval/obsentry.py index 512cdc2b3..76f63367a 100644 --- a/pyaerocom/aeroval/obsentry.py +++ b/pyaerocom/aeroval/obsentry.py @@ -105,7 +105,6 @@ class ObsEntry(BaseModel): ###################### ## Optional attributes ###################### - # obs_id: str | tuple[str, ...] = "" obs_ts_type_read: str | dict | None = None obs_vert_type: Literal["Column", "Profile", "Surface"] = "Surface" obs_aux_requires: dict[str, dict] = {} @@ -115,6 +114,7 @@ class ObsEntry(BaseModel): colocation_layer_limts: tuple[LayerLimits, ...] | None = None profile_layer_limits: tuple[LayerLimits, ...] | None = None web_interface_name: str | None = None + diurnal_only: bool = False read_opts_ungridded: dict = {} # attributes for reading colocated data files made outside of pyaerocom diff --git a/pyaerocom/aeroval/setup_classes.py b/pyaerocom/aeroval/setup_classes.py index 6fda955e1..61059852b 100644 --- a/pyaerocom/aeroval/setup_classes.py +++ b/pyaerocom/aeroval/setup_classes.py @@ -529,7 +529,7 @@ def serialize_model_cfg(self, model_cfg: ModelCollection): ########################### def get_obs_entry(self, obs_name) -> dict: - return self.obs_cfg.get_entry(obs_name).model_dump() + return self.obs_cfg.get_entry(obs_name) def get_model_entry(self, model_name) -> dict: """Get model entry configuration