def test_build_with_multiple_superclasses(self): NamedJSONEncoder = MappingJSONEncoderClassBuilder(_Named, [ JsonPropertyMapping("name", "name") ]).build() OfficeJSONEncoder = MappingJSONEncoderClassBuilder(_Office, [], (NamedJSONEncoder, )).build() IdentifiableJSONEncoder = MappingJSONEncoderClassBuilder(_Identifiable, [ JsonPropertyMapping("id", "id") ]).build() EmployeeJSONEncoder = MappingJSONEncoderClassBuilder(_Employee, [ JsonPropertyMapping("title", "title"), JsonPropertyMapping("office", "office", encoder_cls=OfficeJSONEncoder), ], (NamedJSONEncoder, IdentifiableJSONEncoder)).build() office = _Office() office.name = "Cambridge" employee = _Employee() employee.name = "Bob" employee.id = 42 employee.title = "Software Dev" employee.office = office employee_as_json = { "name": employee.name, "id": employee.id, "title": employee.title, "office": { "name": office.name } } self.assertEqual(EmployeeJSONEncoder().default(employee), employee_as_json)
def test_build_with_superclass(self): SimpleModelJSONEncoder = MappingJSONEncoderClassBuilder( SimpleModel, get_simple_model_json_property_mappings()).build() encoder_builder = MappingJSONEncoderClassBuilder() encoder_builder.target_cls = ComplexModel encoder_builder.mappings = get_complex_model_json_property_mappings() encoder_builder.superclasses = (SimpleModelJSONEncoder, ) encoder_cls = encoder_builder.build() encoder = encoder_cls() # type: MappingJSONEncoder encoded = encoder.default(self.complex_model) self.assertDictEqual(encoded, self.complex_model_as_json)
def test_build_with_superclass_as_string(self): ContainerJSONEncoder = MappingJSONEncoderClassBuilder(_Container, [ JsonPropertyMapping("colour", "colour", object_constructor_parameter_name="colour"), JsonPropertyMapping("contains", "contains", encoder_cls=lambda: ContainerJSONEncoder, optional=True) ]).build() encoder = ContainerJSONEncoder() container = _Container("red", _Container("blue")) self.assertEqual({"colour": "red", "contains": {"colour": "blue"}}, encoder.default(container))
def test_build_with_none_property(self): NamedJSONEncoder = MappingJSONEncoderClassBuilder(_Named, [ JsonPropertyMapping("name", "name") ]).build() OfficeJSONEncoder = MappingJSONEncoderClassBuilder(_Office, [], (NamedJSONEncoder,)).build() EmployeeJSONEncoder = MappingJSONEncoderClassBuilder(_Employee, [ JsonPropertyMapping("office", "office", encoder_cls=OfficeJSONEncoder), ], (NamedJSONEncoder, )).build() employee = _Employee() employee.name = "Bob" employee.office = None employee_as_json = { "name": employee.name, "office": None } self.assertEqual(employee_as_json, EmployeeJSONEncoder().default(employee))
def test_build(self): encoder_builder = MappingJSONEncoderClassBuilder() encoder_builder.target_cls = SimpleModel encoder_builder.mappings = get_simple_model_json_property_mappings() encoder_cls = encoder_builder.build() encoder = encoder_cls() # type: MappingJSONEncoder encoded = encoder.default(self.simple_model) self.assertDictEqual(encoded, self.simple_model_as_json)
def setUp(self): self.values = set([create_simple_model_with_json_representation(i)[0] for i in range(10)]) self.values_as_json = [create_simple_model_with_json_representation(i)[1] for i in range(10)] self.ValueJSONEncoder = MappingJSONEncoderClassBuilder( SimpleModel, get_simple_model_json_property_mappings()).build()