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