Skip to content

Commit d1453c6

Browse files
authored
Always context managers when handling netCDF4.Dataset objects (#2734)
1 parent 4d33023 commit d1453c6

4 files changed

Lines changed: 226 additions & 199 deletions

File tree

esmvalcore/cmor/_fixes/cmip6/cesm2.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@ def _fix_formula_terms(
3131
output_dir, filepath, add_unique_suffix=add_unique_suffix
3232
)
3333
copyfile(filepath, new_path)
34-
dataset = Dataset(new_path, mode="a")
35-
dataset.variables["lev"].formula_terms = "p0: p0 a: a b: b ps: ps"
36-
dataset.variables[
37-
"lev"
38-
].standard_name = "atmosphere_hybrid_sigma_pressure_coordinate"
39-
dataset.close()
34+
with Dataset(new_path, mode="a") as dataset:
35+
dataset.variables["lev"].formula_terms = "p0: p0 a: a b: b ps: ps"
36+
dataset.variables[
37+
"lev"
38+
].standard_name = "atmosphere_hybrid_sigma_pressure_coordinate"
4039
return new_path
4140

4241
def fix_file(self, filepath, output_dir, add_unique_suffix=False):
@@ -69,10 +68,13 @@ def fix_file(self, filepath, output_dir, add_unique_suffix=False):
6968
new_path = self._fix_formula_terms(
7069
filepath, output_dir, add_unique_suffix=add_unique_suffix
7170
)
72-
dataset = Dataset(new_path, mode="a")
73-
dataset.variables["a_bnds"][:] = dataset.variables["a_bnds"][::-1, :]
74-
dataset.variables["b_bnds"][:] = dataset.variables["b_bnds"][::-1, :]
75-
dataset.close()
71+
with Dataset(new_path, mode="a") as dataset:
72+
dataset.variables["a_bnds"][:] = dataset.variables["a_bnds"][
73+
::-1, :
74+
]
75+
dataset.variables["b_bnds"][:] = dataset.variables["b_bnds"][
76+
::-1, :
77+
]
7678
return new_path
7779

7880
def fix_metadata(self, cubes):

esmvalcore/cmor/_fixes/cmip6/cesm2_waccm.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ def fix_file(self, filepath, output_dir, add_unique_suffix=False):
4545
new_path = self._fix_formula_terms(
4646
filepath, output_dir, add_unique_suffix=add_unique_suffix
4747
)
48-
dataset = Dataset(new_path, mode="a")
49-
dataset.variables["a_bnds"][:] = dataset.variables["a_bnds"][:, ::-1]
50-
dataset.variables["b_bnds"][:] = dataset.variables["b_bnds"][:, ::-1]
51-
dataset.close()
48+
with Dataset(new_path, mode="a") as dataset:
49+
dataset.variables["a_bnds"][:] = dataset.variables["a_bnds"][
50+
:, ::-1
51+
]
52+
dataset.variables["b_bnds"][:] = dataset.variables["b_bnds"][
53+
:, ::-1
54+
]
5255
return new_path
5356

5457

esmvalcore/local.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,20 +145,20 @@ def _get_start_end_date(
145145
and Path(file).exists()
146146
):
147147
logger.debug("Must load file %s for daterange ", file)
148-
dataset = Dataset(file)
149-
for variable in dataset.variables.values():
150-
var_name = _get_var_name(variable)
151-
if var_name == "time" and "units" in variable.ncattrs():
152-
time_units = Unit(variable.getncattr("units"))
153-
start_date = isodate.date_isoformat(
154-
time_units.num2date(variable[0]),
155-
format=isodate.isostrf.DATE_BAS_COMPLETE,
156-
)
157-
end_date = isodate.date_isoformat(
158-
time_units.num2date(variable[-1]),
159-
format=isodate.isostrf.DATE_BAS_COMPLETE,
160-
)
161-
break
148+
with Dataset(file) as dataset:
149+
for variable in dataset.variables.values():
150+
var_name = _get_var_name(variable)
151+
if var_name == "time" and "units" in variable.ncattrs():
152+
time_units = Unit(variable.getncattr("units"))
153+
start_date = isodate.date_isoformat(
154+
time_units.num2date(variable[0]),
155+
format=isodate.isostrf.DATE_BAS_COMPLETE,
156+
)
157+
end_date = isodate.date_isoformat(
158+
time_units.num2date(variable[-1]),
159+
format=isodate.isostrf.DATE_BAS_COMPLETE,
160+
)
161+
break
162162

163163
if start_date is None or end_date is None:
164164
raise ValueError(

0 commit comments

Comments
 (0)