Metadata
iRODS offers metadata as key, value, units triplets. The type of the keys, values and units is always a string. Below we show how to create a Metadata object from a dataobject or collection.
The Metadata object
from ibridges.interactive import interactive_auth
from ibridges import IrodsPath
session = interactive_auth()
meta = IrodsPath(session, "~", "collection_or_dataobject").meta
With the object meta we can now access and manipulate the metadata of the data object.
Add metadata
To add metadata, you always need to provide a key and a value, the unit is optional and can be left out.
meta.add('NewKey', 'NewValue', 'NewUnit')
print(meta)
Note
You can have several metadata entries with the same key but different values and units, i.e. metadata keys are not unique in iRODS but the combination of key, value and unit must be unique.
Set metadata
The MetaData.set() method differs from the add method by removing all other entries with the
same key first. This mirrors the implementation of the iCommands
imeta set.
meta.set('ExistingKey', 'Value', 'Unit')
Delete metadata
Below are examples on how to delete metadata entries:
# Delete all entries with key 'NewKey'
meta.delete('NewKey')
# Delete all entries with key 'NewKey' and value 'NewValue'
meta.delete('NewKey', 'NewValue')
# Delete all entries with key 'NewKey' and units 'NewUnit'
meta.delete('NewKey', units='NewUnit')
# Delete a single entry with exactly that triplet.
meta.delete('NewKey', 'NewValue', 'NewUnit')
Export Metadata
The method MetaData.to_dict() will provide you with a python dictionary containing the user-defined metadata:
meta.to_dict()
{
'name': '<obj_name>',
'irods_id': 24490075,
'checksum': 'sha2:XGiECYZOtUfP9lnCGyZaBBkBGLaJJw1p6eoc0GxLeKU=',
'metadata': [('Key', 'Value', 'Unit'), ('Key', 'Value', 'Unit1')]
}
The dictionary contains the name of the data object or collection and its iRODS identifier.
For data objects the checksum is also listed under the key checksum. The checksum is not calculated, but extracted from the iRODS database.
The user-defined metadata can be accessed with the key metadata.