mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-12 02:41:42 +08:00
ENH: Added Dale's verbose serialization error tracking.
Thanks, Dale.
This commit is contained in:
@@ -41,6 +41,8 @@ from zipline.finance.trading import SimulationParameters
|
||||
|
||||
from zipline.utils import factory
|
||||
|
||||
from six import iteritems
|
||||
|
||||
sim_params_daily = SimulationParameters(
|
||||
datetime.datetime(2013, 6, 19, tzinfo=pytz.UTC),
|
||||
datetime.datetime(2013, 6, 19, tzinfo=pytz.UTC),
|
||||
@@ -55,9 +57,33 @@ returns = factory.create_returns_from_list(
|
||||
[1.0], sim_params_daily)
|
||||
|
||||
|
||||
def gather_bad_dicts(state):
|
||||
bad = []
|
||||
for k, v in iteritems(state):
|
||||
if not isinstance(v, dict):
|
||||
continue
|
||||
if type(v) != dict:
|
||||
bad.append((k, v))
|
||||
bad.extend(gather_bad_dicts(v))
|
||||
return bad
|
||||
|
||||
|
||||
def stringify_cases(cases, func=None):
|
||||
# get better test case names
|
||||
results = []
|
||||
if func is None:
|
||||
func = lambda case: case[0].__name__
|
||||
for case in cases:
|
||||
new_case = list(case)
|
||||
key = func(case)
|
||||
new_case.insert(0, key)
|
||||
results.append(new_case)
|
||||
return results
|
||||
|
||||
|
||||
class SerializationTestCase(TestCase):
|
||||
|
||||
@parameterized.expand([
|
||||
object_serialization_cases = stringify_cases([
|
||||
(Blotter, (), 'repr'),
|
||||
(Order, (datetime.datetime(2013, 6, 19), 8554, 100), 'dict'),
|
||||
(PerShare, (), 'dict'),
|
||||
@@ -81,13 +107,24 @@ class SerializationTestCase(TestCase):
|
||||
(Portfolio, (), 'dict'),
|
||||
(ProtocolPosition, (8554,), 'dict')
|
||||
])
|
||||
|
||||
@parameterized.expand(object_serialization_cases)
|
||||
def test_object_serialization(self,
|
||||
_,
|
||||
cls,
|
||||
initargs,
|
||||
comparison_method='dict'):
|
||||
|
||||
obj = cls(*initargs)
|
||||
state = obj.__getstate__()
|
||||
|
||||
bad_dicts = gather_bad_dicts(state)
|
||||
bad_template = "type({0}) == {1}".format
|
||||
bad_msgs = [bad_template(k, type(v)) for k, v in bad_dicts]
|
||||
msg = "Only support bare dicts. " + ', '.join(bad_msgs)
|
||||
self.assertEqual(len(bad_dicts), 0, msg)
|
||||
# no state should have a dict subclass. Only regular PyDict
|
||||
|
||||
if hasattr(obj, '__getinitargs__'):
|
||||
initargs = obj.__getinitargs__()
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user