@@ -401,6 +401,93 @@ def test_read_chunk_boundaries(tickstore_lib):
401
401
assert len (tickstore_lib .read (['SYM1' , 'SYM2' ], columns = None , date_range = DateRange (dt (2013 , 6 , 1 , 12 , 45 , tzinfo = mktz ('UTC' )), dt (2013 , 6 , 1 , 15 , 00 , tzinfo = mktz ('UTC' ))))) == 4
402
402
403
403
404
+ def test_read_spanning_chunks (tickstore_lib ):
405
+ SYM1_DATA = [
406
+ {'a' : 1. ,
407
+ 'b' : 2. ,
408
+ 'index' : dt (2013 , 6 , 1 , 11 , 00 , tzinfo = mktz ('UTC' ))
409
+ },
410
+ {'a' : 3. ,
411
+ 'b' : 4. ,
412
+ 'index' : dt (2013 , 6 , 1 , 12 , 00 , tzinfo = mktz ('UTC' ))
413
+ },
414
+ # Chunk boundary here
415
+ {'a' : 5. ,
416
+ 'b' : 6. ,
417
+ 'index' : dt (2013 , 6 , 1 , 14 , 00 , tzinfo = mktz ('UTC' ))
418
+ }
419
+ ]
420
+ SYM2_DATA = [
421
+ {'a' : 7. ,
422
+ 'b' : 8. ,
423
+ 'index' : dt (2013 , 6 , 1 , 12 , 30 , tzinfo = mktz ('UTC' ))
424
+ },
425
+ {'a' : 9. ,
426
+ 'b' : 10. ,
427
+ 'index' : dt (2013 , 6 , 1 , 13 , 30 , tzinfo = mktz ('UTC' ))
428
+ },
429
+ # Chunk boundary here
430
+ {'a' : 11. ,
431
+ 'b' : 12. ,
432
+ 'index' : dt (2013 , 6 , 1 , 14 , 30 , tzinfo = mktz ('UTC' ))
433
+ }
434
+ ]
435
+ tickstore_lib ._chunk_size = 2
436
+ tickstore_lib .write ('SYM1' , SYM1_DATA )
437
+ tickstore_lib .write ('SYM2' , SYM2_DATA )
438
+
439
+ # Even though the latest chunk that's the closest to the start point for SYM1 starts at 11:00, it ends before the start point,
440
+ # so we want to ignore it and start from SYM2 (12:30) instead.
441
+ assert tickstore_lib ._mongo_date_range_query (
442
+ ['SYM1' , 'SYM2' ],
443
+ date_range = DateRange (dt (2013 , 6 , 1 , 12 , 45 , tzinfo = mktz ('UTC' )),
444
+ dt (2013 , 6 , 1 , 15 , 00 , tzinfo = mktz ('UTC' )))) == \
445
+ {'s' : {'$gte' : dt (2013 , 6 , 1 , 12 , 30 , tzinfo = mktz ('UTC' )), '$lte' : dt (2013 , 6 , 1 , 15 , 0 , tzinfo = mktz ('UTC' ))}}
446
+
447
+
448
+ def test_read_inside_range (tickstore_lib ):
449
+ SYM1_DATA = [
450
+ {'a' : 1. ,
451
+ 'b' : 2. ,
452
+ 'index' : dt (2013 , 6 , 1 , 0 , 00 , tzinfo = mktz ('UTC' ))
453
+ },
454
+ {'a' : 3. ,
455
+ 'b' : 4. ,
456
+ 'index' : dt (2013 , 6 , 1 , 1 , 00 , tzinfo = mktz ('UTC' ))
457
+ },
458
+ # Chunk boundary here
459
+ {'a' : 5. ,
460
+ 'b' : 6. ,
461
+ 'index' : dt (2013 , 6 , 1 , 14 , 00 , tzinfo = mktz ('UTC' ))
462
+ }
463
+ ]
464
+ SYM2_DATA = [
465
+ {'a' : 7. ,
466
+ 'b' : 8. ,
467
+ 'index' : dt (2013 , 6 , 1 , 12 , 30 , tzinfo = mktz ('UTC' ))
468
+ },
469
+ {'a' : 9. ,
470
+ 'b' : 10. ,
471
+ 'index' : dt (2013 , 6 , 1 , 13 , 30 , tzinfo = mktz ('UTC' ))
472
+ },
473
+ # Chunk boundary here
474
+ {'a' : 11. ,
475
+ 'b' : 12. ,
476
+ 'index' : dt (2013 , 6 , 1 , 14 , 30 , tzinfo = mktz ('UTC' ))
477
+ }
478
+ ]
479
+ tickstore_lib ._chunk_size = 2
480
+ tickstore_lib .write ('SYM1' , SYM1_DATA )
481
+ tickstore_lib .write ('SYM2' , SYM2_DATA )
482
+
483
+ # If there are no chunks spanning the range, we still cap the start range so that we don't
484
+ # fetch SYM1's 0am--1am chunk
485
+ assert tickstore_lib ._mongo_date_range_query (
486
+ ['SYM1' , 'SYM2' ],
487
+ date_range = DateRange (dt (2013 , 6 , 1 , 10 , 0 , tzinfo = mktz ('UTC' )),
488
+ dt (2013 , 6 , 1 , 15 , 0 , tzinfo = mktz ('UTC' )))) == \
489
+ {'s' : {'$gte' : dt (2013 , 6 , 1 , 10 , 0 , tzinfo = mktz ('UTC' )), '$lte' : dt (2013 , 6 , 1 , 15 , 0 , tzinfo = mktz ('UTC' ))}}
490
+
404
491
def test_read_longs (tickstore_lib ):
405
492
DUMMY_DATA = [
406
493
{'a' : 1 ,
0 commit comments