Skip to content

Commit acd8aa3

Browse files
/indicator_geo_coverage endpoint (#1658)
* Added new endpoint which accepts source:signals and returns list of geo_type:geo_value pairs * Added tests for the /indicator_geo_coverage endpoint * Update src/server/endpoints/covidcast.py Co-authored-by: george <[email protected]> * Updated endpoint name * Update python docker image to current debian release (#1660) * Fixed test --------- Co-authored-by: george <[email protected]>
1 parent cae43f8 commit acd8aa3

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

integrations/server/test_covidcast_endpoints.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
from delphi.epidata.maintenance.covidcast_meta_cache_updater import main as update_cache
1313
from delphi.epidata.acquisition.covidcast.test_utils import CovidcastBase, CovidcastTestRow
14+
from delphi.epidata.maintenance.coverage_crossref_updater import main as update_crossref
15+
1416

1517
# use the local instance of the Epidata API
1618
BASE_URL = "http://delphi_web_epidata/epidata/covidcast"
@@ -385,3 +387,19 @@ def test_coverage(self):
385387
with self.subTest("invalid geo_type"):
386388
out = self._fetch("/coverage", signal=first.signal_pair(), geo_type="doesnt_exist", format="json")
387389
self.assertEqual(len(out), 0)
390+
391+
def test_geo_indicator_coverage(self):
392+
"""Request a geo_type:geo_value from the /geo_indicator_coverage endpoint."""
393+
394+
self._insert_rows([
395+
CovidcastTestRow.make_default_row(geo_type="state", geo_value="pa"),
396+
CovidcastTestRow.make_default_row(geo_type="state", geo_value="ny"),
397+
CovidcastTestRow.make_default_row(geo_type="state", geo_value="ny", signal="sig2"),
398+
])
399+
400+
update_crossref()
401+
402+
out = self._fetch("/geo_indicator_coverage", data_source="src", signals="sig")
403+
self.assertEqual(len(out["epidata"]), 2)
404+
self.assertEqual(out["epidata"], ['state:ny', 'state:pa'])
405+

src/server/endpoints/covidcast.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,26 @@ def handle_geo_coverage():
561561

562562
return execute_query(q.query, q.params, fields_string, [], [])
563563

564+
@bp.route("/geo_indicator_coverage", methods=("GET", "POST"))
565+
def handle_geo_indicator_coverage():
566+
source_signal_sets = parse_source_signal_sets()
567+
source_signal_sets = restrict_by_roles(source_signal_sets)
568+
source_signal_sets, _ = create_source_signal_alias_mapper(source_signal_sets)
569+
570+
q = QueryBuilder("coverage_crossref_v", "c")
571+
fields_string = ["geo_type", "geo_value"]
572+
573+
q.set_fields(fields_string)
574+
575+
q.apply_source_signal_filters("source", "signal", source_signal_sets)
576+
q.set_sort_order("geo_type", "geo_value")
577+
q.group_by = ["c." + field for field in fields_string] # this condenses duplicate results, similar to `SELECT DISTINCT`
578+
579+
def transform_row(row, proxy):
580+
return f"{row['geo_type']}:{row['geo_value']}"
581+
582+
return execute_query(q.query, q.params, fields_string, [], [], transform=transform_row)
583+
564584
@bp.route("/anomalies", methods=("GET", "POST"))
565585
def handle_anomalies():
566586
"""

0 commit comments

Comments
 (0)