Skip to content

Commit 2a0d51a

Browse files
committed
final tweaks
1 parent 59ebede commit 2a0d51a

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/server/_params.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
from ._exceptions import ValidationFailedException
10-
from .utils import days_in_range, weeks_in_range, guess_time_value_is_day, guess_time_value_is_week, TimeValues, time_values_to_ranges
10+
from .utils import days_in_range, weeks_in_range, guess_time_value_is_day, guess_time_value_is_week, TimeValues, days_to_ranges, weeks_to_ranges
1111

1212

1313
def _parse_common_multi_arg(key: str) -> List[Tuple[str, Union[bool, Sequence[str]]]]:
@@ -129,6 +129,16 @@ def count(self) -> float:
129129
return sum(1 if isinstance(v, int) else weeks_in_range(v) for v in self.time_values)
130130
return sum(1 if isinstance(v, int) else days_in_range(v) for v in self.time_values)
131131

132+
def to_ranges(self):
133+
"""
134+
returns this pair with times converted to ranges
135+
"""
136+
if isinstance(self.time_values, bool):
137+
return TimePair(self.time_type, self.time_values)
138+
if self.time_type == 'week':
139+
return TimePair(self.time_type, weeks_to_ranges(self.time_values))
140+
return TimePair(self.time_type, days_to_ranges(self.time_values))
141+
132142

133143
def _verify_range(start: int, end: int) -> Union[int, Tuple[int, int]]:
134144
if start == end:
@@ -226,7 +236,7 @@ def parse_time_arg(key: str = "time") -> Optional[TimePair]:
226236
return time_pair
227237
else:
228238
merged.extend(time_pair.time_values)
229-
return TimePair(time_pairs[0].time_type, time_values_to_ranges(merged))
239+
return TimePair(time_pairs[0].time_type, merged).to_ranges()
230240

231241

232242
def parse_single_time_arg(key: str) -> TimePair:

src/server/_query.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from ._exceptions import DatabaseErrorException
2323
from ._validate import extract_strings
2424
from ._params import GeoPair, SourceSignalPair, TimePair
25-
from .utils import time_values_to_ranges, days_to_ranges, weeks_to_ranges, TimeValues
25+
from .utils import time_values_to_ranges, TimeValues
2626

2727

2828
def date_string(value: int) -> str:
@@ -181,6 +181,7 @@ def filter_time_pair(
181181
"""
182182
returns the SQL sub query to filter by the given time pair
183183
"""
184+
# safety path; should normally not be reached as time pairs are enforced by the API
184185
if not pair:
185186
return "FALSE"
186187

@@ -189,7 +190,7 @@ def filter_time_pair(
189190
if isinstance(pair.time_values, bool) and pair.time_values:
190191
parts = f"{type_field} = :{type_param}"
191192
else:
192-
ranges = weeks_to_ranges(pair.time_values) if pair.is_week else days_to_ranges(pair.time_values)
193+
ranges = pair.to_ranges().time_values
193194
parts = f"({type_field} = :{type_param} AND {filter_integers(time_field, ranges, type_param, params)})"
194195

195196
return f"({parts})"

0 commit comments

Comments
 (0)