Skip to content

Commit bb85ce4

Browse files
committed
Add unit tests around the ranges that filter will encounter
1 parent 2b619e1 commit bb85ce4

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

arctic/chunkstore/chunkstore.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def delete(self, symbol, chunk_range=None):
8585
if chunk_range:
8686
# read out chunks that fall within the range and filter out
8787
# data within the range
88-
df = self.read(symbol, chunk_range=chunk_range, no_filter=True)
88+
df = self.read(symbol, chunk_range=chunk_range, filter_data=False)
8989
df = self.chunker.exclude(df, chunk_range)
9090

9191
# remove chunks, and update any remaining data
@@ -112,7 +112,7 @@ def list_symbols(self):
112112
def _get_symbol_info(self, symbol):
113113
return self._symbols.find_one({'symbol': symbol})
114114

115-
def read(self, symbol, chunk_range=None, no_filter=False):
115+
def read(self, symbol, chunk_range=None, filter_data=True):
116116
"""
117117
Reads data for a given symbol from the database.
118118
@@ -123,7 +123,7 @@ def read(self, symbol, chunk_range=None, no_filter=False):
123123
chunk_range: object
124124
corresponding range object for the specified chunker (for
125125
DateChunker it is a DateRange object)
126-
no_filter: boolean
126+
filter: boolean
127127
perform chunk level filtering on the data (see filter() in _chunker)
128128
only applicable when chunk_range is specified
129129
@@ -153,7 +153,7 @@ def read(self, symbol, chunk_range=None, no_filter=False):
153153

154154
data = deserialize(records, sym['type'])
155155

156-
if no_filter or chunk_range is None:
156+
if not filter_data or chunk_range is None:
157157
return data
158158
return self.chunker.filter(data, chunk_range)
159159

tests/unit/chunkstore/__init__.py

Whitespace-only changes.
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from arctic.chunkstore.date_chunker import DateChunker
2+
from pandas import DataFrame, MultiIndex
3+
from datetime import datetime as dt
4+
from arctic.date import DateRange
5+
from pandas.util.testing import assert_frame_equal
6+
7+
8+
def test_date_filter():
9+
c = DateChunker()
10+
df = DataFrame(data={'data': [1, 2, 3]},
11+
index=MultiIndex.from_tuples([(dt(2016, 1, 1), 1),
12+
(dt(2016, 1, 2), 1),
13+
(dt(2016, 1, 3), 1)],
14+
names=['date', 'id'])
15+
)
16+
17+
# OPEN - CLOSED
18+
assert_frame_equal(c.filter(df, DateRange(None, dt(2016, 1, 3))), df)
19+
# CLOSED - OPEN
20+
assert_frame_equal(c.filter(df, DateRange(dt(2016, 1, 1), None)), df)
21+
# OPEN - OPEN
22+
assert_frame_equal(c.filter(df, DateRange(None, None)), df)
23+
# CLOSED - OPEN (far before data range)
24+
assert_frame_equal(c.filter(df, DateRange(dt(2000, 1, 1), None)), df)
25+
# CLOSED - OPEN (far after range)
26+
assert(c.filter(df, DateRange(dt(2020, 1, 2), None)).empty)
27+
# OPEN - CLOSED
28+
assert_frame_equal(c.filter(df, DateRange(None, dt(2020, 1, 1))), df)
29+
# CLOSED - CLOSED (after range)
30+
assert(c.filter(df, DateRange(dt(2017, 1, 1), dt(2018, 1, 1))).empty)

0 commit comments

Comments
 (0)