Skip to content

Step 10: More metadata

Collections

You can add metadata not only on files, but also on collections:

Metadata: add metadata to collections
imeta add -C /WCDSacc/courses/11032025/your_username/iris_data_checksum "Description of collection" "Iris datasets with checksums"
  1. Navigate to the collection.
  2. Add the metadata: key: Description of collection. Value: Iris datasets with checksums

Add metadata to collection

gocmd addmeta /WCDSacc/courses/11032025/your_username/iris_data_checksum "Description of collection" "Iris datasets with checksums"
from connect import connect_to_irods
from irods import exception
import irods.meta

session = connect_to_irods()


def add_meta(collection, attribute, value=' ', units=' '):
    try:
        collection.metadata.add(attribute, value, units)
        print('Metadata added.')
    except irods.exception.CAT_SQL_ERR:
        print('Metadata already exists.')
    except Exception as e:
        print(f'Something went wrong: {e}')


# Example
var = session.collections.get('/WCDSacc/courses/11032025/your_username/iris_data_checksum')
add_meta(var, 'Description of collection', 'Iris dataset with checksums')
...

Duplicated keys

You can add multiple values on the same metadata name:

Metadata: duplicated metadata names
1
2
3
imeta add -d /WCDSacc/courses/11032025/your_username/iris_data_checksum/iris.data color blue
imeta add -d /WCDSacc/courses/11032025/your_username/iris_data_checksum/iris.data color red
imeta ls -d /WCDSacc/courses/11032025/your_username/iris_data_checksum/iris.data
  1. Navigate to the file iris.data.
  2. Add the metadata: key: color. Value: blue
  3. Add the metadata: key: color. Value: red

view duplicated metadata

1
2
3
gocmd addmeta /WCDSacc/courses/11032025/abcde001/iris_data/iris.data color red
gocmd addmeta /WCDSacc/courses/11032025/abcde001/iris_data/iris.data color blue
gocmd lsmeta /WCDSacc/courses/11032025/abcde001/iris_data/iris.data
1
2
3
4
5
6
...
# Example
var = session.data_objects.get('/WCDSacc/courses/11032025/your_username/iris_data/iris.data')
add_meta(var, 'color', 'red')
add_meta(var, 'color', 'blue')
list_meta(var)

Non-duplicated keys

Metadata: non-duplicated metadata names

Instead of metadata add you can also set metadata. With set you will overwrite the metadata you already have.

NB, if you have multiple values for the same name, all will be replaced by the single metadata you put in the command!

1
2
3
4
imeta set -C /WCDSacc/courses/11032025/your_username/iris_data_checksum "Description of collection" "Iris datasets with checksums with a different value"
imeta ls -C /WCDSacc/courses/11032025/your_username/iris_data_checksum
imeta set -d /WCDSacc/courses/11032025/your_username/iris_data_checksum/iris.data color green
imeta ls -d /WCDSacc/courses/11032025/your_username/iris_data_checksum/iris.data
  1. Navigate to the file iris.data.
  2. Make sure that only one metadata with the name color exists. Use the delete button. Delete metadata

At this moment, it is not possible to overwrite previous metadata (set) in GoCMD. GoCMD users will have to use gocmd rmmeta path/to/dir_or_file <Key> <Value> [Unit] to remove specific previous metadata and then use gocmd addmeta path/to/dir_or_file <Key> <Value> [Unit] to inject the new metadata.

from irods.meta import iRODSMeta, AVUOperation

session = connect_to_irods()
var = session.data_objects.get('/WCDSacc/courses/11032025/uka001/iris_data_checksum/iris.data')


def replace_meta(data_object, old_attr, old_val, old_units, new_attr, new_val, new_units):
old_meta = iRODSMeta(old_attr, old_val, old_units)
new_meta = iRODSMeta(new_attr, new_val, new_units)

ops = [AVUOperation(operation='remove', avu=old_meta),
   AVUOperation(operation='add', avu=new_meta)]

data_object.metadata.apply_atomic_operations(*ops)
print("Metadata replaced.")


# Example
replace_meta(var, 'old attribute', 'old value', 'old units', 'new attribute', 'new value', 'new units')