Skip to content

Commit 722c8df

Browse files
committed
Test datetime cols and improve datetime handling
1 parent 563c58e commit 722c8df

File tree

3 files changed

+57
-10
lines changed

3 files changed

+57
-10
lines changed

epidatpy/_endpoints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ def pub_flusurv(
663663
[
664664
EpidataFieldInfo("release_date", EpidataFieldType.text),
665665
EpidataFieldInfo("location", EpidataFieldType.text),
666-
EpidataFieldInfo("issue", EpidataFieldType.date),
666+
EpidataFieldInfo("issue", EpidataFieldType.date_or_epiweek),
667667
EpidataFieldInfo("epiweek", EpidataFieldType.epiweek),
668668
EpidataFieldInfo("lag", EpidataFieldType.int),
669669
EpidataFieldInfo("rage_age_0", EpidataFieldType.float),

epidatpy/_parse.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ def parse_api_date(value: Union[str, int, float, None]) -> Optional[date]:
99
if value is None:
1010
return value
1111
v = str(value)
12-
return datetime.strptime(v, "%Y%m%d").date()
12+
if len(v) == 10: # yyyy-mm-dd
13+
d = datetime.strptime(v, "%Y-%m-%d").date()
14+
else:
15+
d = datetime.strptime(v, "%Y%m%d").date()
16+
return d
1317

1418

1519
def parse_api_week(value: Union[str, int, float, None]) -> Optional[date]:
@@ -22,8 +26,11 @@ def parse_api_date_or_week(value: Union[str, int, float, None]) -> Optional[date
2226
if value is None:
2327
return None
2428
v = str(value)
29+
print(len(v))
2530
if len(v) == 6:
2631
d = cast(date, Week.fromstring(v).startdate())
32+
elif len(v) == 10: # yyyy-mm-dd
33+
d = datetime.strptime(v, "%Y-%m-%d").date()
2734
else:
2835
d = datetime.strptime(v, "%Y%m%d").date()
2936
return d

tests/test_epidata_calls.py

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import numpy as np
12
import os
23
from epidatpy.request import Epidata, EpiRange
34

@@ -22,6 +23,7 @@ def test_pvt_cdc() -> None:
2223
)
2324
data = apicall.df()
2425
assert len(data) > 0
26+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
2527

2628
def test_pub_covid_hosp_facility_lookup() -> None:
2729
apicall = Epidata.pub_covid_hosp_facility_lookup(state="fl")
@@ -51,6 +53,8 @@ def test_pub_covid_hosp_state_timeseries() -> None:
5153
dates = EpiRange(20200101, 20200501))
5254
data = apicall.df()
5355
assert len(data) > 0
56+
assert str(data['issue'].dtype) == 'datetime64[ns]'
57+
assert str(data['date'].dtype) == 'datetime64[ns]'
5458

5559
def test_pub_covidcast_meta() -> None:
5660
apicall = Epidata.pub_covidcast_meta()
@@ -76,6 +80,8 @@ def test_pub_covidcast() -> None:
7680
geo_values = "*",
7781
time_values = EpiRange(20200601, 20200801))
7882
data = apicall.df()
83+
assert str(data['time_value'].dtype) == 'datetime64[ns]'
84+
assert str(data['issue'].dtype) == 'datetime64[ns]'
7985
assert len(data) > 0
8086

8187
def test_pub_delphi() -> None:
@@ -93,6 +99,7 @@ def test_pub_dengue_nowcast() -> None:
9399
)
94100
data = apicall.df()
95101
assert len(data) > 0
102+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
96103

97104
def test_pvt_dengue_sensors() -> None:
98105
apicall = Epidata.pvt_dengue_sensors(
@@ -103,43 +110,57 @@ def test_pvt_dengue_sensors() -> None:
103110
)
104111
data = apicall.df()
105112
assert len(data) > 0
113+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
106114

107115
def test_pub_ecdc_ili() -> None:
108116
apicall = Epidata.pub_ecdc_ili(
109117
regions = "austria",
110118
epiweeks = EpiRange(201901, 202001)
111119
)
112-
data = apicall.df(disable_date_parsing=True)
120+
data = apicall.df()
113121
assert len(data) > 0
122+
assert str(data['release_date'].dtype) == 'datetime64[ns]'
123+
assert str(data['issue'].dtype) == 'datetime64[ns]'
124+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
114125

115126
def test_pub_flusurv() -> None:
116127
apicall = Epidata.pub_flusurv(
117128
locations = "CA",
118129
epiweeks = EpiRange(201701, 201801)
119130
)
120-
data = apicall.df(disable_date_parsing=True)
131+
data = apicall.df()
121132
assert len(data) > 0
133+
assert str(data['issue'].dtype) == 'datetime64[ns]'
134+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
122135

123136
def test_pub_fluview_clinical() -> None:
124137
apicall = Epidata.pub_fluview_clinical(
125138
regions = "nat",
126139
epiweeks = EpiRange(201601, 201701)
127140
)
128-
data = apicall.df(disable_date_parsing=True)
141+
data = apicall.df()
129142
assert len(data) > 0
143+
assert str(data['release_date'].dtype) == 'datetime64[ns]'
144+
assert str(data['issue'].dtype) == 'datetime64[ns]'
145+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
130146

131147
def test_pub_fluview_meta() -> None:
132148
apicall = Epidata.pub_fluview_meta()
133-
data = apicall.df(disable_date_parsing=True)
149+
data = apicall.df()
134150
assert len(data) > 0
151+
assert str(data['latest_update'].dtype) == 'datetime64[ns]'
152+
assert str(data['latest_issue'].dtype) == 'datetime64[ns]'
135153

136154
def test_pub_fluview() -> None:
137155
apicall = Epidata.pub_fluview(
138156
regions = "nat",
139157
epiweeks = EpiRange(201201, 202005)
140158
)
141-
data = apicall.df(disable_date_parsing=True)
159+
data = apicall.df()
142160
assert len(data) > 0
161+
assert str(data['release_date'].dtype) == 'datetime64[ns]'
162+
assert str(data['issue'].dtype) == 'datetime64[ns]'
163+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
143164

144165
def test_pub_gft() -> None:
145166
apicall = Epidata.pub_gft(
@@ -148,6 +169,7 @@ def test_pub_gft() -> None:
148169
)
149170
data = apicall.df()
150171
assert len(data) > 0
172+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
151173

152174
def test_pvt_ght() -> None:
153175
apicall = Epidata.pvt_ght(
@@ -158,14 +180,18 @@ def test_pvt_ght() -> None:
158180
)
159181
data = apicall.df()
160182
assert len(data) > 0
183+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
161184

162185
def test_pub_kcdc_ili() -> None:
163186
apicall = Epidata.pub_kcdc_ili(
164187
regions = "ROK",
165188
epiweeks = 200436
166189
)
167-
data = apicall.df(disable_date_parsing=True)
190+
data = apicall.df()
168191
assert len(data) > 0
192+
assert str(data['release_date'].dtype) == 'datetime64[ns]'
193+
assert str(data['issue'].dtype) == 'datetime64[ns]'
194+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
169195

170196
def test_pvt_meta_norostat() -> None:
171197
apicall = Epidata.pvt_meta_norostat(
@@ -186,14 +212,18 @@ def test_pub_nidss_dengue() -> None:
186212
)
187213
data = apicall.df()
188214
assert len(data) > 0
215+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
189216

190217
def test_pub_nidss_flu() -> None:
191218
apicall = Epidata.pub_nidss_flu(
192219
regions = "taipei",
193220
epiweeks = EpiRange(201501, 201601)
194221
)
195-
data = apicall.df(disable_date_parsing=True)
222+
data = apicall.df()
196223
assert len(data) > 0
224+
assert str(data['release_date'].dtype) == 'datetime64[ns]'
225+
assert str(data['issue'].dtype) == 'datetime64[ns]'
226+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
197227

198228
def test_pvt_norostat() -> None:
199229
apicall = Epidata.pvt_norostat(
@@ -204,6 +234,8 @@ def test_pvt_norostat() -> None:
204234
data = apicall.df()
205235
# TODO: Norostat is known to not return data
206236
# assert len(data) > 0
237+
# assert str(data['release_date'].dtype) == 'datetime64[ns]'
238+
# assert str(data['epiweek'].dtype) == 'datetime64[ns]'
207239

208240
def test_pub_nowcast() -> None:
209241
apicall = Epidata.pub_nowcast(
@@ -212,14 +244,18 @@ def test_pub_nowcast() -> None:
212244
)
213245
data = apicall.df()
214246
assert len(data) > 0
247+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
215248

216249
def test_pub_paho_dengue() -> None:
217250
apicall = Epidata.pub_paho_dengue(
218251
regions = "ca",
219252
epiweeks = EpiRange(201401, 201501)
220253
)
221-
data = apicall.df(disable_date_parsing=True)
254+
data = apicall.df()
222255
assert len(data) > 0
256+
assert str(data['release_date'].dtype) == 'datetime64[ns]'
257+
assert str(data['issue'].dtype) == 'datetime64[ns]'
258+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
223259

224260
def test_pvt_quidel() -> None:
225261
apicall = Epidata.pvt_quidel(
@@ -229,6 +265,7 @@ def test_pvt_quidel() -> None:
229265
)
230266
data = apicall.df()
231267
assert len(data) > 0
268+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
232269

233270
def test_pvt_sensors() -> None:
234271
apicall = Epidata.pvt_sensors(
@@ -239,6 +276,7 @@ def test_pvt_sensors() -> None:
239276
)
240277
data = apicall.df()
241278
assert len(data) > 0
279+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
242280

243281
def test_pvt_twitter() -> None:
244282
apicall = Epidata.pvt_twitter(
@@ -249,6 +287,7 @@ def test_pvt_twitter() -> None:
249287
)
250288
data = apicall.df()
251289
assert len(data) > 0
290+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'
252291

253292
def test_pub_wiki() -> None:
254293
apicall = Epidata.pub_wiki(
@@ -258,3 +297,4 @@ def test_pub_wiki() -> None:
258297
)
259298
data = apicall.df()
260299
assert len(data) > 0
300+
assert str(data['epiweek'].dtype) == 'datetime64[ns]'

0 commit comments

Comments
 (0)