Skip to content

Commit 28b9f8a

Browse files
committed
Add support for querying multiple signals; cmu-delphi/covidcast-indicators#116
* backwards-compatible signal/signals parameter * optional 'format' parameter for retrieving results as a tree (preferred by Viz) or as a flat list (backwards-compatible); defaults to flat list * client support: coffee, js, R, py * integration tests to check multi-signal queries and queries for tree format
1 parent cdc590a commit 28b9f8a

11 files changed

+178
-53
lines changed

integrations/acquisition/covidcast/test_covidcast_meta_caching.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ def test_caching(self):
100100
'stdev_value': 0,
101101
'max_issue': 20200423,
102102
'min_lag': 0,
103-
'max_lag': 1
103+
'max_lag': 1,
104104
}
105105
])
106-
epidata1={'result':1,'message':'success','epidata':epidata1}
106+
epidata1={'result':1, 'message':'success', 'epidata':epidata1}
107107

108108
# make sure the API covidcast_meta is still blank, since it only serves
109109
# the cached version and we haven't cached anything yet
110110
epidata2 = Epidata.covidcast_meta()
111-
self.assertEqual(epidata2['result'], -2)
111+
self.assertEqual(epidata2['result'], -2, json.dumps(epidata2))
112112

113113
# update the cache
114114
args = None

integrations/acquisition/covidcast/test_csv_uploading.py

+6
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ def apply_lag(expected_epidata):
121121
'stderr': 0.1,
122122
'sample_size': 10,
123123
'direction': None,
124+
'signal': 'test',
124125
},
125126
{
126127
'time_value': 20200419,
@@ -129,6 +130,7 @@ def apply_lag(expected_epidata):
129130
'stderr': 0.3,
130131
'sample_size': 30,
131132
'direction': None,
133+
'signal': 'test',
132134
},
133135
{
134136
'time_value': 20200419,
@@ -137,6 +139,7 @@ def apply_lag(expected_epidata):
137139
'stderr': 0.2,
138140
'sample_size': 20,
139141
'direction': None,
142+
'signal': 'test',
140143
},
141144
]),
142145
'message': 'success',
@@ -159,6 +162,7 @@ def apply_lag(expected_epidata):
159162
'stderr': 0.01,
160163
'sample_size': 100,
161164
'direction': None,
165+
'signal': 'wip_prototype',
162166
},
163167
{
164168
'time_value': 20200419,
@@ -167,6 +171,7 @@ def apply_lag(expected_epidata):
167171
'stderr': 0.02,
168172
'sample_size': 200,
169173
'direction': None,
174+
'signal': 'wip_prototype',
170175
},
171176
{
172177
'time_value': 20200419,
@@ -175,6 +180,7 @@ def apply_lag(expected_epidata):
175180
'stderr': 0.03,
176181
'sample_size': 300,
177182
'direction': None,
183+
'signal': 'wip_prototype',
178184
},
179185
]),
180186
'message': 'success',

integrations/acquisition/covidcast/test_direction_updating.py

+18-9
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ def test_uploading(self):
101101
'sample_size': 0,
102102
'direction': None,
103103
'issue': 20200228,
104-
'lag': 0
104+
'lag': 0,
105+
'signal': 'sig',
105106
},
106107
{
107108
'time_value': 20200229,
@@ -111,7 +112,8 @@ def test_uploading(self):
111112
'sample_size': 0,
112113
'direction': None,
113114
'issue': 20200229,
114-
'lag': 0
115+
'lag': 0,
116+
'signal': 'sig',
115117
},
116118
{
117119
'time_value': 20200301,
@@ -121,7 +123,8 @@ def test_uploading(self):
121123
'sample_size': 0,
122124
'direction': 1,
123125
'issue': 20200301,
124-
'lag': 0
126+
'lag': 0,
127+
'signal': 'sig',
125128
},
126129
{
127130
'time_value': 20200511,
@@ -131,7 +134,8 @@ def test_uploading(self):
131134
'sample_size': 0,
132135
'direction': None,
133136
'issue': 20200511,
134-
'lag': 0
137+
'lag': 0,
138+
'signal': 'sig',
135139
},
136140
{
137141
'time_value': 20200512,
@@ -141,7 +145,8 @@ def test_uploading(self):
141145
'sample_size': 0,
142146
'direction': None,
143147
'issue': 20200512,
144-
'lag': 0
148+
'lag': 0,
149+
'signal': 'sig',
145150
},
146151
{
147152
'time_value': 20200517,
@@ -151,7 +156,8 @@ def test_uploading(self):
151156
'sample_size': 0,
152157
'direction': 0,
153158
'issue': 20200517,
154-
'lag': 0
159+
'lag': 0,
160+
'signal': 'sig',
155161
},
156162
{
157163
'time_value': 20200615,
@@ -161,7 +167,8 @@ def test_uploading(self):
161167
'sample_size': 0,
162168
'direction': None,
163169
'issue': 20200615,
164-
'lag': 0
170+
'lag': 0,
171+
'signal': 'sig',
165172
},
166173
{
167174
'time_value': 20200616,
@@ -171,7 +178,8 @@ def test_uploading(self):
171178
'sample_size': 0,
172179
'direction': None,
173180
'issue': 20200616,
174-
'lag': 0
181+
'lag': 0,
182+
'signal': 'sig',
175183
},
176184
{
177185
'time_value': 20200617,
@@ -181,7 +189,8 @@ def test_uploading(self):
181189
'sample_size': 0,
182190
'direction': 1,
183191
'issue': 20200617,
184-
'lag': 0
192+
'lag': 0,
193+
'signal': 'sig',
185194
},
186195
],
187196
'message': 'success',

integrations/client/test_delphi_epidata.py

+78-7
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,85 @@ def tearDown(self):
4545

4646
def test_covidcast(self):
4747
"""Test that the covidcast endpoint returns expected data."""
48-
48+
self.maxDiff=None
49+
4950
# insert dummy data
5051
self.cur.execute('''
5152
insert into covidcast values
5253
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
5354
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0),
55+
(0, 'src', 'sig2', 'day', 'county', 20200414, '01234',
56+
123, 1.5, 2.5, 3.5, 456, 4, 20200414, 0),
5457
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
5558
456, 5.5, 1.2, 10.5, 789, 0, 20200415, 1),
5659
(0, 'src', 'sig', 'day', 'county', 20200414, '01234',
5760
345, 6.5, 2.2, 11.5, 678, 0, 20200416, 2)
5861
''')
5962
self.cnx.commit()
6063

64+
# fetch data
65+
response = Epidata.covidcast(
66+
'src', ['sig','sig2'], 'day', 'county', 20200414, '01234')
67+
68+
# check result
69+
self.assertEqual(response, {
70+
'result': 1,
71+
'epidata': [{
72+
'time_value': 20200414,
73+
'geo_value': '01234',
74+
'value': 6.5,
75+
'stderr': 2.2,
76+
'sample_size': 11.5,
77+
'direction': 0,
78+
'issue': 20200416,
79+
'lag': 2,
80+
'signal': 'sig',
81+
},{
82+
'time_value': 20200414,
83+
'geo_value': '01234',
84+
'value': 1.5,
85+
'stderr': 2.5,
86+
'sample_size': 3.5,
87+
'direction': 4,
88+
'issue': 20200414,
89+
'lag': 0,
90+
'signal': 'sig2',
91+
}],
92+
'message': 'success',
93+
})
94+
95+
# fetch data
96+
response = Epidata.covidcast(
97+
'src', ['sig','sig2'], 'day', 'county', 20200414, '01234', format='tree')
98+
99+
# check result
100+
self.assertEqual(response, {
101+
'result': 1,
102+
'epidata': [{
103+
'sig': [{
104+
'time_value': 20200414,
105+
'geo_value': '01234',
106+
'value': 6.5,
107+
'stderr': 2.2,
108+
'sample_size': 11.5,
109+
'direction': 0,
110+
'issue': 20200416,
111+
'lag': 2,
112+
}],
113+
'sig2': [{
114+
'time_value': 20200414,
115+
'geo_value': '01234',
116+
'value': 1.5,
117+
'stderr': 2.5,
118+
'sample_size': 3.5,
119+
'direction': 4,
120+
'issue': 20200414,
121+
'lag': 0,
122+
}],
123+
}],
124+
'message': 'success',
125+
})
126+
61127
# fetch data, without specifying issue or lag
62128
response_1 = Epidata.covidcast(
63129
'src', 'sig', 'day', 'county', 20200414, '01234')
@@ -73,7 +139,8 @@ def test_covidcast(self):
73139
'sample_size': 11.5,
74140
'direction': 0,
75141
'issue': 20200416,
76-
'lag': 2
142+
'lag': 2,
143+
'signal': 'sig',
77144
}],
78145
'message': 'success',
79146
})
@@ -94,7 +161,8 @@ def test_covidcast(self):
94161
'sample_size': 10.5,
95162
'direction': 0,
96163
'issue': 20200415,
97-
'lag': 1
164+
'lag': 1,
165+
'signal': 'sig',
98166
}],
99167
'message': 'success',
100168
})
@@ -115,7 +183,8 @@ def test_covidcast(self):
115183
'sample_size': 3.5,
116184
'direction': 4,
117185
'issue': 20200414,
118-
'lag': 0
186+
'lag': 0,
187+
'signal': 'sig',
119188
}, {
120189
'time_value': 20200414,
121190
'geo_value': '01234',
@@ -124,7 +193,8 @@ def test_covidcast(self):
124193
'sample_size': 10.5,
125194
'direction': 0,
126195
'issue': 20200415,
127-
'lag': 1
196+
'lag': 1,
197+
'signal': 'sig',
128198
}],
129199
'message': 'success',
130200
})
@@ -145,7 +215,8 @@ def test_covidcast(self):
145215
'sample_size': 11.5,
146216
'direction': 0,
147217
'issue': 20200416,
148-
'lag': 2
218+
'lag': 2,
219+
'signal': 'sig',
149220
}],
150221
'message': 'success',
151222
})
@@ -189,7 +260,7 @@ def test_covidcast_meta(self):
189260
'last_update': 345,
190261
'max_issue': 20200416,
191262
'min_lag': 1,
192-
'max_lag': 2
263+
'max_lag': 2,
193264
}],
194265
'message': 'success',
195266
})

integrations/server/test_covidcast.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ def test_round_trip(self):
7373
'sample_size': 3.5,
7474
'direction': 4,
7575
'issue': 20200414,
76-
'lag': 0
76+
'lag': 0,
77+
'signal': 'sig',
7778
}],
7879
'message': 'success',
7980
})
@@ -125,6 +126,7 @@ def test_location_wildcard(self):
125126
'direction': 13,
126127
'issue': 20200414,
127128
'lag': 0,
129+
'signal': 'sig',
128130
}, {
129131
'time_value': 20200414,
130132
'geo_value': '22222',
@@ -134,6 +136,7 @@ def test_location_wildcard(self):
134136
'direction': 23,
135137
'issue': 20200414,
136138
'lag': 0,
139+
'signal': 'sig',
137140
}, {
138141
'time_value': 20200414,
139142
'geo_value': '33333',
@@ -142,7 +145,8 @@ def test_location_wildcard(self):
142145
'sample_size': 32,
143146
'direction': 33,
144147
'issue': 20200414,
145-
'lag': 0
148+
'lag': 0,
149+
'signal': 'sig',
146150
},
147151
],
148152
'message': 'success',
@@ -195,6 +199,7 @@ def test_location_timeline(self):
195199
'direction': 13,
196200
'issue': 20200413,
197201
'lag': 2,
202+
'signal': 'sig',
198203
}, {
199204
'time_value': 20200412,
200205
'geo_value': '01234',
@@ -204,6 +209,7 @@ def test_location_timeline(self):
204209
'direction': 23,
205210
'issue': 20200413,
206211
'lag': 1,
212+
'signal': 'sig',
207213
}, {
208214
'time_value': 20200413,
209215
'geo_value': '01234',
@@ -213,6 +219,7 @@ def test_location_timeline(self):
213219
'direction': 33,
214220
'issue': 20200413,
215221
'lag': 0,
222+
'signal': 'sig',
216223
},
217224
],
218225
'message': 'success',
@@ -280,6 +287,7 @@ def test_nullable_columns(self):
280287
'direction': None,
281288
'issue': 20200414,
282289
'lag': 0,
290+
'signal': 'sig',
283291
}],
284292
'message': 'success',
285293
})
@@ -327,7 +335,8 @@ def test_temporal_partitioning(self):
327335
'sample_size': 32,
328336
'direction': 33,
329337
'issue': 202016,
330-
'lag': 0
338+
'lag': 0,
339+
'signal': 'sig',
331340
}],
332341
'message': 'success',
333342
})

0 commit comments

Comments
 (0)