jazzband / jsonmodels

jsonmodels is library to make it easier for you to deal with structures that are converted to, or read from JSON.
http://jsonmodels.readthedocs.org/en/latest/
BSD 3-Clause "New" or "Revised" License
334 stars 51 forks source link

no deepcopy #127

Open user706 opened 5 years ago

user706 commented 5 years ago

"Bug": copy.deepcopy is not possible.

from jsonmodels import models, fields, validators
import copy

class A(models.Base):
    x = fields.IntField(required=True)

a1 = A(x = 1)
a2 = copy.deepcopy(a1)
print(a1.x)
print(a2.x)                # fails in this line
user706 commented 5 years ago

Here's a hack, that adds a function __deepcopy__ to class models.Base:

from jsonmodels import models, fields, validators
import copy

def deepcopy( self, memo ):
    return self.__class__(**self.to_struct())

models.Base.__deepcopy__ = deepcopy

class A(models.Base):
    x = fields.IntField(required=True)

a1 = A(x = 1)
a2 = copy.deepcopy(a1)
print(a1.x)
print(a2.x)
assert a1 == a2