mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-04 16:29:42 +08:00
BUG: Implement sessions property for PanelDailyBarReader
Also, renamed it from `_sessions_ to `sessions` and defined an abstractproperty in `DailyBarReader`.
This commit is contained in:
@@ -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])
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user