Skip to content

Commit 04ed491

Browse files
authored
Merge pull request #1065 from cmu-delphi/leonlu2/time_values_and_issues
Leonlu2/time values and issues
2 parents 517df70 + c53c15a commit 04ed491

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

integrations/server/test_covidcast.py

+52
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,18 @@ def _insert_placeholder_set_four(self):
7373
for i in [4, 5, 6]
7474
]
7575
self._insert_rows(rows)
76+
return rows
77+
78+
def _insert_placeholder_set_five(self):
79+
rows = [
80+
self._make_placeholder_row(time_value=2000_01_01, value=i*1., stderr=i*10., sample_size=i*100., issue=2000_01_03+i)[0]
81+
for i in [1, 2, 3]
82+
] + [
83+
# different time_values, same issues
84+
self._make_placeholder_row(time_value=2000_01_01+i-3, value=i*1., stderr=i*10., sample_size=i*100., issue=2000_01_03+i-3)[0]
85+
for i in [4, 5, 6]
86+
]
87+
self._insert_rows(rows)
7688
return rows
7789

7890
def test_round_trip(self):
@@ -237,6 +249,46 @@ def test_location_wildcard(self):
237249
'message': 'success',
238250
})
239251

252+
def test_time_values_wildcard(self):
253+
"""Select all time_values with a wildcard query."""
254+
255+
# insert placeholder data
256+
rows = self._insert_placeholder_set_three()
257+
expected_time_values = [
258+
self.expected_from_row(r) for r in rows[:3]
259+
]
260+
261+
# make the request
262+
response, _ = self.request_based_on_row(rows[0], time_values="*")
263+
264+
self.maxDiff = None
265+
# assert that the right data came back
266+
self.assertEqual(response, {
267+
'result': 1,
268+
'epidata': expected_time_values,
269+
'message': 'success',
270+
})
271+
272+
def test_issues_wildcard(self):
273+
"""Select all issues with a wildcard query."""
274+
275+
# insert placeholder data
276+
rows = self._insert_placeholder_set_five()
277+
expected_issues = [
278+
self.expected_from_row(r) for r in rows[:3]
279+
]
280+
281+
# make the request
282+
response, _ = self.request_based_on_row(rows[0], issues="*")
283+
284+
self.maxDiff = None
285+
# assert that the right data came back
286+
self.assertEqual(response, {
287+
'result': 1,
288+
'epidata': expected_issues,
289+
'message': 'success',
290+
})
291+
240292
def test_signal_wildcard(self):
241293
"""Select all signals with a wildcard query."""
242294

src/server/_params.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,10 @@ def _parse_range(part: str):
381381
def parse_date(s: str) -> int:
382382
# parses a given string in format YYYYMMDD or YYYY-MM-DD to a number in the form YYYYMMDD
383383
try:
384-
return int(s.replace("-", ""))
384+
if s == "*":
385+
return s
386+
else:
387+
return int(s.replace("-", ""))
385388
except ValueError:
386389
raise ValidationFailedException(f"not a valid date: {s}")
387390

@@ -477,6 +480,8 @@ def parse_time_set() -> TimeSet:
477480
# old version
478481
require_all("time_type", "time_values")
479482
time_values = extract_dates("time_values")
483+
if time_values == ["*"]:
484+
return TimeSet(time_type, True)
480485
return TimeSet(time_type, time_values)
481486

482487
if ":" not in request.values.get("time", ""):

src/server/_query.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -474,8 +474,11 @@ def apply_lag_filter(self, history_table: str, lag: Optional[int]) -> "QueryBuil
474474

475475
def apply_issues_filter(self, history_table: str, issues: Optional[TimeValues]) -> "QueryBuilder":
476476
if issues:
477-
self.retable(history_table)
478-
self.where_integers("issue", issues)
477+
if issues == ["*"]:
478+
self.retable(history_table)
479+
else:
480+
self.retable(history_table)
481+
self.where_integers("issue", issues)
479482
return self
480483

481484
def apply_as_of_filter(self, history_table: str, as_of: Optional[int]) -> "QueryBuilder":

0 commit comments

Comments
 (0)