|
| 1 | +from flask import Blueprint, request |
| 2 | + |
| 3 | +from .._params import ( |
| 4 | + extract_date, |
| 5 | + extract_dates, |
| 6 | + extract_strings, |
| 7 | + parse_time_set, |
| 8 | +) |
| 9 | +from .._query import execute_query, QueryBuilder |
| 10 | +from .._validate import require_all |
| 11 | + |
| 12 | +bp = Blueprint("rvdss", __name__) |
| 13 | + |
| 14 | +db_table_name = "rvdss" |
| 15 | + |
| 16 | +@bp.route("/", methods=("GET", "POST")) |
| 17 | +def handle(): |
| 18 | + require_all(request, "time_type", "time_values", "geo_type", "geo_values") |
| 19 | + |
| 20 | + time_set = parse_time_set() |
| 21 | + geo_type = extract_strings("geo_type") |
| 22 | + geo_values = extract_strings("geo_values") |
| 23 | + issues = extract_dates("issues") |
| 24 | + as_of = extract_date("as_of") |
| 25 | + |
| 26 | + # basic query info |
| 27 | + q = QueryBuilder(db_table_name, "rv") |
| 28 | + |
| 29 | + fields_string = [ |
| 30 | + "geo_type", |
| 31 | + "geo_value", |
| 32 | + "region", |
| 33 | + "time_type", |
| 34 | + ] |
| 35 | + fields_int = [ |
| 36 | + "epiweek", |
| 37 | + "time_value", |
| 38 | + "issue", |
| 39 | + "week", |
| 40 | + "weekorder", |
| 41 | + "year", |
| 42 | + ] |
| 43 | + fields_float = [ |
| 44 | + "adv_pct_positive", |
| 45 | + "adv_positive_tests", |
| 46 | + "adv_tests", |
| 47 | + "evrv_pct_positive", |
| 48 | + "evrv_positive_tests", |
| 49 | + "evrv_tests", |
| 50 | + "flu_pct_positive", |
| 51 | + "flu_positive_tests", |
| 52 | + "flu_tests", |
| 53 | + "flua_pct_positive", |
| 54 | + "flua_positive_tests", |
| 55 | + "flua_tests", |
| 56 | + "fluah1n1pdm09_positive_tests", |
| 57 | + "fluah3_positive_tests", |
| 58 | + "fluauns_positive_tests", |
| 59 | + "flub_pct_positive", |
| 60 | + "flub_positive_tests", |
| 61 | + "flub_tests", |
| 62 | + "hcov_pct_positive", |
| 63 | + "hcov_positive_tests", |
| 64 | + "hcov_tests", |
| 65 | + "hmpv_pct_positive", |
| 66 | + "hmpv_positive_tests", |
| 67 | + "hmpv_tests", |
| 68 | + "hpiv1_positive_tests", |
| 69 | + "hpiv2_positive_tests", |
| 70 | + "hpiv3_positive_tests", |
| 71 | + "hpiv4_positive_tests", |
| 72 | + "hpiv_pct_positive", |
| 73 | + "hpiv_positive_tests", |
| 74 | + "hpiv_tests", |
| 75 | + "hpivother_positive_tests", |
| 76 | + "rsv_pct_positive", |
| 77 | + "rsv_positive_tests", |
| 78 | + "rsv_tests", |
| 79 | + "sarscov2_pct_positive", |
| 80 | + "sarscov2_positive_tests", |
| 81 | + "sarscov2_tests", |
| 82 | + ] |
| 83 | + |
| 84 | + q.set_sort_order("epiweek", "time_value", "geo_type", "geo_value", "issue") |
| 85 | + q.set_fields(fields_string, fields_int, fields_float) |
| 86 | + |
| 87 | + q.where_strings("geo_type", geo_type) |
| 88 | + # Only apply geo_values filter if wildcard "*" was NOT used. |
| 89 | + if not (len(geo_values) == 1 and geo_values[0] == "*"): |
| 90 | + q.where_strings("geo_value", geo_values) |
| 91 | + |
| 92 | + q.apply_time_filter("time_type", "time_value", time_set) |
| 93 | + q.apply_issues_filter(db_table_name, issues) |
| 94 | + q.apply_as_of_filter(db_table_name, as_of, use_source_signal = False) |
| 95 | + |
| 96 | + # send query |
| 97 | + return execute_query(str(q), q.params, fields_string, fields_int, fields_float) |
0 commit comments