def test_with_nested_union(self): @dataclass class TestString: label: str @dataclass class TestInt: id: int @dataclass class NestTest: nested: Union[TestString, TestInt] instance = NestTest(TestString("testString")) unmarshalled = unmarshal(marshal(instance, cls=NestTest), cls=NestTest) self.assertIsInstance(unmarshalled, NestTest) self.assertIsInstance(unmarshalled.nested, TestString) self.assertEqual(unmarshalled.nested.label, "testString") instance = NestTest(TestInt(5)) unmarshalled = unmarshal(marshal(instance, cls=NestTest), cls=NestTest) self.assertIsInstance(unmarshalled, NestTest) self.assertIsInstance(unmarshalled.nested, TestInt) self.assertEqual(unmarshalled.nested.id, 5)
def save_signal(scenario_id, modality, signal): """Save signal Save a signal related to a specific scenario and modality --- tags: - signals parameters: - name: scenario_id in: path type: string required: true default: 'scenario_1' - name: modality in: path type: string enum: ['image', 'text', 'audio', 'video'] required: true default: 'text' - name: signal in: path $ref: '#/definitions/Signals' required: true default: '4f0bbc71-2369-4d55-8dd0-b00e56c0f0b2' responses: 200: description: Successful addition of signal of specific modality to a given scenario """ signal_json = request.get_data(as_text=True) backend.save_signal(scenario_id, unmarshal(signal_json)) return ""
def test_marshalling_scenario(self): instances = SCENARIO_INSTANCES for instance in instances: with self.subTest(str(instance.__class__.__name__)): serialized = marshal(instance, cls=instance.__class__) clone = unmarshal(serialized, cls=instance.__class__) self.assertEqual(instance, clone)
def test_unmarshall_without_type(self): @emissor_dataclass class TestString: label: str instance = TestString("testString") unmarshalled = unmarshal(marshal(instance, cls=TestString)) self.assertEqual(unmarshalled.label, "testString")
def test_json_with_missing_property(self): @dataclass class TestString: label: Optional[str] unmarshalled = unmarshal("{}", cls=TestString) self.assertIsInstance(unmarshalled, TestString) self.assertEqual(unmarshalled.label, None)
def test_json_with_missing_property(self): @dataclass class TestString: label: Optional[str] unmarshalled = unmarshal("{}") self.assertNotIsInstance(unmarshalled, TestString) self.assertRaises(AttributeError, lambda: unmarshalled.label)
def test_with_none_value(self): @dataclass class TestString: label: Optional[str] instance = TestString(None) unmarshalled = unmarshal(marshal(instance, cls=TestString), cls=TestString) self.assertIsInstance(unmarshalled, TestString) self.assertEqual(unmarshalled.label, None)
def test_plain(self): @dataclass class TestString: label: str instance = TestString("testString") unmarshalled = unmarshal(marshal(instance), cls=TestString) self.assertIsInstance(unmarshalled, TestString) self.assertEqual(unmarshalled.label, "testString")
def test_list(self): @dataclass(frozen=True) class TestString: label: str instance = [TestString("test1"), TestString("test2")] unmarshalled = unmarshal(marshal(instance, cls=TestString), cls=TestString) self.assertIsInstance(unmarshalled, list) self.assertListEqual(unmarshalled, instance)
def test_set(self): @dataclass(frozen=True) class TestString: label: str instance = {TestString("test1"), TestString("test2")} unmarshalled = unmarshal(marshal(instance, cls=TestString), cls=TestString) self.assertIsInstance(unmarshalled, list) self.assertSetEqual(set(unmarshalled), instance)
def test_list(self): @dataclass(frozen=True) class TestString: label: str instance = [TestString("test1"), TestString("test2")] json = marshal(instance) unmarshalled = unmarshal(json) self.assertIsInstance(unmarshalled, list) self.assertListEqual([u.label for u in unmarshalled], [i.label for i in instance])
def test_type_unsupported_by_serializer(self): @dataclass class TestString: label: uuid.UUID instance = TestString(uuid.uuid4()) self.assertRaises(TypeError, lambda: marshal(instance, default=vars)) unmarshalled = unmarshal(marshal(instance, cls=TestString), cls=TestString) self.assertIsInstance(unmarshalled, TestString) self.assertIsInstance(unmarshalled.label, uuid.UUID)
def test_set(self): @dataclass(frozen=True) class TestString: label: str instance = {TestString("test1"), TestString("test2")} json = marshal(instance) unmarshalled = unmarshal(json) self.assertIsInstance(unmarshalled, list) self.assertSetEqual({u.label for u in unmarshalled}, {i.label for i in instance})
def test_plain(self): @dataclass class TestString: label: str json_ld_context: Union[str, dict] instance = TestString("testString", {'id': '@id'}) unmarshalled = unmarshal(marshal(instance, cls=TestString), cls=TestString) self.assertIsInstance(unmarshalled, TestString) self.assertEqual(unmarshalled.label, "testString")
def test_with_nested(self): @dataclass class TestString: label: str @dataclass class NestTest: nested: TestString instance = NestTest(TestString("testString")) unmarshalled = unmarshal(marshal(instance, cls=NestTest), cls=NestTest) self.assertIsInstance(unmarshalled, NestTest) self.assertIsInstance(unmarshalled.nested, TestString) self.assertEqual(unmarshalled.nested.label, "testString")
def test_marshalling_containers(self): for instance in CONTAINER_INSTANCES: with self.subTest(str(instance.__class__.__name__)): serialized = marshal(instance, cls=instance.__class__) clone = unmarshal(serialized, cls=instance.__class__) self.assertEqual(instance, clone)
def test_marshalling_array_container(self): array_container = ArrayContainer.from_array(np.array([[1.1, 2.2], [3.3, 4.4]])) clone = unmarshal(marshal(array_container, cls=ArrayContainer), cls=ArrayContainer) assert_array_equal(array_container.array, clone.array)