Skip to content

Commit 9feb971

Browse files
committed
add rvdss endpoint and basic tests
1 parent ea4a098 commit 9feb971

File tree

2 files changed

+142
-0
lines changed

2 files changed

+142
-0
lines changed

epidatpy/_endpoints.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,80 @@ def pvt_quidel(self, auth: str, locations: StringParam, epiweeks: EpiRangeParam
870870
],
871871
)
872872

873+
def pub_rvdss(
874+
self,
875+
geo_type: GeoType,
876+
geo_values: Union[str, Sequence[str]] = "*",
877+
time_values: EpiRangeParam = "*",
878+
as_of: Union[None, str, int] = None,
879+
issues: Optional[EpiRangeParam] = None,
880+
) -> CALL_TYPE:
881+
"""Fetch Canadian respiratory data"""
882+
if sum([issues is not None, as_of is not None]) > 1:
883+
raise InvalidArgumentException("`issues` and `as_of` are mutually exclusive.")
884+
885+
return self._create_call(
886+
"rvdss/",
887+
{
888+
"geo_type": geo_type,
889+
"geo_values": geo_values,
890+
"time_values": time_values,
891+
"as_of": as_of,
892+
"issues": issues,
893+
},
894+
# descriptive fields
895+
EpidataFieldInfo("geo_type", EpidataFieldType.categorical, categories=list("nation", "region", "province", "lab")),
896+
EpidataFieldInfo("geo_value", EpidataFieldInfo.text),
897+
EpidataFieldInfo("region", EpidataFieldInfo.text),
898+
EpidataFieldInfo("time_type", EpidataFieldType.categorical, categories=list("week")),
899+
EpidataFieldInfo("epiweek", EpidataFieldInfo.epiweek), # Stored as an int in YYYYWW format
900+
EpidataFieldInfo("time_value", EpidataFieldInfo.epiweek), # Stored as a date
901+
EpidataFieldInfo("issue", EpidataFieldInfo.epiweek), # Stored as a date
902+
EpidataFieldInfo("week", EpidataFieldInfo.int),
903+
EpidataFieldInfo("weekorder", EpidataFieldInfo.int),
904+
EpidataFieldInfo("year", EpidataFieldInfo.int),
905+
906+
# value fields
907+
EpidataFieldInfo("adv_pct_positive", EpidataFieldInfo.float),
908+
EpidataFieldInfo("adv_positive_tests", EpidataFieldInfo.float),
909+
EpidataFieldInfo("adv_tests", EpidataFieldInfo.float),
910+
EpidataFieldInfo("evrv_pct_positive", EpidataFieldInfo.float),
911+
EpidataFieldInfo("evrv_positive_tests", EpidataFieldInfo.float),
912+
EpidataFieldInfo("evrv_tests", EpidataFieldInfo.float),
913+
EpidataFieldInfo("flu_pct_positive", EpidataFieldInfo.float),
914+
EpidataFieldInfo("flu_positive_tests", EpidataFieldInfo.float),
915+
EpidataFieldInfo("flu_tests", EpidataFieldInfo.float),
916+
EpidataFieldInfo("flua_pct_positive", EpidataFieldInfo.float),
917+
EpidataFieldInfo("flua_positive_tests", EpidataFieldInfo.float),
918+
EpidataFieldInfo("flua_tests", EpidataFieldInfo.float),
919+
EpidataFieldInfo("fluah1n1pdm09_positive_tests", EpidataFieldInfo.float),
920+
EpidataFieldInfo("fluah3_positive_tests", EpidataFieldInfo.float),
921+
EpidataFieldInfo("fluauns_positive_tests", EpidataFieldInfo.float),
922+
EpidataFieldInfo("flub_pct_positive", EpidataFieldInfo.float),
923+
EpidataFieldInfo("flub_positive_tests", EpidataFieldInfo.float),
924+
EpidataFieldInfo("flub_tests", EpidataFieldInfo.float),
925+
EpidataFieldInfo("hcov_pct_positive", EpidataFieldInfo.float),
926+
EpidataFieldInfo("hcov_positive_tests", EpidataFieldInfo.float),
927+
EpidataFieldInfo("hcov_tests", EpidataFieldInfo.float),
928+
EpidataFieldInfo("hmpv_pct_positive", EpidataFieldInfo.float),
929+
EpidataFieldInfo("hmpv_positive_tests", EpidataFieldInfo.float),
930+
EpidataFieldInfo("hmpv_tests", EpidataFieldInfo.float),
931+
EpidataFieldInfo("hpiv1_positive_tests", EpidataFieldInfo.float),
932+
EpidataFieldInfo("hpiv2_positive_tests", EpidataFieldInfo.float),
933+
EpidataFieldInfo("hpiv3_positive_tests", EpidataFieldInfo.float),
934+
EpidataFieldInfo("hpiv4_positive_tests", EpidataFieldInfo.float),
935+
EpidataFieldInfo("hpiv_pct_positive", EpidataFieldInfo.float),
936+
EpidataFieldInfo("hpiv_positive_tests", EpidataFieldInfo.float),
937+
EpidataFieldInfo("hpiv_tests", EpidataFieldInfo.float),
938+
EpidataFieldInfo("hpivother_positive_tests", EpidataFieldInfo.float),
939+
EpidataFieldInfo("rsv_pct_positive", EpidataFieldInfo.float),
940+
EpidataFieldInfo("rsv_positive_tests", EpidataFieldInfo.float),
941+
EpidataFieldInfo("rsv_tests", EpidataFieldInfo.float),
942+
EpidataFieldInfo("sarscov2_pct_positive", EpidataFieldInfo.float),
943+
EpidataFieldInfo("sarscov2_positive_tests", EpidataFieldInfo.float),
944+
EpidataFieldInfo("sarscov2_tests", EpidataFieldInfo.float)
945+
)
946+
873947
def pvt_sensors(
874948
self,
875949
auth: str,

tests/test_epidata_calls.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,74 @@ def test_pvt_quidel(self) -> None:
367367
assert str(data["epiweek"].dtype) == "string"
368368
assert str(data["value"].dtype) == "Float64"
369369

370+
def test_pub_rvdss(self) -> None:
371+
apicall = EpiDataContext().pub_rvdss(
372+
geo_type="province",
373+
geo_values=["yu", "on"],
374+
time_values=EpiRange(20200601, 20200801),
375+
)
376+
data = apicall.df()
377+
378+
assert len(data) > 0
379+
380+
apicall = EpiDataContext().pub_covidcast(
381+
geo_type="region",
382+
geo_values="*",
383+
time_values=EpiRange(20200601, 20200801),
384+
)
385+
data = apicall.df()
386+
387+
assert len(data) > 0
388+
389+
assert str(data["geo_type"].dtype) == "string"
390+
assert str(data["geo_value"].dtype) == "string"
391+
assert str(data["region"].dtype) == "string"
392+
assert str(data["time_type"].dtype) == "string"
393+
assert str(data["epiweek"].dtype) == "Int64"
394+
assert str(data["time_value""datetime64].dtype) == [ns]"
395+
assert str(data["issue""datetime64].dtype) == [ns]"
396+
assert str(data["week"].dtype) == "Int64"
397+
assert str(data["weekorder"].dtype) == "Int64"
398+
assert str(data["year"].dtype) == "Int64"
399+
assert str(data["adv_pct_positive"].dtype) == "Float64"
400+
assert str(data["adv_positive_tests"].dtype) == "Float64"
401+
assert str(data["adv_tests"].dtype) == "Float64"
402+
assert str(data["evrv_pct_positive"].dtype) == "Float64"
403+
assert str(data["evrv_positive_tests"].dtype) == "Float64"
404+
assert str(data["evrv_tests"].dtype) == "Float64"
405+
assert str(data["flu_pct_positive"].dtype) == "Float64"
406+
assert str(data["flu_positive_tests"].dtype) == "Float64"
407+
assert str(data["flu_tests"].dtype) == "Float64"
408+
assert str(data["flua_pct_positive"].dtype) == "Float64"
409+
assert str(data["flua_positive_tests"].dtype) == "Float64"
410+
assert str(data["flua_tests"].dtype) == "Float64"
411+
assert str(data["fluah1n1pdm09_positive_tests"].dtype) == "Float64"
412+
assert str(data["fluah3_positive_tests"].dtype) == "Float64"
413+
assert str(data["fluauns_positive_tests"].dtype) == "Float64"
414+
assert str(data["flub_pct_positive"].dtype) == "Float64"
415+
assert str(data["flub_positive_tests"].dtype) == "Float64"
416+
assert str(data["flub_tests"].dtype) == "Float64"
417+
assert str(data["hcov_pct_positive"].dtype) == "Float64"
418+
assert str(data["hcov_positive_tests"].dtype) == "Float64"
419+
assert str(data["hcov_tests"].dtype) == "Float64"
420+
assert str(data["hmpv_pct_positive"].dtype) == "Float64"
421+
assert str(data["hmpv_positive_tests"].dtype) == "Float64"
422+
assert str(data["hmpv_tests"].dtype) == "Float64"
423+
assert str(data["hpiv1_positive_tests"].dtype) == "Float64"
424+
assert str(data["hpiv2_positive_tests"].dtype) == "Float64"
425+
assert str(data["hpiv3_positive_tests"].dtype) == "Float64"
426+
assert str(data["hpiv4_positive_tests"].dtype) == "Float64"
427+
assert str(data["hpiv_pct_positive"].dtype) == "Float64"
428+
assert str(data["hpiv_positive_tests"].dtype) == "Float64"
429+
assert str(data["hpiv_tests"].dtype) == "Float64"
430+
assert str(data["hpivother_positive_tests"].dtype) == "Float64"
431+
assert str(data["rsv_pct_positive"].dtype) == "Float64"
432+
assert str(data["rsv_positive_tests"].dtype) == "Float64"
433+
assert str(data["rsv_tests"].dtype) == "Float64"
434+
assert str(data["sarscov2_pct_positive"].dtype) == "Float64"
435+
assert str(data["sarscov2_positive_tests"].dtype) == "Float64"
436+
assert str(data["sarscov2_tests"].dtype) == "Float64"
437+
370438
@pytest.mark.skipif(not secret_sensors, reason="Sensors key not available.")
371439
def test_pvt_sensors(self) -> None:
372440
apicall = EpiDataContext().pvt_sensors(

0 commit comments

Comments
 (0)