mirror of
https://github.com/wassname/catalyst.git
synced 2026-09-09 11:19:23 +08:00
BUG: Make all iteration related methods fo BarData match __iter__
`for s in data` and methods like `for s in data.keys` were not producing the same list of active sids Make the other iteration methods match __iter__ by using the contains method to check whether or not the sid is active. For use of data outside of the algoscript context, which needs access to all data fields use data._data
This commit is contained in:
+19
-10
@@ -164,23 +164,32 @@ class BarData(object):
|
|||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for sid, data in self._data.iteritems():
|
for sid, data in self._data.iteritems():
|
||||||
if len(data):
|
# Allow contains override to filter out sids.
|
||||||
yield sid
|
if sid in self:
|
||||||
|
if len(data):
|
||||||
def keys(self):
|
yield sid
|
||||||
return self._data.keys()
|
|
||||||
|
|
||||||
def iterkeys(self):
|
def iterkeys(self):
|
||||||
return self._data.iterkeys()
|
# Allow contains override to filter out sids.
|
||||||
|
return [sid for sid in self._data.iterkeys() if sid in self]
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
# Allow contains override to filter out sids.
|
||||||
|
return list(self.iterkeys())
|
||||||
|
|
||||||
def itervalues(self):
|
def itervalues(self):
|
||||||
return self._data.itervalues()
|
return (value for sid, value in self.iteritems())
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
return list(self.itervalues())
|
||||||
|
|
||||||
def iteritems(self):
|
def iteritems(self):
|
||||||
return self._data.iteritems()
|
return ((sid, value) for sid, value
|
||||||
|
in self._data.iteritems()
|
||||||
|
if sid in self)
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
return self._data.items()
|
return list(self.iteritems())
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self._data.keys())
|
return len(self.keys())
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ class BatchTransform(object):
|
|||||||
Point of entry. Process an event frame.
|
Point of entry. Process an event frame.
|
||||||
"""
|
"""
|
||||||
# extract dates
|
# extract dates
|
||||||
dts = [event.datetime for event in data.itervalues()]
|
dts = [event.datetime for event in data._data.itervalues()]
|
||||||
# we have to provide the event with a dt. This is only for
|
# we have to provide the event with a dt. This is only for
|
||||||
# checking if the event is outside the window or not so a
|
# checking if the event is outside the window or not so a
|
||||||
# couple of seconds shouldn't matter. We don't add it to
|
# couple of seconds shouldn't matter. We don't add it to
|
||||||
@@ -238,7 +238,7 @@ class BatchTransform(object):
|
|||||||
# sid keys.
|
# sid keys.
|
||||||
event = Event()
|
event = Event()
|
||||||
event.dt = max(dts)
|
event.dt = max(dts)
|
||||||
event.data = {k: v.__dict__ for k, v in data.iteritems()
|
event.data = {k: v.__dict__ for k, v in data._data.iteritems()
|
||||||
# Need to check if data has a 'length' to filter
|
# Need to check if data has a 'length' to filter
|
||||||
# out sids without trade data available.
|
# out sids without trade data available.
|
||||||
# TODO: expose more of 'no trade available'
|
# TODO: expose more of 'no trade available'
|
||||||
|
|||||||
Reference in New Issue
Block a user