mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-30 02:54:16 +08:00
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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user