Merge pull request #1649 from quantopian/easier-open-minute-bars-for-append-truncate

Easier open minute bars for append and truncate
This commit is contained in:
Eddie Hebert
2017-01-17 17:56:17 -05:00
committed by GitHub
2 changed files with 35 additions and 4 deletions
+12 -3
View File
@@ -445,11 +445,16 @@ class BcolzMinuteBarTestCase(WithTradingCalendars,
index=[first_minute])
self.writer.write_sid(sid, data)
next_day_minute = first_minute + Timedelta(days=1)
# Open a new writer to cover `open` method, also a common usage
# of appending new days will be writing to an existing directory.
cday = self.trading_calendar.schedule.index.freq
new_end_session = TEST_CALENDAR_START + cday
writer = BcolzMinuteBarWriter.open(self.dest, new_end_session)
next_day_minute = first_minute + cday
new_data = DataFrame(
data=ohlcv,
index=[next_day_minute])
self.writer.write_sid(sid, new_data)
writer.write_sid(sid, new_data)
second_minute = first_minute + Timedelta(minutes=1)
@@ -1014,8 +1019,12 @@ class BcolzMinuteBarTestCase(WithTradingCalendars,
index=minutes)
self.writer.write_sid(sid, data)
# Open a new writer to cover `open` method, also truncating only
# applies to an existing directory.
writer = BcolzMinuteBarWriter.open(self.dest)
# Truncate to first day with data.
self.writer.truncate(days[0])
writer.truncate(days[0])
# Refresh the reader since truncate update the metadata.
self.reader = BcolzMinuteBarReader(self.dest)
+23 -1
View File
@@ -478,6 +478,28 @@ class BcolzMinuteBarWriter(object):
)
metadata.write(self._rootdir)
@classmethod
def open(cls, rootdir, end_session=None):
"""
Open an existing ``rootdir`` for writing.
Parameters
----------
end_session : Timestamp (optional)
When appending, the intended new ``end_session``.
"""
metadata = BcolzMinuteBarMetadata.read(rootdir)
return BcolzMinuteBarWriter(
rootdir,
metadata.calendar,
metadata.start_session,
end_session if end_session is not None else metadata.end_session,
metadata.minutes_per_day,
metadata.default_ohlc_ratio,
metadata.ohlc_ratios_per_sid,
write_metadata=False
)
@property
def first_trading_day(self):
return self._start_session
@@ -834,7 +856,7 @@ class BcolzMinuteBarWriter(object):
truncate_slice_end = self.data_len_for_day(date)
glob_path = os.path.join(self._rootdir, "*", "*", "*.bcolz")
sid_paths = glob(glob_path)
sid_paths = sorted(glob(glob_path))
for sid_path in sid_paths:
file_name = os.path.basename(sid_path)