1- import sys
21import base64
32import json
4- import requests
3+ import sys
4+ from datetime import datetime
55from textwrap import dedent
66
7-
7+ import requests
8+ from delphi_utils import get_structured_logger
89from django .conf import settings
10+ from django .db .models import Case , IntegerField , Value , When
911from django .http import JsonResponse
1012from django .views .generic import ListView
11- from django . db . models import Case , When , Value , IntegerField
13+ from epiweeks import Week
1214
15+ from alternative_interface .utils import get_fluview_data
1316from base .models import Geography , GeographyUnit
1417from indicatorsets .filters import IndicatorSetFilter
1518from indicatorsets .forms import IndicatorSetFilterForm
16- from indicatorsets .models import IndicatorSet , FilterDescription , ColumnDescription
19+ from indicatorsets .models import ColumnDescription , FilterDescription , IndicatorSet
1720from indicatorsets .utils import (
18- group_by_property ,
1921 generate_covidcast_dataset_epivis ,
20- generate_fluview_dataset_epivis ,
21- generate_nidss_flu_dataset_epivis ,
22- generate_nidss_dengue_dataset_epivis ,
23- generate_flusurv_dataset_epivis ,
2422 generate_covidcast_indicators_export_url ,
23+ generate_flusurv_dataset_epivis ,
24+ generate_flusurv_export_url ,
25+ generate_fluview_dataset_epivis ,
2526 generate_fluview_indicators_export_url ,
26- generate_nidss_flu_export_url ,
27+ generate_nidss_dengue_dataset_epivis ,
2728 generate_nidss_dengue_export_url ,
28- generate_flusurv_export_url ,
29- preview_covidcast_data ,
30- preview_fluview_data ,
31- preview_nidss_flu_data ,
32- preview_nidss_dengue_data ,
33- preview_flusurv_data ,
29+ generate_nidss_flu_dataset_epivis ,
30+ generate_nidss_flu_export_url ,
3431 generate_query_code_covidcast ,
32+ generate_query_code_flusurv ,
3533 generate_query_code_fluview ,
36- generate_query_code_nidss_flu ,
3734 generate_query_code_nidss_dengue ,
38- generate_query_code_flusurv ,
39- log_form_data ,
40- log_form_stats ,
35+ generate_query_code_nidss_flu ,
4136 get_grouped_original_data_provider_choices ,
4237 get_num_locations_from_meta ,
38+ group_by_property ,
39+ log_form_data ,
40+ log_form_stats ,
41+ preview_covidcast_data ,
42+ preview_flusurv_data ,
43+ preview_fluview_data ,
44+ preview_nidss_dengue_data ,
45+ preview_nidss_flu_data ,
4346)
4447
45- from delphi_utils import get_structured_logger
46-
4748indicatorsets_logger = get_structured_logger ("indicatorsets_logger" )
4849
4950
@@ -59,13 +60,9 @@ def get_related_indicators(queryset, indicator_set_ids: list):
5960 "display_name" : (
6061 indicator .get_display_name if indicator .get_display_name else ""
6162 ),
62- "member_name" : (
63- indicator .member_name if indicator .member_name else ""
64- ),
63+ "member_name" : (indicator .member_name if indicator .member_name else "" ),
6564 "member_short_name" : (
66- indicator .member_short_name
67- if indicator .member_short_name
68- else ""
65+ indicator .member_short_name if indicator .member_short_name else ""
6966 ),
7067 "name" : indicator .name if indicator .name else "" ,
7168 "indicator_set" : (
@@ -86,9 +83,7 @@ def get_related_indicators(queryset, indicator_set_ids: list):
8683 ),
8784 "source" : indicator .source .name if indicator .source else "" ,
8885 "time_type" : indicator .time_type if indicator .time_type else "" ,
89- "description" : (
90- indicator .description if indicator .description else ""
91- ),
86+ "description" : (indicator .description if indicator .description else "" ),
9287 "member_description" : (
9388 indicator .member_description
9489 if indicator .member_description
@@ -559,3 +554,56 @@ def get_related_indicators_json(request):
559554 "num_of_timeseries" : num_of_timeseries ,
560555 }
561556 )
557+
558+
559+ def check_fluview_geo_coverage (request ):
560+ null_data_indicators = []
561+ if request .method == "GET" :
562+ geo_value = request .GET .get ("geo" )
563+ indicators = request .GET .get ("indicators" )
564+ start_date = 199740
565+ end_date = Week .fromdate (datetime .today ())
566+ end_date = f"{ end_date .year } { end_date .week if end_date .week >= 10 else '0' + str (end_date .week )} "
567+ indicators = json .loads (indicators )
568+
569+ fluview_indicators = {}
570+ fluview_clinical_indicators = {}
571+ for indicator in indicators :
572+ if indicator ["data_source" ] == "fluview" :
573+ fluview_indicators [indicator ["indicator" ]] = 0
574+ elif indicator ["data_source" ] == "fluview_clinical" :
575+ fluview_clinical_indicators [indicator ["indicator" ]] = 0
576+
577+ params = {
578+ "regions" : geo_value ,
579+ "epiweeks" : f"{ start_date } -{ end_date } " ,
580+ "api_key" : settings .EPIDATA_API_KEY ,
581+ }
582+
583+ if fluview_indicators :
584+ response = requests .get (f"{ settings .EPIDATA_URL } fluview" , params = params )
585+ if response .status_code == 200 :
586+ data = response .json ()
587+ if len (data ["epidata" ]):
588+ for el in data ["epidata" ]:
589+ for indicator in fluview_indicators .keys ():
590+ fluview_indicators [indicator ] += el [indicator ] if el [indicator ] else 0
591+ if fluview_clinical_indicators :
592+ response = requests .get (
593+ f"{ settings .EPIDATA_URL } fluview_clinical" , params = params
594+ )
595+ if response .status_code == 200 :
596+ data = response .json ()
597+ if len (data ["epidata" ]):
598+ for el in data ["epidata" ]:
599+ for indicator in fluview_clinical_indicators .keys ():
600+ fluview_clinical_indicators [indicator ] += el [indicator ]
601+
602+ for indicator in fluview_indicators .keys ():
603+ if fluview_indicators [indicator ] == 0 :
604+ null_data_indicators .append (indicator )
605+ for indicator in fluview_clinical_indicators .keys ():
606+ if fluview_clinical_indicators [indicator ] == 0 :
607+ null_data_indicators .append (indicator )
608+ not_covered_indicators = [indicator for indicator in indicators if indicator ["indicator" ] in null_data_indicators ]
609+ return JsonResponse ({"not_covered_indicators" : not_covered_indicators })
0 commit comments