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-06 16:23:12 -05:00
parent f093b2fb59
commit 8481e2df49
7 changed files with 21 additions and 17 deletions
+4 -3
View File
@@ -20,6 +20,9 @@ import math
from copy import copy
from functools import partial
from six import with_metaclass
from zipline.protocol import DATASOURCE_TYPE
import zipline.utils.math_utils as zp_math
@@ -152,9 +155,7 @@ def create_transaction(event, order, price, amount):
return transaction
class SlippageModel(object):
__metaclass__ = abc.ABCMeta
class SlippageModel(with_metaclass(abc.ABCMeta)):
@property
def volume_for_bar(self):
+3 -3
View File
@@ -3,13 +3,13 @@ from abc import (
abstractproperty
)
from six import with_metaclass
from zipline.protocol import DATASOURCE_TYPE
from zipline.protocol import Event
class DataSource(object):
__metaclass__ = ABCMeta
class DataSource(with_metaclass(ABCMeta)):
@property
def event_type(self):
+2 -3
View File
@@ -15,20 +15,19 @@
from collections import defaultdict
from six import string_types
from six import string_types, with_metaclass
from zipline.transforms.utils import EventWindow, TransformMeta
from zipline.errors import WrongDataForTransform
class MovingAverage(object):
class MovingAverage(with_metaclass(TransformMeta)):
"""
Class that maintains a dictionary from sids to
MovingAverageEventWindows. For each sid, we maintain moving
averages over any number of distinct fields (For example, we can
maintain a sid's average volume as well as its average price.)
"""
__metaclass__ = TransformMeta
def __init__(self, fields='price',
market_aware=True, window_length=None, delta=None):
+3 -2
View File
@@ -17,13 +17,14 @@ from zipline.errors import WrongDataForTransform
from zipline.transforms.utils import TransformMeta
from collections import defaultdict, deque
from six import with_metaclass
class Returns(object):
class Returns(with_metaclass(TransformMeta)):
"""
Class that maintains a dictionary from sids to the sid's
closing price N trading days ago.
"""
__metaclass__ = TransformMeta
def __init__(self, window_length):
self.window_length = window_length
+3 -2
View File
@@ -16,19 +16,20 @@
from collections import defaultdict
from math import sqrt
from six import with_metaclass
from zipline.errors import WrongDataForTransform
from zipline.transforms.utils import EventWindow, TransformMeta
import zipline.utils.math_utils as zp_math
class MovingStandardDev(object):
class MovingStandardDev(with_metaclass(TransformMeta)):
"""
Class that maintains a dictionary from sids to
MovingStandardDevWindows. For each sid, we maintain a the
standard deviation of all events falling within the specified
window.
"""
__metaclass__ = TransformMeta
def __init__(self, market_aware=True, window_length=None, delta=None):
+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):
+3 -2
View File
@@ -15,15 +15,16 @@
from collections import defaultdict
from six import with_metaclass
from zipline.errors import WrongDataForTransform
from zipline.transforms.utils import EventWindow, TransformMeta
class MovingVWAP(object):
class MovingVWAP(with_metaclass(TransformMeta)):
"""
Class that maintains a dictionary from sids to VWAPEventWindows.
"""
__metaclass__ = TransformMeta
def __init__(self, market_aware=True, delta=None, window_length=None):