MAINT: Use Python 3 compatible metaclass.

Use six's with_metaclass to have objects that use metaclasses, in
both Python 2 and 3.

Otherwise, in Python 3 the objects were being treated as if they
did not have a metaclass, when the Python 2 syntax is used, leading
to errors because of missing attributes, etc.
This commit is contained in:
Eddie Hebert
2014-01-07 11:58:01 -05:00
parent f093b2fb59
commit 8481e2df49
7 changed files with 21 additions and 17 deletions
+3 -2
View File
@@ -26,6 +26,8 @@ from datetime import datetime
from collections import deque
from abc import ABCMeta, abstractmethod
from six import with_metaclass
from zipline.protocol import DATASOURCE_TYPE
from zipline.gens.utils import assert_sort_unframe_protocol, hash_args
from zipline.finance import trading
@@ -147,7 +149,7 @@ class StatefulTransform(object):
yield out_message
class EventWindow(object):
class EventWindow(with_metaclass(ABCMeta)):
"""
Abstract base class for transform classes that calculate iterative
metrics on events within a given timedelta. Maintains a list of
@@ -166,7 +168,6 @@ class EventWindow(object):
price.
"""
# Mark this as an abstract base class.
__metaclass__ = ABCMeta
def __init__(self, market_aware=True, window_length=None, delta=None):