def test_serializer(self): class SomeValue: pass some_value = SomeValue() class SomeField(models.Field): def get_prep_value(self, value): return 'somevalue' def from_db_value(self, value, expression, connection, context): return some_value class SomeModel(models.Model): dt = models.DateTimeField() t = models.TimeField() d = models.DateField() img1 = models.ImageField() img2 = models.ImageField() img3 = models.ImageField() something = SomeField() def method(self): pass instance = SomeModel(dt=datetime.now(), d=date.today(), something=some_value, t=datetime.now().time()) content_file = ContentFile(b'%PDF') content_file.name = 'foo.pdf' instance.img1 = content_file instance.img2 = 'foo.png' # make sure serializer doesn't fail if a method is attached to # the instance instance.method = method instance.nonfield = 'hello' data = utils.serialize_instance(instance) instance2 = utils.deserialize_instance(SomeModel, data) self.assertEqual(getattr(instance, 'method', None), method) self.assertEqual(getattr(instance2, 'method', None), None) self.assertEqual(instance2.something, some_value) self.assertEqual(instance2.img1.name, 'foo.pdf') self.assertEqual(instance2.img2.name, 'foo.png') self.assertEqual(instance2.img3.name, '') self.assertEqual(instance.nonfield, instance2.nonfield) self.assertEqual(instance.d, instance2.d) self.assertEqual(instance.dt.date(), instance2.dt.date()) for t1, t2 in [(instance.t, instance2.t), (instance.dt.time(), instance2.dt.time())]: self.assertEqual(t1.hour, t2.hour) self.assertEqual(t1.minute, t2.minute) self.assertEqual(t1.second, t2.second) # AssertionError: datetime.time(10, 6, 28, 705776) # != datetime.time(10, 6, 28, 705000) self.assertEqual(int(t1.microsecond / 1000), int(t2.microsecond / 1000))
def deserialize(cls, data): account = deserialize_instance(SocialAccount, data['account']) user = deserialize_instance(get_user_model(), data['user']) if 'token' in data: token = deserialize_instance(SocialToken, data['token']) else: token = None email_addresses = [] for ea in data['email_addresses']: email_address = deserialize_instance(EmailAddress, ea) email_addresses.append(email_address) ret = SocialLogin() ret.token = token ret.account = account ret.user = user ret.email_addresses = email_addresses ret.state = data['state'] return ret
def deserialize(cls, data): account = deserialize_instance(SocialAccount, data["account"]) user = deserialize_instance(get_user_model(), data["user"]) account.user = user if "token" in data: token = deserialize_instance(SocialToken, data["token"]) else: token = None email_addresses = [] for ea in data["email_addresses"]: email_address = deserialize_instance(EmailAddress, ea) email_addresses.append(email_address) ret = SocialLogin() ret.token = token ret.account = account ret.user = user ret.email_addresses = email_addresses ret.state = data["state"] return ret
def test_serializer_binary_field(self): class SomeBinaryModel(models.Model): bb = models.BinaryField() bb_empty = models.BinaryField() instance = SomeBinaryModel(bb=b'some binary data') serialized = utils.serialize_instance(instance) deserialized = utils.deserialize_instance(SomeBinaryModel, serialized) self.assertEqual(serialized['bb'], 'c29tZSBiaW5hcnkgZGF0YQ==') self.assertEqual(serialized['bb_empty'], '') self.assertEqual(deserialized.bb, b'some binary data') self.assertEqual(deserialized.bb_empty, b'')
def deserialize_instance(self, model, data): return deserialize_instance(model, data)