def decode_parsed(self, json_as_dict: dict) -> IrodsMetadata: if not isinstance(json_as_dict, List): return super().decode(json_as_dict) irods_metadata = IrodsMetadata() for item in json_as_dict: assert isinstance(item, dict) attribute = item[BATON_AVU_ATTRIBUTE_PROPERTY] value = item[BATON_AVU_VALUE_PROPERTY] irods_metadata.add(attribute, value) return irods_metadata
def combine_metadata(metadata_collection: Iterable[IrodsMetadata]) -> IrodsMetadata: """ Combines n metadata objects into a single metadata object. Key values are merged, duplicate values are removed. :param metadata_collection: the collection of metadata to combine :return: the combined metadata """ combined = IrodsMetadata() for metadata in metadata_collection: for key, values in metadata.items(): for value in values: combined.add(key, value) return combined
class TestIrodsMetadata(unittest.TestCase): """ Tests for `IrodsMetadata`. """ def setUp(self): self.metadata = IrodsMetadata({"attribute_a": {"value_1"}, "attribute_b": {"value_b"}}) def test_equal(self): self.assertEqual(copy.deepcopy(self.metadata), self.metadata) def test_add_when_key_does_not_exists(self): self.metadata.add("key", "value") self.assertEqual(self.metadata["key"], {"value"}) def test_add_when_key_exists(self): self.metadata["key"] = {"value_1"} self.metadata.add("key", "value_2") self.assertEqual(self.metadata["key"], {"value_1", "value_2"}) def test_get_when_default(self): default = object() value = self.metadata.get("not_set", default=default) self.assertEqual(value, default)