Skip to content

Commit ead0ca9

Browse files
authored
Enhance unit tests and handle negative seconds (#53)
1 parent 54ca8fa commit ead0ca9

2 files changed

Lines changed: 176 additions & 1 deletion

File tree

pysurfex/variable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def get_basetime(self, validtime, previoustime=None, allow_different_basetime=Fa
586586
)
587587
).total_seconds()
588588
)
589-
if seconds_since_midnight == 86400:
589+
if seconds_since_midnight == 86400 or seconds_since_midnight < 0:
590590
seconds_since_midnight = 0
591591
basetime_inc = int(
592592
seconds_since_midnight / int(as_timedelta(seconds=self.fcint).total_seconds())

tests/unit/test_variable.py

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,150 @@
99
@pytest.fixture
1010
def fixture():
1111
cfg = {
12+
"arome_arctic_mbr0_00": {
13+
"fcint": 10800,
14+
"offset": 0,
15+
"timestep": 3600,
16+
"discipline": 0,
17+
"parameterCategory": 0,
18+
"parameterNumber": 0,
19+
"levelType": 0,
20+
"level": 0,
21+
"typeOfStatisticalProcessing": 0,
22+
"prefer_forecast": True,
23+
"filepattern": "archive/@YYYY@/@MM@/@DD@/@HH@/fc@YYYY@@MM@@DD@@HH@_@LLL@grib2_fp",
24+
"blueprint": {
25+
"0": "archive/2019/11/13/21/fc2019111321_000grib2_fp",
26+
"1": "archive/2019/11/13/21/fc2019111321_001grib2_fp",
27+
"2": "archive/2019/11/13/21/fc2019111321_002grib2_fp",
28+
"3": "archive/2019/11/13/21/fc2019111321_003grib2_fp",
29+
},
30+
"blueprint_previous": {
31+
"1": "archive/2019/11/13/21/fc2019111321_000grib2_fp",
32+
"2": "archive/2019/11/13/21/fc2019111321_001grib2_fp",
33+
"3": "archive/2019/11/13/21/fc2019111321_002grib2_fp",
34+
},
35+
},
36+
"arome_arctic_mbr1_01": {
37+
"fcint": 10800,
38+
"offset": 0,
39+
"timestep": 3600,
40+
"discipline": 0,
41+
"parameterCategory": 0,
42+
"parameterNumber": 0,
43+
"levelType": 0,
44+
"level": 0,
45+
"typeOfStatisticalProcessing": 0,
46+
"prefer_forecast": True,
47+
"filepattern": "archive/@YYYY@/@MM@/@DD@/@HH@/fc@YYYY@@MM@@DD@@HH@_@LLL@grib2_fp",
48+
"blueprint": {
49+
"0": "archive/2019/11/13/22/fc2019111322_000grib2_fp",
50+
"1": "archive/2019/11/13/22/fc2019111322_001grib2_fp",
51+
"2": "archive/2019/11/13/22/fc2019111322_002grib2_fp",
52+
"3": "archive/2019/11/13/22/fc2019111322_003grib2_fp",
53+
},
54+
"blueprint_previous": {
55+
"1": "archive/2019/11/13/22/fc2019111322_000grib2_fp",
56+
"2": "archive/2019/11/13/22/fc2019111322_001grib2_fp",
57+
"3": "archive/2019/11/13/22/fc2019111322_002grib2_fp",
58+
},
59+
},
60+
"arome_arctic_mbr2_02": {
61+
"fcint": 10800,
62+
"offset": 0,
63+
"timestep": 3600,
64+
"discipline": 0,
65+
"parameterCategory": 0,
66+
"parameterNumber": 0,
67+
"levelType": 0,
68+
"level": 0,
69+
"typeOfStatisticalProcessing": 0,
70+
"prefer_forecast": True,
71+
"filepattern": "archive/@YYYY@/@MM@/@DD@/@HH@/fc@YYYY@@MM@@DD@@HH@_@LLL@grib2_fp",
72+
"blueprint": {
73+
"0": "archive/2019/11/13/23/fc2019111323_000grib2_fp",
74+
"1": "archive/2019/11/13/23/fc2019111323_001grib2_fp",
75+
"2": "archive/2019/11/13/23/fc2019111323_002grib2_fp",
76+
"3": "archive/2019/11/13/23/fc2019111323_003grib2_fp",
77+
},
78+
"blueprint_previous": {
79+
"1": "archive/2019/11/13/23/fc2019111323_000grib2_fp",
80+
"2": "archive/2019/11/13/23/fc2019111323_001grib2_fp",
81+
"3": "archive/2019/11/13/23/fc2019111323_002grib2_fp",
82+
},
83+
},
84+
"arome_arctic_mbr0_12": {
85+
"fcint": 10800,
86+
"offset": 0,
87+
"timestep": 3600,
88+
"discipline": 0,
89+
"parameterCategory": 0,
90+
"parameterNumber": 0,
91+
"levelType": 0,
92+
"level": 0,
93+
"typeOfStatisticalProcessing": 0,
94+
"prefer_forecast": True,
95+
"filepattern": "archive/@YYYY@/@MM@/@DD@/@HH@/fc@YYYY@@MM@@DD@@HH@_@LLL@grib2_fp",
96+
"blueprint": {
97+
"0": "archive/2019/11/14/09/fc2019111409_000grib2_fp",
98+
"1": "archive/2019/11/14/09/fc2019111409_001grib2_fp",
99+
"2": "archive/2019/11/14/09/fc2019111409_002grib2_fp",
100+
"3": "archive/2019/11/14/09/fc2019111409_003grib2_fp",
101+
},
102+
"blueprint_previous": {
103+
"1": "archive/2019/11/14/09/fc2019111409_000grib2_fp",
104+
"2": "archive/2019/11/14/09/fc2019111409_001grib2_fp",
105+
"3": "archive/2019/11/14/09/fc2019111409_002grib2_fp",
106+
},
107+
},
108+
"arome_arctic_mbr1_13": {
109+
"fcint": 10800,
110+
"offset": 0,
111+
"timestep": 3600,
112+
"discipline": 0,
113+
"parameterCategory": 0,
114+
"parameterNumber": 0,
115+
"levelType": 0,
116+
"level": 0,
117+
"typeOfStatisticalProcessing": 0,
118+
"prefer_forecast": True,
119+
"filepattern": "archive/@YYYY@/@MM@/@DD@/@HH@/fc@YYYY@@MM@@DD@@HH@_@LLL@grib2_fp",
120+
"blueprint": {
121+
"0": "archive/2019/11/14/10/fc2019111410_000grib2_fp",
122+
"1": "archive/2019/11/14/10/fc2019111410_001grib2_fp",
123+
"2": "archive/2019/11/14/10/fc2019111410_002grib2_fp",
124+
"3": "archive/2019/11/14/10/fc2019111410_003grib2_fp",
125+
},
126+
"blueprint_previous": {
127+
"1": "archive/2019/11/14/10/fc2019111410_000grib2_fp",
128+
"2": "archive/2019/11/14/10/fc2019111410_001grib2_fp",
129+
"3": "archive/2019/11/14/10/fc2019111410_002grib2_fp",
130+
},
131+
},
132+
"arome_arctic_mbr2_14": {
133+
"fcint": 10800,
134+
"offset": 0,
135+
"timestep": 3600,
136+
"discipline": 0,
137+
"parameterCategory": 0,
138+
"parameterNumber": 0,
139+
"levelType": 0,
140+
"level": 0,
141+
"typeOfStatisticalProcessing": 0,
142+
"prefer_forecast": True,
143+
"filepattern": "archive/@YYYY@/@MM@/@DD@/@HH@/fc@YYYY@@MM@@DD@@HH@_@LLL@grib2_fp",
144+
"blueprint": {
145+
"0": "archive/2019/11/14/11/fc2019111411_000grib2_fp",
146+
"1": "archive/2019/11/14/11/fc2019111411_001grib2_fp",
147+
"2": "archive/2019/11/14/11/fc2019111411_002grib2_fp",
148+
"3": "archive/2019/11/14/11/fc2019111411_003grib2_fp",
149+
},
150+
"blueprint_previous": {
151+
"1": "archive/2019/11/14/11/fc2019111411_000grib2_fp",
152+
"2": "archive/2019/11/14/11/fc2019111411_001grib2_fp",
153+
"3": "archive/2019/11/14/11/fc2019111411_002grib2_fp",
154+
},
155+
},
12156
"long_forecast": {
13157
"fcint": 10800,
14158
"offset": 0,
@@ -243,6 +387,37 @@ def test_open_new_file_nc(fixture):
243387
assert previous_filename == var_dict["blueprint_previous"][str(i)]
244388

245389

390+
@pytest.mark.parametrize(
391+
"case",
392+
[
393+
"arome_arctic_mbr0_00",
394+
"arome_arctic_mbr1_01",
395+
"arome_arctic_mbr2_02",
396+
"arome_arctic_mbr0_12",
397+
"arome_arctic_mbr1_13",
398+
"arome_arctic_mbr2_14",
399+
],
400+
)
401+
def test_arome_arctic_mbr1(case, fixture):
402+
"""Test to open a grib1 file."""
403+
hh = int(case[-2:])
404+
validtime = as_datetime_args(year=2019, month=11, day=14, hour=hh)
405+
intervall = 3600
406+
initialtime = validtime - as_timedelta(seconds=10800)
407+
408+
var_dict = fixture[case]
409+
var_type = "grib2"
410+
for i in range(4):
411+
validtime = initialtime + as_timedelta(seconds=intervall * i)
412+
previoustime = validtime - as_timedelta(seconds=intervall)
413+
variable = Variable(var_type, var_dict, initialtime)
414+
previous_filename = variable.get_filename(validtime, previoustime=previoustime)
415+
filename = variable.get_filename(validtime)
416+
assert filename == var_dict["blueprint"][str(i)]
417+
if i > 0:
418+
assert previous_filename == var_dict["blueprint_previous"][str(i)]
419+
420+
246421
def test_open_new_file_one_forecast(fixture):
247422
"""Test to open a grib1 file."""
248423
initialtime = as_datetime_args(year=2019, month=11, day=13, hour=3)

0 commit comments

Comments
 (0)