Skip to content

Commit c11a0c2

Browse files
committed
RDBC-698 TimeSeriesIncludesTest::canLoadAsyncWithInclude_ArrayOfTimeSeriesLastRange
1 parent 10e806d commit c11a0c2

File tree

2 files changed

+136
-1
lines changed

2 files changed

+136
-1
lines changed

ravendb/documents/session/loaders/include.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import datetime
4-
from typing import Set, Tuple, Dict, Union, Optional
4+
from typing import Set, Tuple, Dict, Union, Optional, List
55

66
from ravendb.primitives import constants
77
from ravendb.documents.conventions import DocumentConventions
@@ -191,6 +191,24 @@ def _include_time_series_by_range_type_and_count(
191191
count_range = TimeSeriesCountRange(name, count, type_)
192192
hash_set.add(count_range)
193193

194+
def _include_array_of_time_series_by_range_type_and_count(
195+
self, names: List[str], type_: TimeSeriesRangeType, count: int
196+
) -> None:
197+
if names is None:
198+
raise ValueError("Names cannot be None")
199+
200+
for name in names:
201+
self._include_time_series_by_range_type_and_count("", name, type_, count)
202+
203+
def _include_array_of_time_series_by_range_type_and_time(
204+
self, names: List[str], type_: TimeSeriesRangeType, time: TimeValue
205+
) -> None:
206+
if names is None:
207+
raise ValueError("Names cannot be None")
208+
209+
for name in names:
210+
self._include_time_series_by_range_type_and_time("", name, type_, time)
211+
194212
@staticmethod
195213
def _assert_valid_type_and_count(type_: TimeSeriesRangeType, count: int) -> None:
196214
if type_ == TimeSeriesRangeType.NONE:
@@ -260,6 +278,18 @@ def include_time_series_by_range_type_and_count(
260278
self._include_time_series_by_range_type_and_count("", name, type_, count)
261279
return self
262280

281+
def include_array_of_time_series_by_range_type_and_time(
282+
self, names: List[str], type_: TimeSeriesRangeType, time: TimeValue
283+
) -> IncludeBuilderBase:
284+
self._include_array_of_time_series_by_range_type_and_time(names, type_, time)
285+
return self
286+
287+
def include_array_of_time_series_by_range_type_and_count(
288+
self, names: List[str], type_: TimeSeriesRangeType, count: int
289+
) -> IncludeBuilderBase:
290+
self._include_array_of_time_series_by_range_type_and_count(names, type_, count)
291+
return self
292+
263293
def include_all_time_series(self, type_: TimeSeriesRangeType, time: TimeValue) -> IncludeBuilderBase:
264294
self._include_time_series_by_range_type_and_time("", constants.TimeSeries.ALL, type_, time)
265295
return self

ravendb/tests/jvm_migrated_tests/client_tests/time_series_tests/test_time_series_includes.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,3 +621,108 @@ def test_can_load_async_with_include_time_series_last_range_by_count(self):
621621
self.assertEqual(len(values) - 1 - i, values[i].values[0])
622622
self.assertEqual(tag, values[i].tag)
623623
self.assertEqual(base_line - timedelta(minutes=len(values) - 1 - i), values[i].timestamp)
624+
625+
def test_can_load_async_with_include_array_of_time_series_last_range_by_time(self):
626+
self.can_load_async_with_include_array_of_time_series_last_range(True)
627+
628+
def test_can_load_async_with_include_array_of_time_series_last_range_by_count(self):
629+
self.can_load_async_with_include_array_of_time_series_last_range(False)
630+
631+
def can_load_async_with_include_array_of_time_series_last_range(self, by_time: bool) -> None:
632+
company_id = "companies/1-A"
633+
order_id = "orders/1-A"
634+
base_line = datetime(2023, 8, 20, 21, 30)
635+
ts_name1 = "Heartrate"
636+
ts_name2 = "Speedrate"
637+
tag1 = "watches/fitbit"
638+
tag2 = "watches/apple"
639+
tag3 = "watches/bitfit"
640+
641+
with self.store.open_session() as session:
642+
session.store(Company(name="HR"), company_id)
643+
session.store(Order(company=company_id), order_id)
644+
645+
tsf = session.time_series_for(order_id, ts_name1)
646+
tsf.append_single(base_line, 67, tag2)
647+
tsf.append_single(base_line - timedelta(minutes=5), 64, tag2)
648+
tsf.append_single(base_line - timedelta(minutes=10), 65, tag1)
649+
650+
tsf2 = session.time_series_for(order_id, ts_name2)
651+
tsf2.append_single(base_line - timedelta(minutes=15), 6, tag3)
652+
tsf2.append_single(base_line - timedelta(minutes=10), 7, tag3)
653+
tsf2.append_single(base_line - timedelta(minutes=9), 7, tag3)
654+
tsf2.append_single(base_line - timedelta(minutes=8), 6, tag3)
655+
656+
session.save_changes()
657+
658+
with self.store.open_session() as session:
659+
order = (
660+
session.load(
661+
order_id,
662+
Order,
663+
lambda i: i.include_documents("company").include_array_of_time_series_by_range_type_and_time(
664+
[ts_name1, ts_name2], TimeSeriesRangeType.LAST, TimeValue.of_minutes(10)
665+
),
666+
)
667+
if by_time
668+
else session.load(
669+
order_id,
670+
Order,
671+
lambda i: i.include_documents("company").include_array_of_time_series_by_range_type_and_count(
672+
[ts_name1, ts_name2], TimeSeriesRangeType.LAST, 3
673+
),
674+
)
675+
)
676+
677+
self.assertEqual(1, session.advanced.number_of_requests)
678+
679+
# should not go to server
680+
company = session.load(order.company, Company)
681+
682+
self.assertEqual(1, session.advanced.number_of_requests)
683+
self.assertEqual("HR", company.name)
684+
685+
# should not go to server
686+
heartrate_values = session.time_series_for_entity(order, ts_name1).get(
687+
base_line - timedelta(minutes=10), None
688+
)
689+
self.assertEqual(1, session.advanced.number_of_requests)
690+
self.assertEqual(3, len(heartrate_values))
691+
692+
self.assertEqual(1, len(heartrate_values[0].values))
693+
self.assertEqual(65, heartrate_values[0].values[0])
694+
self.assertEqual(tag1, heartrate_values[0].tag)
695+
self.assertEqual(base_line - timedelta(minutes=10), heartrate_values[0].timestamp)
696+
697+
self.assertEqual(1, len(heartrate_values[1].values))
698+
self.assertEqual(64, heartrate_values[1].values[0])
699+
self.assertEqual(tag2, heartrate_values[1].tag)
700+
self.assertEqual(base_line - timedelta(minutes=5), heartrate_values[1].timestamp)
701+
702+
self.assertEqual(1, len(heartrate_values[2].values))
703+
self.assertEqual(67, heartrate_values[2].values[0])
704+
self.assertEqual(tag2, heartrate_values[2].tag)
705+
self.assertEqual(base_line, heartrate_values[2].timestamp)
706+
707+
# should not go to server
708+
speedrate_values = session.time_series_for_entity(order, ts_name2).get(
709+
base_line - timedelta(minutes=10), None
710+
)
711+
712+
self.assertEqual(1, session.advanced.number_of_requests)
713+
self.assertEqual(3, len(speedrate_values))
714+
715+
self.assertEqual(1, len(speedrate_values[0].values))
716+
self.assertEqual(7, speedrate_values[0].values[0])
717+
self.assertEqual(tag3, speedrate_values[0].tag)
718+
self.assertEqual(base_line - timedelta(minutes=10), speedrate_values[0].timestamp)
719+
720+
self.assertEqual(1, len(speedrate_values[1].values))
721+
self.assertEqual(7, speedrate_values[1].values[0])
722+
self.assertEqual(tag3, speedrate_values[1].tag)
723+
self.assertEqual(base_line - timedelta(minutes=9), speedrate_values[1].timestamp)
724+
725+
self.assertEqual(1, len(speedrate_values[2].values))
726+
self.assertEqual(6, speedrate_values[2].values[0])
727+
self.assertEqual(tag3, speedrate_values[2].tag)
728+
self.assertEqual(base_line - timedelta(minutes=8), speedrate_values[2].timestamp)

0 commit comments

Comments
 (0)