mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-29 01:57:31 +08:00
ndicts are now deepcopyable.
This commit is contained in:
+28
-4
@@ -1,6 +1,8 @@
|
||||
from datetime import datetime
|
||||
import pytz
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
from zipline.utils.protocol_utils import ndict
|
||||
|
||||
def test_ndict():
|
||||
@@ -54,10 +56,32 @@ def test_ndict():
|
||||
del nd['x']
|
||||
assert not nd.has_key('x')
|
||||
assert nd.get('x') is None
|
||||
|
||||
|
||||
|
||||
|
||||
for n in xrange(1000):
|
||||
dt = datetime.utcnow().replace(tzinfo=pytz.utc)
|
||||
nd2 = ndict({"dt":dt, "otherdata":"ishere"*1000, "maybeanint":3})
|
||||
|
||||
nd2.dt2 = dt
|
||||
|
||||
nd2.dt2 = dt
|
||||
|
||||
def test_ndict_deepcopy():
|
||||
def assert_correctly_copied(orig, copy):
|
||||
assert nd == nd_dc, "Deepcopied ndict should have same keys and values."
|
||||
|
||||
nd_dc.z = 3
|
||||
assert 'z' not in nd, "'z' also added to original ndict."
|
||||
|
||||
nd_dc.y = 10
|
||||
assert nd_dc.y == 10, "value of copied ndict not correctly set."
|
||||
assert nd.y != 10, "value also set of original ndict."
|
||||
|
||||
nd = ndict({'x': 1, 'y': 2})
|
||||
nd_dc = deepcopy(nd)
|
||||
assert_correctly_copied(nd, nd_dc)
|
||||
|
||||
nd = ndict({'x':[1,2,3], 'y': {1: 1}})
|
||||
nd_dc = deepcopy(nd)
|
||||
assert_correctly_copied(nd, nd_dc)
|
||||
nd_dc.x.append(4)
|
||||
assert nd_dc.x[-1] == 4, "not correctly appended to copied."
|
||||
assert nd.x[-1] != 4, "also copied to original."
|
||||
@@ -55,6 +55,9 @@ class ndict(MutableMapping):
|
||||
# Abstact Overloads
|
||||
# -----------------
|
||||
|
||||
def __deepcopy__(self, memo):
|
||||
return ndict(copy.deepcopy(self.__internal))
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key == 'cls' or key == '__internal' or '_ndict' in key:
|
||||
super(ndict, self).__setattr__(key, value)
|
||||
|
||||
Reference in New Issue
Block a user