Skip to content

Commit d794bcb

Browse files
authored
Fix issue pandas-dev#275
1 parent 5794407 commit d794bcb

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### 1.33
44

5+
* Feature: #275 Tuple range object support in DateChunker
6+
* Bugfix: #273 Duplicate columns breaking serializer
57
* Feature: #267 Tickstore.delete returns deleted data
68
* Dependency: #266 Remove pytest-dbfixtures in favor of pytest-server-fixtures
79

arctic/chunkstore/date_chunker.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ def to_mongo(self, range_obj):
7171
-------
7272
dict
7373
"""
74-
if isinstance(range_obj, pd.DatetimeIndex):
75-
range_obj = DateRange(range_obj.min(), range_obj.max())
74+
if isinstance(range_obj, (pd.DatetimeIndex, tuple)):
75+
range_obj = DateRange(range_obj[0], range_obj[-1])
7676
if range_obj.start and range_obj.end:
7777
return {'$and': [{START: {'$lte': range_obj.end}}, {END: {'$gte': range_obj.start}}]}
7878
elif range_obj.start:
@@ -95,8 +95,8 @@ def filter(self, data, range_obj):
9595
-------
9696
data, filtered by range_obj
9797
"""
98-
if isinstance(range_obj, pd.DatetimeIndex):
99-
range_obj = DateRange(range_obj.min(), range_obj.max())
98+
if isinstance(range_obj, (pd.DatetimeIndex, tuple)):
99+
range_obj = DateRange(range_obj[0], range_obj[-1])
100100
if 'date' in data.index.names:
101101
return data[range_obj.start:range_obj.end]
102102
elif 'date' in data.columns:
@@ -119,8 +119,8 @@ def exclude(self, data, range_obj):
119119
-------
120120
data, filtered by range_obj
121121
"""
122-
if isinstance(range_obj, pd.DatetimeIndex):
123-
range_obj = DateRange(range_obj.min(), range_obj.max())
122+
if isinstance(range_obj, (pd.DatetimeIndex, tuple)):
123+
range_obj = DateRange(range_obj[0], range_obj[-1])
124124
if 'date' in data.index.names:
125125
return data[(data.index.get_level_values('date') < range_obj.start) | (data.index.get_level_values('date') > range_obj.end)]
126126
elif 'date' in data.columns:

tests/unit/chunkstore/test_date_chunker.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,28 @@ def test_exclude_no_index():
111111

112112
assert(c.exclude(df, DateRange(dt(2016, 1, 1), dt(2016, 1, 1))).equals(c.exclude(df, pd.date_range(dt(2016, 1, 1), dt(2016, 1, 1)))))
113113
assert(c.exclude(df2, None).equals(df2))
114+
115+
116+
def test_with_tuples():
117+
c = DateChunker()
118+
df = DataFrame(data={'data': [1, 2, 3],
119+
'date': [dt(2016, 1, 1),
120+
dt(2016, 1, 2),
121+
dt(2016, 1, 3)]
122+
}
123+
)
124+
125+
# OPEN - CLOSED
126+
assert_frame_equal(c.filter(df, (None, dt(2016, 1, 3))), df)
127+
# CLOSED - OPEN
128+
assert_frame_equal(c.filter(df, (dt(2016, 1, 1), None)), df)
129+
# OPEN - OPEN
130+
assert_frame_equal(c.filter(df, (None, None)), df)
131+
# CLOSED - OPEN (far before data range)
132+
assert_frame_equal(c.filter(df, (dt(2000, 1, 1), None)), df)
133+
# CLOSED - OPEN (far after range)
134+
assert(c.filter(df, (dt(2020, 1, 2), None)).empty)
135+
# OPEN - CLOSED
136+
assert_frame_equal(c.filter(df, (None, dt(2020, 1, 1))), df)
137+
# CLOSED - CLOSED (after range)
138+
assert(c.filter(df, (dt(2017, 1, 1), dt(2018, 1, 1))).empty)

0 commit comments

Comments
 (0)