diff --git a/src/alternative_interface/helper.py b/src/alternative_interface/helper.py index c64f44a..d457d42 100644 --- a/src/alternative_interface/helper.py +++ b/src/alternative_interface/helper.py @@ -61,6 +61,16 @@ "state:WI": "WI", "state:WV": "WV", "state:WY": "WY", + # fluview (ILINET) specific locations + "ny_minus_jfk:ny_minus_jfk": "NY (minus NYC)", + "us-territory:as": "American Samoa", + "us-territory:mp": "Mariana Islands", + "us-territory:gu": "Guam", + "us-territory:pr": "Puerto Rico", + "us-territory:vi": "Virgin Islands", + "us-city:ord": "Chicago", + "us-city:lax": "Los Angeles", + "us-city:jfk": "New York City", } EXPRESS_VIEW_LABELS_MAPPING = { diff --git a/src/indicatorsets/filters.py b/src/indicatorsets/filters.py index 613926c..fb77e94 100644 --- a/src/indicatorsets/filters.py +++ b/src/indicatorsets/filters.py @@ -1,4 +1,5 @@ import logging +import ast import django_filters @@ -13,6 +14,7 @@ ) from indicators.models import Indicator from base.models import Pathogen, Geography, SeverityPyramidRung +from alternative_interface.helper import COVIDCAST_FLUVIEW_LOCATIONS_MAPPING logger = logging.getLogger(__name__) @@ -123,18 +125,27 @@ def hosted_by_delphi_filter(self, queryset, name, value): return queryset + @staticmethod + def include_fluview(values): + include_fluview = False + for value in ast.literal_eval(values): + if COVIDCAST_FLUVIEW_LOCATIONS_MAPPING.get(value): + include_fluview = True + break + return include_fluview + def location_search_filter(self, queryset, name, value): if not value: return queryset + indicator_sets = [] filtered_indicators = get_list_of_indicators_filtered_by_geo(value) + include_fluview = self.include_fluview(value) + query = Q() if filtered_indicators["epidata"]: - query = Q() for item in filtered_indicators["epidata"]: query |= Q(source__name=item["source"], name=item["signal"]) - self.indicators_qs = self.indicators_qs.filter(query) - indicator_sets = self.indicators_qs.values_list( - "indicator_set_id", flat=True - ).distinct() - return queryset.filter(id__in=indicator_sets) - else: - return IndicatorSet.objects.none() + if include_fluview: + query |= Q(indicator_set__epidata_endpoint="fluview") + self.indicators_qs = self.indicators_qs.filter(query) + indicator_sets = list(self.indicators_qs.values_list("indicator_set_id", flat=True).order_by("indicator_set_id").distinct()) + return queryset.filter(id__in=indicator_sets)