|
3 | 3 | import http |
4 | 4 | import json |
5 | 5 | from typing import Optional, List |
6 | | -from typing import TYPE_CHECKING |
7 | 6 | import requests |
8 | 7 |
|
9 | | -from ravendb import constants |
| 8 | +from ravendb.documents.session.time_series import ( |
| 9 | + TimeSeriesRange, |
| 10 | + TimeSeriesTimeRange, |
| 11 | + TimeSeriesCountRange, |
| 12 | + AbstractTimeSeriesRange, |
| 13 | +) |
| 14 | +from ravendb.primitives import constants |
10 | 15 | from ravendb.documents.commands.results import GetDocumentsResult |
11 | 16 | from ravendb.documents.queries.utils import HashCalculator |
12 | 17 | from ravendb.http.misc import ResponseDisposeHandling |
|
18 | 23 | from ravendb.http.server_node import ServerNode |
19 | 24 | from ravendb.tools.utils import Utils |
20 | 25 |
|
21 | | -if TYPE_CHECKING: |
22 | | - from ravendb.documents.conventions import DocumentConventions |
23 | | - |
24 | 26 |
|
25 | 27 | class PutResult: |
26 | 28 | def __init__(self, key: Optional[str] = None, change_vector: Optional[str] = None): |
@@ -124,7 +126,7 @@ def __init__(self): |
124 | 126 | self._key: Optional[str] = None |
125 | 127 | self._counters: Optional[List[str]] = None |
126 | 128 | self._include_all_counters: Optional[bool] = None |
127 | | - self._time_series_includes: Optional[List] = None # todo: AbstractTimeSeriesRange |
| 129 | + self._time_series_includes: Optional[List[AbstractTimeSeriesRange]] = None |
128 | 130 |
|
129 | 131 | self._compare_exchange_value_includes: Optional[List[str]] = None |
130 | 132 |
|
@@ -257,12 +259,31 @@ def create_request(self, node: ServerNode) -> requests.Request: |
257 | 259 |
|
258 | 260 | # todo: time series |
259 | 261 | if self._time_series_includes is not None: |
260 | | - for time_series in self._time_series_includes: |
261 | | - path_builder.append( |
262 | | - f"×eries={time_series.name}" |
263 | | - f"&from={Utils.datetime_to_string(time_series.from_date)}" |
264 | | - f"&to={Utils.datetime_to_string(time_series.to_date)}" |
265 | | - ) |
| 262 | + for ts_include in self._time_series_includes: |
| 263 | + if isinstance(ts_include, TimeSeriesRange): |
| 264 | + range_: TimeSeriesRange = ts_include |
| 265 | + path_builder.append( |
| 266 | + f"×eries={range_.name}" |
| 267 | + f"&from={Utils.datetime_to_string(range_.from_date) if range_.from_date else ''}" |
| 268 | + f"&to={Utils.datetime_to_string(range_.to_date) if range_.to_date else ''}" |
| 269 | + ) |
| 270 | + elif isinstance(ts_include, TimeSeriesTimeRange): |
| 271 | + time_range: TimeSeriesTimeRange = ts_include |
| 272 | + path_builder.append( |
| 273 | + f"×eriestime={time_range.name}" |
| 274 | + f"&timeType={time_range.type.value}" |
| 275 | + f"&timeValue={time_range.time.value}" |
| 276 | + f"&timeUnit={time_range.time.unit.value}" |
| 277 | + ) |
| 278 | + elif isinstance(ts_include, TimeSeriesCountRange): |
| 279 | + count_range: TimeSeriesCountRange = ts_include |
| 280 | + path_builder.append( |
| 281 | + f"×eriescount={count_range.name}" |
| 282 | + f"&countType={count_range.type}" |
| 283 | + f"&countValue={count_range.count}" |
| 284 | + ) |
| 285 | + else: |
| 286 | + raise TypeError(f"Unexpected TimeSeries range {ts_include.__class__.__name__}") |
266 | 287 |
|
267 | 288 | if self._compare_exchange_value_includes is not None: |
268 | 289 | for compare_exchange_value in self._compare_exchange_value_includes: |
|
0 commit comments