示例#1
0
 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
示例#2
0
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)