BUG: Implement sessions property for PanelDailyBarReader

Also, renamed it from `_sessions_ to `sessions` and defined an
abstractproperty in `DailyBarReader`.
This commit is contained in:
Jean Bredeche
2016-07-24 21:08:11 -04:00
parent 5fd6550718
commit 7418e893a9
3 changed files with 26 additions and 11 deletions
+7
View File
@@ -91,3 +91,10 @@ class TestPanelDailyBarReader(WithAssetFinder,
)
)
self.assertEqual(str(e.exception), expected)
def test_sessions(self):
sessions = self.reader.sessions
self.assertEqual(21, len(sessions))
self.assertEqual(self.START_DATE, sessions[0])
self.assertEqual(self.END_DATE, sessions[-1])
+1 -1
View File
@@ -387,7 +387,7 @@ class USEquityDailyHistoryLoader(USEquityHistoryLoader):
@property
def _calendar(self):
return self._reader._sessions
return self._reader.sessions
def _array(self, dts, assets, field):
return self._reader.load_raw_arrays(
+18 -10
View File
@@ -398,6 +398,10 @@ class DailyBarReader(with_metaclass(ABCMeta)):
def spot_price(self, sid, day, colname):
pass
@abstractproperty
def sessions(self):
pass
@abstractproperty
def last_available_dt(self):
pass
@@ -500,7 +504,7 @@ class BcolzDailyBarReader(DailyBarReader):
return ctable(rootdir=maybe_table_rootdir, mode='r')
@lazyval
def _sessions(self):
def sessions(self):
if 'calendar' in self._table.attrs.attrs:
# backwards compatibility with old formats, will remove
return DatetimeIndex(self._table.attrs['calendar'], tz='UTC')
@@ -563,7 +567,7 @@ class BcolzDailyBarReader(DailyBarReader):
@property
def last_available_dt(self):
return self._sessions[-1]
return self.sessions[-1]
def _compute_slices(self, start_idx, end_idx, assets):
"""
@@ -609,8 +613,8 @@ class BcolzDailyBarReader(DailyBarReader):
def load_raw_arrays(self, columns, start_date, end_date, assets):
# Assumes that the given dates are actually in calendar.
start_idx = self._sessions.get_loc(start_date)
end_idx = self._sessions.get_loc(end_date)
start_idx = self.sessions.get_loc(start_date)
end_idx = self.sessions.get_loc(end_date)
first_rows, last_rows, offsets = self._compute_slices(
start_idx,
end_idx,
@@ -654,8 +658,8 @@ class BcolzDailyBarReader(DailyBarReader):
if day >= asset.end_date:
# go back to one day before the asset ended
search_day = self._sessions[
self._sessions.searchsorted(asset.end_date) - 1
search_day = self.sessions[
self.sessions.searchsorted(asset.end_date) - 1
]
else:
search_day = day
@@ -667,9 +671,9 @@ class BcolzDailyBarReader(DailyBarReader):
return None
if volumes[ix] != 0:
return search_day
prev_day_ix = self._sessions.get_loc(search_day) - 1
prev_day_ix = self.sessions.get_loc(search_day) - 1
if prev_day_ix > -1:
search_day = self._sessions[prev_day_ix]
search_day = self.sessions[prev_day_ix]
else:
return None
@@ -690,10 +694,10 @@ class BcolzDailyBarReader(DailyBarReader):
or after the date range of the equity.
"""
try:
day_loc = self._sessions.get_loc(day)
day_loc = self.sessions.get_loc(day)
except:
raise NoDataOnDate("day={0} is outside of calendar={1}".format(
day, self._sessions))
day, self.sessions))
offset = day_loc - self._calendar_offsets[sid]
if offset < 0:
raise NoDataOnDate(
@@ -772,6 +776,10 @@ class PanelDailyBarReader(DailyBarReader):
self.panel = panel
@property
def sessions(self):
return self._calendar
@property
def last_available_dt(self):
return self._calendar[-1]