Skip to content

Commit 833fe7d

Browse files
authored
Merge pull request #604 from cmu-delphi/release/delphi-epidata-0.1.1
Release Delphi Epidata 0.1.1
2 parents bde5d40 + 9a9cc67 commit 833fe7d

18 files changed

+217
-53
lines changed

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 0.1.0
2+
current_version = 0.1.1
33
commit = False
44
tag = False
55

integrations/acquisition/covidcast/test_covidcast_meta_caching.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,26 @@ def test_caching(self):
6767

6868
# insert dummy data
6969
self.cur.execute(f'''
70-
insert into covidcast values
70+
INSERT INTO
71+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
72+
`time_value`, `geo_value`, `value_updated_timestamp`,
73+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
74+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
75+
`missing_stderr`,`missing_sample_size`)
76+
VALUES
7177
(0, 'src', 'sig', 'day', 'state', 20200422, 'pa',
7278
123, 1, 2, 3, 456, 1, 20200422, 0, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
7379
(0, 'src', 'sig', 'day', 'state', 20200422, 'wa',
7480
789, 1, 2, 3, 456, 1, 20200423, 1, 1, False, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
7581
''')
7682
self.cur.execute(f'''
77-
insert into covidcast values
83+
INSERT INTO
84+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
85+
`time_value`, `geo_value`, `value_updated_timestamp`,
86+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
87+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
88+
`missing_stderr`,`missing_sample_size`)
89+
VALUES
7890
(100, 'src', 'wip_sig', 'day', 'state', 20200422, 'pa',
7991
456, 4, 5, 6, 789, -1, 20200422, 0, 1, True, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
8092
''')

integrations/client/test_delphi_epidata.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,13 @@ def test_covidcast(self):
6767

6868
# insert dummy data
6969
self.cur.execute(f'''
70-
insert into covidcast values
70+
INSERT INTO
71+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
72+
`time_value`, `geo_value`, `value_updated_timestamp`,
73+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
74+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
75+
`missing_stderr`,`missing_sample_size`)
76+
VALUES
7177
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
7278
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 0, False,
7379
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -331,7 +337,13 @@ def test_geo_value(self):
331337

332338
# insert dummy data
333339
self.cur.execute(f'''
334-
insert into covidcast values
340+
INSERT INTO
341+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
342+
`time_value`, `geo_value`, `value_updated_timestamp`,
343+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
344+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
345+
`missing_stderr`,`missing_sample_size`)
346+
VALUES
335347
(0, 'src', 'sig', 'day', 'county', 20200414, '11111',
336348
123, 10, 11, 12, 456, 13, 20200414, 0, 1, False,
337349
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -432,7 +444,13 @@ def test_covidcast_meta(self):
432444

433445
# insert dummy data
434446
self.cur.execute(f'''
435-
insert into covidcast values
447+
INSERT INTO
448+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
449+
`time_value`, `geo_value`, `value_updated_timestamp`,
450+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
451+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
452+
`missing_stderr`,`missing_sample_size`)
453+
VALUES
436454
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
437455
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 0, False,
438456
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -562,7 +580,13 @@ def test_covidcast_nowcast(self):
562580
def test_async_epidata(self):
563581
# insert dummy data
564582
self.cur.execute(f'''
565-
insert into covidcast values
583+
INSERT INTO
584+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
585+
`time_value`, `geo_value`, `value_updated_timestamp`,
586+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
587+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
588+
`missing_stderr`,`missing_sample_size`)
589+
VALUES
566590
(0, 'src', 'sig', 'day', 'county', 20200414, '11111',
567591
123, 10, 11, 12, 456, 13, 20200414, 0, 1, False,
568592
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),

integrations/server/test_covid_hosp.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,24 @@ def setUp(self):
2828
cur.execute('truncate table covid_hosp_state_timeseries')
2929
cur.execute('truncate table covid_hosp_meta')
3030

31+
32+
def insert_issue(self, cur, issue, value, record_type):
33+
so_many_nulls = ', '.join(['null'] * 57)
34+
cur.execute(f'''insert into covid_hosp_state_timeseries values (
35+
0, {issue}, 'PA', 20201118, {value}, {so_many_nulls}, '{record_type}'
36+
)''')
37+
3138
def test_query_by_issue(self):
3239
"""Query with and without specifying an issue."""
3340

34-
# insert dummy data
35-
def insert_issue(cur, issue, value, record_type):
36-
so_many_nulls = ', '.join(['null'] * 57)
37-
cur.execute(f'''insert into covid_hosp_state_timeseries values (
38-
0, {issue}, 'PA', 20201118, {value}, {so_many_nulls}, '{record_type}'
39-
)''')
40-
4141
with Database.connect() as db:
4242
with db.new_cursor() as cur:
4343
# inserting out of order to test server-side order by
4444
# also inserting two for 20201201 to test tiebreaker.
45-
insert_issue(cur, 20201201, 123, 'T')
46-
insert_issue(cur, 20201201, 321, 'D')
47-
insert_issue(cur, 20201203, 789, 'T')
48-
insert_issue(cur, 20201202, 456, 'T')
45+
self.insert_issue(cur, 20201201, 123, 'T')
46+
self.insert_issue(cur, 20201201, 321, 'D')
47+
self.insert_issue(cur, 20201203, 789, 'T')
48+
self.insert_issue(cur, 20201202, 456, 'T')
4949

5050
# request without issue (defaulting to latest issue)
5151
with self.subTest(name='no issue (latest)'):
@@ -81,3 +81,20 @@ def insert_issue(cur, issue, value, record_type):
8181
self.assertEqual(rows[1]['critical_staffing_shortage_today_yes'], 456)
8282
self.assertEqual(rows[2]['issue'], 20201203)
8383
self.assertEqual(rows[2]['critical_staffing_shortage_today_yes'], 789)
84+
85+
86+
def test_query_by_as_of(self):
87+
with Database.connect() as db:
88+
with db.new_cursor() as cur:
89+
self.insert_issue(cur, 20201101, 0, 'T')
90+
self.insert_issue(cur, 20201102, 1, 'D')
91+
self.insert_issue(cur, 20201103, 2, 'D')
92+
self.insert_issue(cur, 20201103, 3, 'T')
93+
self.insert_issue(cur, 20201104, 4, 'T')
94+
95+
with self.subTest(name='as_of with multiple issues'):
96+
response = Epidata.covid_hosp('PA', 20201118, as_of=20201103)
97+
self.assertEqual(response['result'], 1)
98+
self.assertEqual(len(response['epidata']), 1)
99+
self.assertEqual(response['epidata'][0]['issue'], 20201103)
100+
self.assertEqual(response['epidata'][0]['critical_staffing_shortage_today_yes'], 2)

integrations/server/test_covidcast.py

Lines changed: 98 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@ def test_round_trip(self):
4545

4646
# insert dummy data
4747
self.cur.execute(f'''
48-
insert into covidcast values
48+
INSERT INTO
49+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
50+
`time_value`, `geo_value`, `value_updated_timestamp`,
51+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
52+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
53+
`missing_stderr`,`missing_sample_size`)
54+
VALUES
4955
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
5056
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False,
5157
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -92,7 +98,13 @@ def test_round_trip(self):
9298

9399
# # insert dummy data
94100
# self.cur.execute(f'''
95-
# insert into covidcast values
101+
# INSERT INTO
102+
# `covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
103+
# `time_value`, `geo_value`, `value_updated_timestamp`,
104+
# `value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
105+
# `direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
106+
# `missing_stderr`,`missing_sample_size`)
107+
# VALUES
96108
# (0, 'src', 'sig', 'day', 'county', 20200414, '01234',
97109
# 123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False,
98110
# {Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -129,7 +141,13 @@ def test_csv_format(self):
129141

130142
# insert dummy data
131143
self.cur.execute(f'''
132-
insert into covidcast values
144+
INSERT INTO
145+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
146+
`time_value`, `geo_value`, `value_updated_timestamp`,
147+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
148+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
149+
`missing_stderr`,`missing_sample_size`)
150+
VALUES
133151
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
134152
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False,
135153
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -163,7 +181,13 @@ def test_raw_json_format(self):
163181

164182
# insert dummy data
165183
self.cur.execute(f'''
166-
insert into covidcast values
184+
INSERT INTO
185+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
186+
`time_value`, `geo_value`, `value_updated_timestamp`,
187+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
188+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
189+
`missing_stderr`,`missing_sample_size`)
190+
VALUES
167191
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
168192
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False,
169193
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -205,7 +229,13 @@ def test_fields(self):
205229

206230
# insert dummy data
207231
self.cur.execute(f'''
208-
insert into covidcast values
232+
INSERT INTO
233+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
234+
`time_value`, `geo_value`, `value_updated_timestamp`,
235+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
236+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
237+
`missing_stderr`,`missing_sample_size`)
238+
VALUES
209239
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
210240
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0, 1, False,
211241
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -326,7 +356,13 @@ def test_location_wildcard(self):
326356

327357
# insert dummy data
328358
self.cur.execute(f'''
329-
insert into covidcast values
359+
INSERT INTO
360+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
361+
`time_value`, `geo_value`, `value_updated_timestamp`,
362+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
363+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
364+
`missing_stderr`,`missing_sample_size`)
365+
VALUES
330366
(0, 'src', 'sig', 'day', 'county', 20200414, '11111',
331367
123, 10, 11, 12, 456, 13, 20200414, 0, 1, False,
332368
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -414,7 +450,13 @@ def test_geo_value(self):
414450

415451
# insert dummy data
416452
self.cur.execute(f'''
417-
insert into covidcast values
453+
INSERT INTO
454+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
455+
`time_value`, `geo_value`, `value_updated_timestamp`,
456+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
457+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
458+
`missing_stderr`,`missing_sample_size`)
459+
VALUES
418460
(0, 'src', 'sig', 'day', 'county', 20200414, '11111',
419461
123, 10, 11, 12, 456, 13, 20200414, 0, 1, False,
420462
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -530,7 +572,13 @@ def test_location_timeline(self):
530572

531573
# insert dummy data
532574
self.cur.execute(f'''
533-
insert into covidcast values
575+
INSERT INTO
576+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
577+
`time_value`, `geo_value`, `value_updated_timestamp`,
578+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
579+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
580+
`missing_stderr`,`missing_sample_size`)
581+
VALUES
534582
(0, 'src', 'sig', 'day', 'county', 20200411, '01234',
535583
123, 10, 11, 12, 456, 13, 20200413, 2, 1, False,
536584
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -618,7 +666,13 @@ def test_unique_key_constraint(self):
618666

619667
# insert dummy data
620668
self.cur.execute(f'''
621-
insert into covidcast values
669+
INSERT INTO
670+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
671+
`time_value`, `geo_value`, `value_updated_timestamp`,
672+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
673+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
674+
`missing_stderr`,`missing_sample_size`)
675+
VALUES
622676
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
623677
0, 0, 0, 0, 0, 0, 20200414, 0, 1, False,
624678
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -628,15 +682,27 @@ def test_unique_key_constraint(self):
628682
# fail to insert different dummy data under the same key
629683
with self.assertRaises(mysql.connector.errors.IntegrityError):
630684
self.cur.execute(f'''
631-
insert into covidcast values
685+
INSERT INTO
686+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
687+
`time_value`, `geo_value`, `value_updated_timestamp`,
688+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
689+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
690+
`missing_stderr`,`missing_sample_size`)
691+
VALUES
632692
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
633693
1, 1, 1, 1, 1, 1, 20200414, 0, 1, False,
634694
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
635695
''')
636696

637697
# succeed to insert different dummy data under a different issue
638698
self.cur.execute(f'''
639-
insert into covidcast values
699+
INSERT INTO
700+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
701+
`time_value`, `geo_value`, `value_updated_timestamp`,
702+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
703+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
704+
`missing_stderr`,`missing_sample_size`)
705+
VALUES
640706
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
641707
1, 1, 1, 1, 1, 1, 20200415, 1, 1, False,
642708
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING})
@@ -647,7 +713,13 @@ def test_nullable_columns(self):
647713

648714
# insert dummy data
649715
self.cur.execute(f'''
650-
insert into covidcast values
716+
INSERT INTO
717+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
718+
`time_value`, `geo_value`, `value_updated_timestamp`,
719+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
720+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
721+
`missing_stderr`,`missing_sample_size`)
722+
VALUES
651723
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
652724
123, 0.123, NULL, NULL, 456, NULL, 20200414, 0, 1, False,
653725
{Nans.NOT_MISSING}, {Nans.OTHER}, {Nans.OTHER})
@@ -693,7 +765,13 @@ def test_temporal_partitioning(self):
693765

694766
# insert dummy data
695767
self.cur.execute(f'''
696-
insert into covidcast values
768+
INSERT INTO
769+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
770+
`time_value`, `geo_value`, `value_updated_timestamp`,
771+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
772+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
773+
`missing_stderr`,`missing_sample_size`)
774+
VALUES
697775
(0, 'src', 'sig', 'hour', 'state', 2020041714, 'vi',
698776
123, 10, 11, 12, 456, 13, 2020041714, 0, 1, False,
699777
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),
@@ -750,7 +828,13 @@ def test_date_formats(self):
750828

751829
# insert dummy data
752830
self.cur.execute(f'''
753-
insert into covidcast values
831+
INSERT INTO
832+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
833+
`time_value`, `geo_value`, `value_updated_timestamp`,
834+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
835+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
836+
`missing_stderr`,`missing_sample_size`)
837+
VALUES
754838
(0, 'src', 'sig', 'day', 'county', 20200411, '01234',
755839
123, 10, 11, 12, 456, 13, 20200413, 0, 1, False,
756840
{Nans.NOT_MISSING}, {Nans.NOT_MISSING}, {Nans.NOT_MISSING}),

integrations/server/test_covidcast_endpoints.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,13 @@ def _insert_rows(self, rows: Iterable[CovidcastRow]):
127127
sql = ",\n".join((str(r) for r in rows))
128128
self.cur.execute(
129129
f"""
130-
insert into covidcast values
130+
INSERT INTO
131+
`covidcast` (`id`, `source`, `signal`, `time_type`, `geo_type`,
132+
`time_value`, `geo_value`, `value_updated_timestamp`,
133+
`value`, `stderr`, `sample_size`, `direction_updated_timestamp`,
134+
`direction`, `issue`, `lag`, `is_latest_issue`, `is_wip`,`missing_value`,
135+
`missing_stderr`,`missing_sample_size`)
136+
VALUES
131137
{sql}
132138
"""
133139
)

0 commit comments

Comments
 (0)