diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 48e0ac03f..138734ba3 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.1.0 +current_version = 0.1.1 commit = False tag = False diff --git a/integrations/acquisition/covidcast/test_covidcast_meta_caching.py b/integrations/acquisition/covidcast/test_covidcast_meta_caching.py index 9c4d69683..f1f9c4ef9 100644 --- a/integrations/acquisition/covidcast/test_covidcast_meta_caching.py +++ b/integrations/acquisition/covidcast/test_covidcast_meta_caching.py @@ -67,14 +67,26 @@ def test_caching(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'state', 20200422, 'pa', 123, 1, 2, 3, 456, 1, 20200422, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), (0, 'src', 'sig', 'day', 'state', 20200422, 'wa', 789, 1, 2, 3, 456, 1, 20200423, 1, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) ''') self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (100, 'src', 'wip_sig', 'day', 'state', 20200422, 'pa', 456, 4, 5, 6, 789, -1, 20200422, 0, 1, True, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) ''') diff --git a/integrations/client/test_delphi_epidata.py b/integrations/client/test_delphi_epidata.py index 063fb61f0..8d3560a68 100644 --- a/integrations/client/test_delphi_epidata.py +++ b/integrations/client/test_delphi_epidata.py @@ -67,7 +67,13 @@ def test_covidcast(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 0, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -331,7 +337,13 @@ def test_geo_value(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '11111', 123, 10, 11, 12, 456, 13, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -432,7 +444,13 @@ def test_covidcast_meta(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 0, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -562,7 +580,13 @@ def test_covidcast_nowcast(self): def test_async_epidata(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '11111', 123, 10, 11, 12, 456, 13, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), diff --git a/integrations/server/test_covid_hosp.py b/integrations/server/test_covid_hosp.py index d64d50cdd..e08f8a761 100644 --- a/integrations/server/test_covid_hosp.py +++ b/integrations/server/test_covid_hosp.py @@ -28,24 +28,24 @@ def setUp(self): cur.execute('truncate table covid_hosp_state_timeseries') cur.execute('truncate table covid_hosp_meta') + + def insert_issue(self, cur, issue, value, record_type): + so_many_nulls = ', '.join(['null'] * 57) + cur.execute(f'''insert into covid_hosp_state_timeseries values ( + 0, {issue}, 'PA', 20201118, {value}, {so_many_nulls}, '{record_type}' + )''') + def test_query_by_issue(self): """Query with and without specifying an issue.""" - # insert dummy data - def insert_issue(cur, issue, value, record_type): - so_many_nulls = ', '.join(['null'] * 57) - cur.execute(f'''insert into covid_hosp_state_timeseries values ( - 0, {issue}, 'PA', 20201118, {value}, {so_many_nulls}, '{record_type}' - )''') - with Database.connect() as db: with db.new_cursor() as cur: # inserting out of order to test server-side order by # also inserting two for 20201201 to test tiebreaker. - insert_issue(cur, 20201201, 123, 'T') - insert_issue(cur, 20201201, 321, 'D') - insert_issue(cur, 20201203, 789, 'T') - insert_issue(cur, 20201202, 456, 'T') + self.insert_issue(cur, 20201201, 123, 'T') + self.insert_issue(cur, 20201201, 321, 'D') + self.insert_issue(cur, 20201203, 789, 'T') + self.insert_issue(cur, 20201202, 456, 'T') # request without issue (defaulting to latest issue) with self.subTest(name='no issue (latest)'): @@ -81,3 +81,20 @@ def insert_issue(cur, issue, value, record_type): self.assertEqual(rows[1]['critical_staffing_shortage_today_yes'], 456) self.assertEqual(rows[2]['issue'], 20201203) self.assertEqual(rows[2]['critical_staffing_shortage_today_yes'], 789) + + + def test_query_by_as_of(self): + with Database.connect() as db: + with db.new_cursor() as cur: + self.insert_issue(cur, 20201101, 0, 'T') + self.insert_issue(cur, 20201102, 1, 'D') + self.insert_issue(cur, 20201103, 2, 'D') + self.insert_issue(cur, 20201103, 3, 'T') + self.insert_issue(cur, 20201104, 4, 'T') + + with self.subTest(name='as_of with multiple issues'): + response = Epidata.covid_hosp('PA', 20201118, as_of=20201103) + self.assertEqual(response['result'], 1) + self.assertEqual(len(response['epidata']), 1) + self.assertEqual(response['epidata'][0]['issue'], 20201103) + self.assertEqual(response['epidata'][0]['critical_staffing_shortage_today_yes'], 2) diff --git a/integrations/server/test_covidcast.py b/integrations/server/test_covidcast.py index c6b65850e..36e4cd880 100644 --- a/integrations/server/test_covidcast.py +++ b/integrations/server/test_covidcast.py @@ -45,7 +45,13 @@ def test_round_trip(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -92,7 +98,13 @@ def test_round_trip(self): # # insert dummy data # self.cur.execute(f''' - # insert into covidcast values + # INSERT INTO + # `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + # `time_value`, `geo_value`, `value_updated_timestamp`, + # `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + # `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + # `missing_stderr`,`missing_sample_size`) + # VALUES # (0, 'src', 'sig', 'day', 'county', 20200414, '01234', # 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False, # {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -129,7 +141,13 @@ def test_csv_format(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -163,7 +181,13 @@ def test_raw_json_format(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -205,7 +229,13 @@ def test_fields(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -326,7 +356,13 @@ def test_location_wildcard(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '11111', 123, 10, 11, 12, 456, 13, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -414,7 +450,13 @@ def test_geo_value(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '11111', 123, 10, 11, 12, 456, 13, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -530,7 +572,13 @@ def test_location_timeline(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200411, '01234', 123, 10, 11, 12, 456, 13, 20200413, 2, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -618,7 +666,13 @@ def test_unique_key_constraint(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 0, 0, 0, 0, 0, 0, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -628,7 +682,13 @@ def test_unique_key_constraint(self): # fail to insert different dummy data under the same key with self.assertRaises(mysql.connector.errors.IntegrityError): self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 1, 1, 1, 1, 1, 1, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -636,7 +696,13 @@ def test_unique_key_constraint(self): # succeed to insert different dummy data under a different issue self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 1, 1, 1, 1, 1, 1, 20200415, 1, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}) @@ -647,7 +713,13 @@ def test_nullable_columns(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200414, '01234', 123, 0.123, NULL, NULL, 456, NULL, 20200414, 0, 1, False, {Nans.NOT_MISSING}, {Nans.OTHER}, {Nans.OTHER}) @@ -693,7 +765,13 @@ def test_temporal_partitioning(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'hour', 'state', 2020041714, 'vi', 123, 10, 11, 12, 456, 13, 2020041714, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), @@ -750,7 +828,13 @@ def test_date_formats(self): # insert dummy data self.cur.execute(f''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, 'src', 'sig', 'day', 'county', 20200411, '01234', 123, 10, 11, 12, 456, 13, 20200413, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}), diff --git a/integrations/server/test_covidcast_endpoints.py b/integrations/server/test_covidcast_endpoints.py index 1f08c429b..84dceb352 100644 --- a/integrations/server/test_covidcast_endpoints.py +++ b/integrations/server/test_covidcast_endpoints.py @@ -127,7 +127,13 @@ def _insert_rows(self, rows: Iterable[CovidcastRow]): sql = ",\n".join((str(r) for r in rows)) self.cur.execute( f""" - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES {sql} """ ) diff --git a/integrations/server/test_covidcast_meta.py b/integrations/server/test_covidcast_meta.py index bfdbc1be6..36a68c3a8 100644 --- a/integrations/server/test_covidcast_meta.py +++ b/integrations/server/test_covidcast_meta.py @@ -47,7 +47,13 @@ def test_round_trip(self): # insert dummy data and accumulate expected results (in sort order) template = ''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, "%s", "%s", "%s", "%s", %d, "%s", 123, %d, 0, 0, 456, 0, %d, 0, 1, %d, %d, %d, %d) ''' @@ -100,7 +106,13 @@ def test_filter(self): # insert dummy data and accumulate expected results (in sort order) template = ''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, "%s", "%s", "%s", "%s", %d, "%s", 123, %d, 0, 0, 456, 0, %d, 0, 1, %d, %d, %d, %d) ''' @@ -218,7 +230,13 @@ def test_suppress_work_in_progress(self): # insert dummy data and accumulate expected results (in sort order) template = ''' - insert into covidcast values + INSERT INTO + `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`, + `time_value`, `geo_value`, `value_updated_timestamp`, + `value`, `stderr`, `sample_size`, `direction_updated_timestamp`, + `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`, + `missing_stderr`,`missing_sample_size`) + VALUES (0, "%s", "%s", "%s", "%s", %d, "%s", 123, %d, 0, 0, 456, 0, %d, 0, 1, %d, %d, %d, %d) ''' diff --git a/integrations/server/test_fluview.py b/integrations/server/test_fluview.py index 9dc2a0841..8bfc18376 100644 --- a/integrations/server/test_fluview.py +++ b/integrations/server/test_fluview.py @@ -48,7 +48,11 @@ def test_round_trip(self): # insert dummy data self.cur.execute(''' - insert into fluview values + INSERT INTO + `fluview` (`id`, `release_date`, `issue`, `epiweek`, `region`, + `lag`, `num_ili`, `num_patients`, `num_providers`, `wili`, `ili`, + `num_age_0`, `num_age_1`, `num_age_2`, `num_age_3`, `num_age_4`, `num_age_5`) + VALUES (0, "2020-04-07", 202021, 202020, "nat", 1, 2, 3, 4, 3.14159, 1.41421, 10, 11, 12, 13, 14, 15) ''') diff --git a/integrations/server/test_fluview_meta.py b/integrations/server/test_fluview_meta.py index 32c2514b9..137e9464a 100644 --- a/integrations/server/test_fluview_meta.py +++ b/integrations/server/test_fluview_meta.py @@ -48,7 +48,11 @@ def test_round_trip(self): # insert dummy data self.cur.execute(''' - insert into fluview values + INSERT INTO + `fluview` (`id`, `release_date`, `issue`, `epiweek`, `region`, + `lag`, `num_ili`, `num_patients`, `num_providers`, `wili`, `ili`, + `num_age_0`, `num_age_1`, `num_age_2`, `num_age_3`, `num_age_4`, `num_age_5`) + VALUES (0, "2020-04-07", 202021, 202020, "nat", 1, 2, 3, 4, 3.14159, 1.41421, 10, 11, 12, 13, 14, 15), (0, "2020-04-28", 202022, 202022, "hhs1", 5, 6, 7, 8, 1.11111, 2.22222, diff --git a/src/client/delphi_epidata.R b/src/client/delphi_epidata.R index 80513a32c..724fb985d 100644 --- a/src/client/delphi_epidata.R +++ b/src/client/delphi_epidata.R @@ -15,7 +15,7 @@ Epidata <- (function() { # API base url BASE_URL <- 'https://delphi.cmu.edu/epidata/api.php' - client_version <- '0.1.0' + client_version <- '0.1.1' # Helper function to cast values and/or ranges to strings .listitem <- function(value) { diff --git a/src/client/delphi_epidata.js b/src/client/delphi_epidata.js index e376755ce..10cbecca0 100644 --- a/src/client/delphi_epidata.js +++ b/src/client/delphi_epidata.js @@ -22,7 +22,7 @@ } })(this, function (exports, fetchImpl, jQuery) { const BASE_URL = "https://delphi.cmu.edu/epidata/"; - const client_version = "0.1.0"; + const client_version = "0.1.1"; // Helper function to cast values and/or ranges to strings function _listitem(value) { diff --git a/src/client/packaging/npm/package.json b/src/client/packaging/npm/package.json index 576ecf476..fc0913723 100644 --- a/src/client/packaging/npm/package.json +++ b/src/client/packaging/npm/package.json @@ -2,7 +2,7 @@ "name": "delphi_epidata", "description": "Delphi Epidata API Client", "authors": "Delphi Group", - "version": "0.1.0", + "version": "0.1.1", "main": "delphi_epidata.js", "types": "delphi_epidata.d.ts", "browser": "delphi_epidata.js", diff --git a/src/client/packaging/pypi/delphi_epidata/__init__.py b/src/client/packaging/pypi/delphi_epidata/__init__.py index 5df935e19..94066c0e7 100644 --- a/src/client/packaging/pypi/delphi_epidata/__init__.py +++ b/src/client/packaging/pypi/delphi_epidata/__init__.py @@ -1,4 +1,4 @@ from .delphi_epidata import Epidata name = 'delphi_epidata' -__version__ = '0.1.0' +__version__ = '0.1.1' diff --git a/src/client/packaging/pypi/setup.py b/src/client/packaging/pypi/setup.py index 8f3f012a2..105b6c8a5 100644 --- a/src/client/packaging/pypi/setup.py +++ b/src/client/packaging/pypi/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="delphi_epidata", - version="0.1.0", + version="0.1.1", author="David Farrow", author_email="dfarrow0@gmail.com", description="A programmatic interface to Delphi's Epidata API.", diff --git a/src/ddl/covidcast.sql b/src/ddl/covidcast.sql index 1bdf9254b..2023874ef 100644 --- a/src/ddl/covidcast.sql +++ b/src/ddl/covidcast.sql @@ -83,7 +83,7 @@ Data is public. */ CREATE TABLE `covidcast` ( - `id` int(11) NOT NULL AUTO_INCREMENT, + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `source` varchar(32) NOT NULL, `signal` varchar(64) NOT NULL, `time_type` varchar(12) NOT NULL, diff --git a/src/server/_config.py b/src/server/_config.py index 036a9083f..2cd506bf2 100644 --- a/src/server/_config.py +++ b/src/server/_config.py @@ -5,7 +5,7 @@ load_dotenv() -VERSION = "0.1.0" +VERSION = "0.1.1" MAX_RESULTS = int(10e6) MAX_COMPATIBILITY_RESULTS = int(3650) diff --git a/src/server/endpoints/covid_hosp_state_timeseries.py b/src/server/endpoints/covid_hosp_state_timeseries.py index e39d9eee4..8224df578 100644 --- a/src/server/endpoints/covid_hosp_state_timeseries.py +++ b/src/server/endpoints/covid_hosp_state_timeseries.py @@ -99,7 +99,7 @@ def handle(): elif as_of is not None: sub_condition_asof = "(issue <= :as_of)" q.params["as_of"] = as_of - query = f"WITH c as (SELECT {q.fields_clause}, ROW_NUMBER() OVER (PARTITION BY date, state, issue ORDER BY record_type) row FROM {q.table} WHERE {q.conditions_clause} AND {sub_condition_asof}) SELECT {q.fields_clause} FROM {q.alias} WHERE row = 1 ORDER BY {q.order_clause}" + query = f"WITH c as (SELECT {q.fields_clause}, ROW_NUMBER() OVER (PARTITION BY date, state ORDER BY issue DESC, record_type) row FROM {q.table} WHERE {q.conditions_clause} AND {sub_condition_asof}) SELECT {q.fields_clause} FROM {q.alias} WHERE row = 1 ORDER BY {q.order_clause}" else: # final query using most recent issues subquery = f"(SELECT max(`issue`) `max_issue`, `date`, `state` FROM {q.table} WHERE {q.conditions_clause} GROUP BY `date`, `state`) x" diff --git a/src/server/endpoints/covidcast.py b/src/server/endpoints/covidcast.py index decff5fc0..dfbee2255 100644 --- a/src/server/endpoints/covidcast.py +++ b/src/server/endpoints/covidcast.py @@ -32,7 +32,6 @@ require_all, require_any, ) -from .._db import sql_table_has_columns from .._pandas import as_pandas, print_pandas from .covidcast_utils import compute_trend, compute_trends, compute_correlations, compute_trend_value, CovidcastMetaEntry, AllSignalsMap from ..utils import shift_time_value, date_to_time_value, time_value_to_iso, time_value_to_date @@ -136,13 +135,9 @@ def handle(): q = QueryBuilder("covidcast", "t") fields_string = ["geo_value", "signal"] - fields_int = ["time_value", "direction", "issue", "lag"] - - missing_fields = ["missing_value", "missing_stderr", "missing_sample_size"] - if sql_table_has_columns("covidcast", missing_fields): - fields_int.extend(missing_fields) - + fields_int = ["time_value", "direction", "issue", "lag", "missing_value", "missing_stderr", "missing_sample_size"] fields_float = ["value", "stderr", "sample_size"] + if is_compatibility_mode(): q.set_order("signal", "time_value", "geo_value", "issue") else: