Skip to content

Commit f769b93

Browse files
committed
Fix pre-commit checks
1 parent aee525a commit f769b93

3 files changed

Lines changed: 51 additions & 50 deletions

File tree

zppy/e3sm_diags.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
from zppy.bundle import handle_bundles
77
from zppy.utils import (
88
ParameterInferenceType,
9-
ParameterNotProvidedError,
109
add_dependencies,
10+
check_parameter_defined,
11+
check_set_specific_parameter,
1112
check_status,
1213
get_file_names,
1314
get_tasks,
@@ -100,32 +101,6 @@ def e3sm_diags(config: ConfigObj, script_dir: str, existing_bundles, job_ids_fil
100101
return existing_bundles
101102

102103

103-
def check_parameter_defined(
104-
c: Dict[str, Any], relevant_parameter: str, explanation: str = ""
105-
) -> None:
106-
if (relevant_parameter not in c.keys()) or (c[relevant_parameter] == ""):
107-
if explanation:
108-
message = f"{relevant_parameter} is needed because {explanation}"
109-
else:
110-
message = f"{relevant_parameter} is not defined."
111-
raise ParameterNotProvidedError(message)
112-
113-
114-
def check_set_specific_parameter(
115-
c: Dict[str, Any], sets_with_requirement: Set[str], relevant_parameter: str
116-
) -> None:
117-
requested_sets = set(c["sets"])
118-
intersection = sets_with_requirement & requested_sets
119-
if (
120-
intersection
121-
and (relevant_parameter in c.keys())
122-
and (c[relevant_parameter] == "")
123-
):
124-
raise ParameterNotProvidedError(
125-
f"{relevant_parameter} is required because the sets {intersection} were requested."
126-
)
127-
128-
129104
def check_parameters_for_bash(c: Dict[str, Any]) -> None:
130105
# Check parameters that aren't used until e3sm_diags.bash is run
131106
check_set_specific_parameter(c, set(["qbo"]), "ref_final_yr")

zppy/pcmdi_diags.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
from zppy.bundle import handle_bundles
55
from zppy.utils import (
6-
ParameterGuessType,
6+
ParameterInferenceType,
77
add_dependencies,
88
check_parameter_defined,
9-
check_required_parameters,
9+
check_set_specific_parameter,
1010
check_status,
11-
define_or_guess,
12-
define_or_guess2,
1311
get_file_names,
1412
get_tasks,
13+
get_value_from_parameter,
1514
get_years,
1615
initialize_template,
1716
make_executable,
1817
print_url,
18+
set_value_of_parameter_if_undefined,
1919
submit_script,
2020
write_settings_file,
2121
)
@@ -34,8 +34,8 @@ def pcmdi_diags(config, script_dir, existing_bundles, job_ids_file):
3434
# --- Generate and submit pcmdi_diags scripts ---
3535
for c in tasks:
3636
dependencies: List[str] = []
37-
c["sub"] = define_or_guess(
38-
c, "subsection", "sub", ParameterGuessType.SECTION_GUESS
37+
c["sub"] = get_value_from_parameter(
38+
c, "subsection", "sub", ParameterInferenceType.SECTION_INFERENCE
3939
)
4040
check_parameters_for_bash(c)
4141

@@ -129,21 +129,21 @@ def pcmdi_diags(config, script_dir, existing_bundles, job_ids_file):
129129

130130
def check_parameters_for_bash(c: Dict[str, Any]) -> None:
131131
if c["sub"] != "synthetic_plots":
132-
check_required_parameters(
132+
check_set_specific_parameter(
133133
c,
134134
set(
135135
["mean_climate", "variability_mode_cpl", "variability_mode_atm", "enso"]
136136
),
137137
"ref_final_yr",
138138
)
139-
check_required_parameters(
139+
check_set_specific_parameter(
140140
c,
141141
set(
142142
["mean_climate", "variability_mode_cpl", "variability_mode_atm", "enso"]
143143
),
144144
"ref_start_yr",
145145
)
146-
check_required_parameters(
146+
check_set_specific_parameter(
147147
c,
148148
set(
149149
["mean_climate", "variability_mode_cpl", "variability_mode_atm", "enso"]
@@ -155,23 +155,23 @@ def check_parameters_for_bash(c: Dict[str, Any]) -> None:
155155
def check_parameters_for_pcmdi(c: Dict[str, Any]) -> None:
156156
# check and set up the external data needed by pcmdi
157157
if c["sub"] == "synthetic_plots":
158-
define_or_guess2(
158+
set_value_of_parameter_if_undefined(
159159
c,
160160
"cmip_enso_dir",
161161
f"{c['diagnostics_base_path']}/pcmdi_data/metrics_data/enso_metric",
162-
ParameterGuessType.PATH_GUESS,
162+
ParameterInferenceType.PATH_INFERENCE,
163163
)
164-
define_or_guess2(
164+
set_value_of_parameter_if_undefined(
165165
c,
166166
"cmip_clim_dir",
167167
f"{c['diagnostics_base_path']}/pcmdi_data/metrics_data/mean_climate",
168-
ParameterGuessType.PATH_GUESS,
168+
ParameterInferenceType.PATH_INFERENCE,
169169
)
170-
define_or_guess2(
170+
set_value_of_parameter_if_undefined(
171171
c,
172172
"cmip_movs_dir",
173173
f"{c['diagnostics_base_path']}/pcmdi_data/metrics_data/variability_modes",
174-
ParameterGuessType.PATH_GUESS,
174+
ParameterInferenceType.PATH_INFERENCE,
175175
)
176176

177177

@@ -180,7 +180,7 @@ def check_mvm_only_parameters_for_bash(c: Dict[str, Any]) -> None:
180180
check_parameter_defined(c, "model_name_ref")
181181
check_parameter_defined(c, "model_tableID_ref")
182182
if c["sub"] != "synthetic_plots":
183-
check_required_parameters(
183+
check_set_specific_parameter(
184184
c,
185185
set(
186186
["mean_climate", "variability_mode_cpl", "variability_mode_atm", "enso"]
@@ -195,18 +195,18 @@ def check_mvm_only_parameters_for_bash(c: Dict[str, Any]) -> None:
195195
"enso",
196196
]
197197
)
198-
check_required_parameters(c, ts_sets, "ts_num_years_ref")
199-
check_required_parameters(c, ts_sets, "ts_subsection")
198+
check_set_specific_parameter(c, ts_sets, "ts_num_years_ref")
199+
check_set_specific_parameter(c, ts_sets, "ts_subsection")
200200

201201

202202
def check_and_define_parameters(c: Dict[str, Any]) -> None:
203203
# TODO: do this based on sets, rather than by relying on the user setting ts_num_years
204204
if "ts_num_years" in c.keys():
205-
define_or_guess2(
205+
set_value_of_parameter_if_undefined(
206206
c,
207207
"obs_ts",
208208
f"{c['diagnostics_base_path']}/observations/Atm/time-series/",
209-
ParameterGuessType.PATH_GUESS,
209+
ParameterInferenceType.PATH_INFERENCE,
210210
)
211211
prefix: str
212212
if c["run_type"] == "model_vs_obs":
@@ -220,11 +220,11 @@ def check_and_define_parameters(c: Dict[str, Any]) -> None:
220220
if set(
221221
["mean_climate", "variability_mode_cpl", "variability_mode_atm", "enso"]
222222
) & set(c["sets"]):
223-
define_or_guess2(
223+
set_value_of_parameter_if_undefined(
224224
c,
225225
"reference_data_path_ts",
226226
f"{reference_data_path}/atm/{c['grid']}/cmip_ts/monthly",
227-
ParameterGuessType.PATH_GUESS,
227+
ParameterInferenceType.PATH_INFERENCE,
228228
)
229229
else:
230230
raise ValueError(f"Invalid run_type={c['run_type']}")

zppy/utils.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import time
88
from enum import Enum
99
from subprocess import PIPE, Popen
10-
from typing import Any, Dict, List, Tuple
10+
from typing import Any, Dict, List, Set, Tuple
1111

1212
import jinja2
1313
from configobj import ConfigObj
@@ -229,6 +229,21 @@ def set_component_and_prc_typ(c: Dict[str, Any]) -> None:
229229
c["prc_typ"] = prc_typ
230230

231231

232+
def check_set_specific_parameter(
233+
c: Dict[str, Any], sets_with_requirement: Set[str], relevant_parameter: str
234+
) -> None:
235+
requested_sets = set(c["sets"])
236+
intersection = sets_with_requirement & requested_sets
237+
if (
238+
intersection
239+
and (relevant_parameter in c.keys())
240+
and (c[relevant_parameter] == "")
241+
):
242+
raise ParameterNotProvidedError(
243+
f"{relevant_parameter} is required because the sets {intersection} were requested."
244+
)
245+
246+
232247
# Return all year sets from a configuration given by a list of strings
233248
# "year_begin:year_end:year_freq"
234249
# "year_begin-year_end"
@@ -310,6 +325,17 @@ def set_value_of_parameter_if_undefined(
310325
)
311326

312327

328+
def check_parameter_defined(
329+
c: Dict[str, Any], relevant_parameter: str, explanation: str = ""
330+
) -> None:
331+
if (relevant_parameter not in c.keys()) or (c[relevant_parameter] == ""):
332+
if explanation:
333+
message = f"{relevant_parameter} is needed because {explanation}"
334+
else:
335+
message = f"{relevant_parameter} is not defined."
336+
raise ParameterNotProvidedError(message)
337+
338+
313339
def get_file_names(script_dir: str, prefix: str):
314340
return tuple(
315341
[

0 commit comments

Comments
 (0)