diff --git a/epidatpy/_endpoints.py b/epidatpy/_endpoints.py index bd42bd8..d7060ae 100644 --- a/epidatpy/_endpoints.py +++ b/epidatpy/_endpoints.py @@ -870,6 +870,90 @@ def pvt_quidel(self, auth: str, locations: StringParam, epiweeks: EpiRangeParam ], ) + def pub_rvdss( + self, + geo_type: StringParam, + geo_values: Union[str, Sequence[str]] = "*", + time_values: EpiRangeParam = "*", + as_of: Union[None, str, int] = None, + issues: Optional[EpiRangeParam] = None, + ) -> CALL_TYPE: + """Fetch Canadian respiratory data""" + if sum([issues is not None, as_of is not None]) > 1: + raise InvalidArgumentException("`issues` and `as_of` are mutually exclusive.") + + return self._create_call( + "rvdss/", + { + "geo_type": geo_type, + "geo_values": geo_values, + "time_values": time_values, + "as_of": as_of, + "issues": issues, + }, + [ + # descriptive fields + EpidataFieldInfo( + "geo_type", + EpidataFieldType.categorical, + categories=["nation", "region", "province", "lab"] + ), + EpidataFieldInfo("geo_value",EpidataFieldType.text), + EpidataFieldInfo("region", EpidataFieldType.text), + EpidataFieldInfo( + "time_type", + EpidataFieldType.categorical, + categories=["week"] + ), + EpidataFieldInfo("epiweek", EpidataFieldType.epiweek), # Stored as an int in YYYYWW format + EpidataFieldInfo("time_value", EpidataFieldType.epiweek), # Stored as a date + EpidataFieldInfo("issue", EpidataFieldType.epiweek), # Stored as a date + EpidataFieldInfo("week", EpidataFieldType.int), + EpidataFieldInfo("weekorder", EpidataFieldType.int), + EpidataFieldInfo("year", EpidataFieldType.int), + + # value fields + EpidataFieldInfo("adv_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("adv_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("adv_tests", EpidataFieldType.float), + EpidataFieldInfo("evrv_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("evrv_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("evrv_tests", EpidataFieldType.float), + EpidataFieldInfo("flu_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("flu_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("flu_tests", EpidataFieldType.float), + EpidataFieldInfo("flua_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("flua_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("flua_tests", EpidataFieldType.float), + EpidataFieldInfo("fluah1n1pdm09_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("fluah3_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("fluauns_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("flub_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("flub_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("flub_tests", EpidataFieldType.float), + EpidataFieldInfo("hcov_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("hcov_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hcov_tests", EpidataFieldType.float), + EpidataFieldInfo("hmpv_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("hmpv_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hmpv_tests", EpidataFieldType.float), + EpidataFieldInfo("hpiv1_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hpiv2_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hpiv3_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hpiv4_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hpiv_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("hpiv_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("hpiv_tests", EpidataFieldType.float), + EpidataFieldInfo("hpivother_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("rsv_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("rsv_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("rsv_tests", EpidataFieldType.float), + EpidataFieldInfo("sarscov2_pct_positive", EpidataFieldType.float), + EpidataFieldInfo("sarscov2_positive_tests", EpidataFieldType.float), + EpidataFieldInfo("sarscov2_tests", EpidataFieldType.float), + ] + ) + def pvt_sensors( self, auth: str, diff --git a/tests/test_epidata_calls.py b/tests/test_epidata_calls.py index b827225..cc0e9c4 100644 --- a/tests/test_epidata_calls.py +++ b/tests/test_epidata_calls.py @@ -367,6 +367,75 @@ def test_pvt_quidel(self) -> None: assert str(data["epiweek"].dtype) == "string" assert str(data["value"].dtype) == "Float64" + def test_pub_rvdss(self) -> None: + # pylint: disable=too-many-statements + apicall = EpiDataContext().pub_rvdss( + geo_type="province", + geo_values=["yu", "on"], + time_values=EpiRange(20200601, 20200801), + ) + data = apicall.df() + + assert len(data) > 0 + + apicall = EpiDataContext().pub_rvdss( + geo_type="region", + geo_values="*", + time_values=EpiRange(20200601, 20200801), + ) + data = apicall.df() + + assert len(data) > 0 + + assert str(data["geo_type"].dtype) == "string" + assert str(data["geo_value"].dtype) == "string" + assert str(data["region"].dtype) == "string" + assert str(data["time_type"].dtype) == "string" + assert str(data["epiweek"].dtype) == "Int64" + assert str(data["time_value"].dtype) == "datetime64[ns]" + assert str(data["issue"].dtype) == "datetime64[ns]" + assert str(data["week"].dtype) == "Int64" + assert str(data["weekorder"].dtype) == "Int64" + assert str(data["year"].dtype) == "Int64" + assert str(data["adv_pct_positive"].dtype) == "Float64" + assert str(data["adv_positive_tests"].dtype) == "Float64" + assert str(data["adv_tests"].dtype) == "Float64" + assert str(data["evrv_pct_positive"].dtype) == "Float64" + assert str(data["evrv_positive_tests"].dtype) == "Float64" + assert str(data["evrv_tests"].dtype) == "Float64" + assert str(data["flu_pct_positive"].dtype) == "Float64" + assert str(data["flu_positive_tests"].dtype) == "Float64" + assert str(data["flu_tests"].dtype) == "Float64" + assert str(data["flua_pct_positive"].dtype) == "Float64" + assert str(data["flua_positive_tests"].dtype) == "Float64" + assert str(data["flua_tests"].dtype) == "Float64" + assert str(data["fluah1n1pdm09_positive_tests"].dtype) == "Float64" + assert str(data["fluah3_positive_tests"].dtype) == "Float64" + assert str(data["fluauns_positive_tests"].dtype) == "Float64" + assert str(data["flub_pct_positive"].dtype) == "Float64" + assert str(data["flub_positive_tests"].dtype) == "Float64" + assert str(data["flub_tests"].dtype) == "Float64" + assert str(data["hcov_pct_positive"].dtype) == "Float64" + assert str(data["hcov_positive_tests"].dtype) == "Float64" + assert str(data["hcov_tests"].dtype) == "Float64" + assert str(data["hmpv_pct_positive"].dtype) == "Float64" + assert str(data["hmpv_positive_tests"].dtype) == "Float64" + assert str(data["hmpv_tests"].dtype) == "Float64" + assert str(data["hpiv1_positive_tests"].dtype) == "Float64" + assert str(data["hpiv2_positive_tests"].dtype) == "Float64" + assert str(data["hpiv3_positive_tests"].dtype) == "Float64" + assert str(data["hpiv4_positive_tests"].dtype) == "Float64" + assert str(data["hpiv_pct_positive"].dtype) == "Float64" + assert str(data["hpiv_positive_tests"].dtype) == "Float64" + assert str(data["hpiv_tests"].dtype) == "Float64" + assert str(data["hpivother_positive_tests"].dtype) == "Float64" + assert str(data["rsv_pct_positive"].dtype) == "Float64" + assert str(data["rsv_positive_tests"].dtype) == "Float64" + assert str(data["rsv_tests"].dtype) == "Float64" + assert str(data["sarscov2_pct_positive"].dtype) == "Float64" + assert str(data["sarscov2_positive_tests"].dtype) == "Float64" + assert str(data["sarscov2_tests"].dtype) == "Float64" + @pytest.mark.skipif(not secret_sensors, reason="Sensors key not available.") def test_pvt_sensors(self) -> None: apicall = EpiDataContext().pvt_sensors(