def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]: repetition_count = self.__repetition_count if isinstance(repetition_count, ParameterDeclaration): repetition_count = serializer._serialize_subpulse(repetition_count) return dict( type=serializer.get_type_identifier(self), body=serializer._serialize_subpulse(self.__body), repetition_count=repetition_count )
def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]: data = dict() data['is_measurement_pulse'] = self.__is_measurement_pulse data['time_parameter_declarations'] = [serializer._serialize_subpulse(self.__time_parameter_declarations[key]) for key in sorted(self.__time_parameter_declarations.keys())] data['voltage_parameter_declarations'] = [serializer._serialize_subpulse(self.__voltage_parameter_declarations[key]) for key in sorted(self.__voltage_parameter_declarations.keys())] entries = [] for (time, voltage, interpolation) in self.__entries: if isinstance(time, ParameterDeclaration): time = time.name if isinstance(voltage, ParameterDeclaration): voltage = voltage.name entries.append((time, voltage, str(interpolation))) data['entries'] = entries data['type'] = serializer.get_type_identifier(self) return data
def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]: data = dict( type=serializer.get_type_identifier(self), condition=self.__condition, body=serializer._serialize_subpulse(self.__body) ) return data
def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]: data = dict() data['external_parameters'] = sorted(list(self.parameter_names)) data['is_interruptable'] = self.is_interruptable subtemplates = [] for (subtemplate, mapping_functions) in self.subtemplates: mapping_functions_strings = {k: m.string for k, m in mapping_functions.items()} subtemplate = serializer._serialize_subpulse(subtemplate) subtemplates.append(dict(template=subtemplate, mappings=copy.deepcopy(mapping_functions_strings))) data['subtemplates'] = subtemplates data['type'] = serializer.get_type_identifier(self) return data
def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]: return dict(data=serializer._serialize_subpulse(self.data))
class SerializerTests(unittest.TestCase): def setUp(self) -> None: self.backend = DummyStorageBackend() self.serializer = Serializer(self.backend) self.deserialization_data = dict(data='THIS IS DARTAA!', type=self.serializer.get_type_identifier(DummySerializable())) def test_serialize_subpulse_no_identifier(self) -> None: serializable = DummySerializable(data='bar') serialized = self.serializer._serialize_subpulse(serializable) self.assertEqual(serializable.get_serialization_data(self.serializer), serialized) def test_serialize_subpulse_identifier(self) -> None: serializable = DummySerializable(identifier='bar') serialized = self.serializer._serialize_subpulse(serializable) self.assertEqual(serializable.identifier, serialized) def test_serialize_subpulse_duplicate_identifier(self) -> None: serializable = DummySerializable(identifier='bar') self.serializer._serialize_subpulse(serializable) self.serializer._serialize_subpulse(serializable) serializable = DummySerializable(data='this is other data than before', identifier='bar') with self.assertRaises(Exception): self.serializer._serialize_subpulse(serializable) def test_dictify_no_identifier(self) -> None: serializable = DummySerializable(data='bar') dictified = self.serializer.dictify(serializable) self.assertEqual({'': serializable.get_serialization_data(self.serializer)}, dictified) def test_dictify_identifier(self) -> None: serializable = DummySerializable(data='bar', identifier='foo') dicified = self.serializer.dictify(serializable) self.assertEqual({serializable.identifier: serializable.get_serialization_data(self.serializer)}, dicified) def test_dicitify_no_identifier_one_nesting_no_identifier(self) -> None: inner_serializable = DummySerializable(data='bar') serializable = NestedDummySerializable(data=inner_serializable) dicitified = self.serializer.dictify(serializable) self.assertEqual({'': serializable.get_serialization_data(self.serializer)}, dicitified) def test_dictify_no_identifier_one_nesting_identifier(self) -> None: inner_serializable = DummySerializable(data='bar', identifier='foo') serializable = NestedDummySerializable(data=inner_serializable) dicitified = self.serializer.dictify(serializable) self.assertEqual({'': serializable.get_serialization_data(self.serializer), inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer)}, dicitified) def test_dictify_identifier_one_nesting_no_identifier(self) -> None: inner_serializable = DummySerializable(data='bar') serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo') dicitified = self.serializer.dictify(serializable) self.assertEqual({serializable.identifier: serializable.get_serialization_data(self.serializer)}, dicitified) def test_dictify_identifier_one_nesting_identifier(self) -> None: inner_serializable = DummySerializable(data='bar', identifier='foo') serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo') dicitified = self.serializer.dictify(serializable) self.assertEqual({inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer), serializable.identifier: serializable.get_serialization_data(self.serializer)}, dicitified) def __serialization_test_helper(self, serializable: Serializable, expected: Dict[str, str]) -> None: self.serializer.serialize(serializable) expected = {k: json.dumps(v, indent=4, sort_keys=True) for k,v in expected.items()} self.assertEqual(expected, self.backend.stored_items) def test_serialize_no_identifier(self) -> None: serializable = DummySerializable(data='bar') expected = {'main': serializable.get_serialization_data(self.serializer)} self.__serialization_test_helper(serializable, expected) def test_serialize_identifier(self) -> None: serializable = DummySerializable(data='bar', identifier='foo') expected = {serializable.identifier: serializable.get_serialization_data(self.serializer)} self.__serialization_test_helper(serializable, expected) def test_serialize_no_identifier_one_nesting_no_identifier(self) -> None: inner_serializable = DummySerializable(data='bar') serializable = NestedDummySerializable(data=inner_serializable) expected = {'main': serializable.get_serialization_data(self.serializer)} self.__serialization_test_helper(serializable, expected) def test_serialize_no_identifier_one_nesting_identifier(self) -> None: inner_serializable = DummySerializable(data='bar', identifier='foo') serializable = NestedDummySerializable(data=inner_serializable) expected = {'main': serializable.get_serialization_data(self.serializer), inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer)} self.__serialization_test_helper(serializable, expected) def test_serialize_identifier_one_nesting_no_identifier(self) -> None: inner_serializable = DummySerializable(data='bar') serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo') expected = {serializable.identifier: serializable.get_serialization_data(self.serializer)} self.__serialization_test_helper(serializable, expected) def test_serialize_identifier_one_nesting_identifier(self) -> None: inner_serializable = DummySerializable(data='bar', identifier='foo') serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo') expected = {serializable.identifier: serializable.get_serialization_data(self.serializer), inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer)} self.__serialization_test_helper(serializable, expected) def test_deserialize_dict(self) -> None: deserialized = self.serializer.deserialize(self.deserialization_data) self.assertIsInstance(deserialized, DummySerializable) self.assertEqual(self.deserialization_data['data'], deserialized.data) def test_deserialize_identifier(self) -> None: jsonized_data = json.dumps(self.deserialization_data, indent=4, sort_keys=True) identifier = 'foo' self.backend.put(identifier, jsonized_data) deserialized = self.serializer.deserialize(identifier) self.assertIsInstance(deserialized, DummySerializable) self.assertEqual(self.deserialization_data['data'], deserialized.data) def test_serialization_and_deserialization_combined(self) -> None: table_foo = TablePulseTemplate(identifier='foo') table_foo.add_entry('hugo', 2) table_foo.add_entry(ParameterDeclaration('albert', max=9.1), 'voltage') table = TablePulseTemplate(measurement=True) foo_mappings = dict(hugo='ilse', albert='albert', voltage='voltage') sequence = SequencePulseTemplate([(table_foo, foo_mappings), (table, {})], ['ilse', 'albert', 'voltage'], identifier=None) storage = DummyStorageBackend() serializer = Serializer(storage) serializer.serialize(sequence) serialized_foo = storage.stored_items['foo'] serialized_sequence = storage.stored_items['main'] deserialized_sequence = serializer.deserialize('main') storage.stored_items = dict() serializer.serialize(deserialized_sequence) self.assertEqual(serialized_foo, storage.stored_items['foo']) self.assertEqual(serialized_sequence, storage.stored_items['main'])