Added tests for to_python, to_database method of UserDefinedType
This commit is contained in:
		| @@ -1002,6 +1002,9 @@ class UserDefinedType(Column): | |||||||
|         return val |         return val | ||||||
|  |  | ||||||
|     def to_python(self, value): |     def to_python(self, value): | ||||||
|  |         if value is None: | ||||||
|  |             return | ||||||
|  |  | ||||||
|         copied_value = deepcopy(value) |         copied_value = deepcopy(value) | ||||||
|         for name, field in self.user_type._fields.items(): |         for name, field in self.user_type._fields.items(): | ||||||
|             if copied_value[name] is not None or isinstance(field, BaseContainerColumn): |             if copied_value[name] is not None or isinstance(field, BaseContainerColumn): | ||||||
| @@ -1010,6 +1013,9 @@ class UserDefinedType(Column): | |||||||
|         return copied_value |         return copied_value | ||||||
|  |  | ||||||
|     def to_database(self, value): |     def to_database(self, value): | ||||||
|  |         if value is None: | ||||||
|  |             return | ||||||
|  |  | ||||||
|         copied_value = deepcopy(value) |         copied_value = deepcopy(value) | ||||||
|         for name, field in self.user_type._fields.items(): |         for name, field in self.user_type._fields.items(): | ||||||
|             if copied_value[name] is not None or isinstance(field, BaseContainerColumn): |             if copied_value[name] is not None or isinstance(field, BaseContainerColumn): | ||||||
|   | |||||||
| @@ -151,6 +151,7 @@ class UDT(UserType): | |||||||
|     age = columns.Integer() |     age = columns.Integer() | ||||||
|     mf = columns.Map(columns.Integer, columns.Integer) |     mf = columns.Map(columns.Integer, columns.Integer) | ||||||
|     dummy_udt = columns.Integer(default=42) |     dummy_udt = columns.Integer(default=42) | ||||||
|  |     time_col = columns.Time() | ||||||
|  |  | ||||||
|  |  | ||||||
| class ModelWithDefault(Model): | class ModelWithDefault(Model): | ||||||
| @@ -343,3 +344,29 @@ class ModelWithDefaultTests(BaseCassEngTestCase): | |||||||
|         item.update(udt_default=udt_default) |         item.update(udt_default=udt_default) | ||||||
|         self.assertEqual(ModelWithDefaultCollection.objects.get(id=2)._as_dict(), |         self.assertEqual(ModelWithDefaultCollection.objects.get(id=2)._as_dict(), | ||||||
|                          {'id': 2, 'dummy': 2, 'mf': {1: 1, 4: 4}, "udt": udt, "udt_default": udt_default}) |                          {'id': 2, 'dummy': 2, 'mf': {1: 1, 4: 4}, "udt": udt, "udt_default": udt_default}) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def test_udt_to_python(self): | ||||||
|  |         """ | ||||||
|  |         Test the to_python and to_database are correctly called on UDTs | ||||||
|  |         @since 3.10 | ||||||
|  |         @jira_ticket PYTHON-743 | ||||||
|  |         @expected_result the int value is correctly converted to utils.Time | ||||||
|  |         and written to C* | ||||||
|  |  | ||||||
|  |         @test_category object_mapper | ||||||
|  |         """ | ||||||
|  |         item = ModelWithDefault(id=1) | ||||||
|  |         item.save() | ||||||
|  |  | ||||||
|  |         # We update time_col this way because we want to hit | ||||||
|  |         # the to_python method from UserDefinedType, otherwise to_python | ||||||
|  |         # would be called in UDT.__init__ | ||||||
|  |         user_to_update = UDT() | ||||||
|  |         user_to_update.time_col = 10 | ||||||
|  |  | ||||||
|  |         item.update(udt=user_to_update) | ||||||
|  |  | ||||||
|  |         udt, udt_default = UDT(time_col=10), UDT(age=1, mf={2:2}) | ||||||
|  |         self.assertEqual(ModelWithDefault.objects.get(id=1)._as_dict(), | ||||||
|  |                          {'id': 1, 'dummy': 42, 'mf': {}, "udt": udt, "udt_default": udt_default}) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 bjmb
					bjmb