irods / python-irodsclient

A Python API for iRODS
Other
63 stars 73 forks source link

Removing metadata #157

Open jjkoehorst opened 5 years ago

jjkoehorst commented 5 years ago

I am trying to update the metadata of relatively newly created data_objects.

def set_metadata(element: DataObject, metadata=METADATA):
    for key in metadata:
        if key in element.metadata.keys():
            for remote_metadata in element.metadata.get_all(key):
                element.metadata.remove(remote_metadata)

This however returns

element.metadata.remove(remote_metadata)
  File "/venv/lib/python3.6/site-packages/irods/meta.py", line 63, in remove
    self._manager.remove(self._model_cls, self._path, meta)
  File "/venv/lib/python3.6/site-packages/irods/manager/metadata_manager.py", line 87, in remove
    response = conn.recv()
  File "/venv/lib/python3.6/site-packages/irods/connection.py", line 91, in recv
    raise get_exception_by_code(msg.int_info)
irods.exception.CAT_SUCCESS_BUT_WITH_NO_INFO: None

Process finished with exit code 1

I am trying to figure out what goes wrong here but the error message says its a success but not really?

jjkoehorst commented 5 years ago

Also when try / except this exception it will later on tell me the catalog already has the item but for some reason it does not want to update (delete/add) the item. Or should I use a different approach there?

d-w-moore commented 5 years ago

@jjkoehorst I modified the code example above, just a little, to read:

def remove_metadata(element : DataObject, metadata):
    for key in metadata.keys():
        for item in element.metadata.get_all(key):
            element.metadata.remove(item)
# ...
elem = sess.data_objects.get('/tempZone/home/rods/dataobj')
remove_metadata(elem, elem.metadata)

and I get:

$ imeta ls -d dataobj
AVUs defined for dataObj dataobj:
attribute: z
value: b
units: z
----
attribute: a
value: b
units: f
----
attribute: a
value: b
units: c
$ 
$ python3 removemeta.py 
$ imeta ls -d dataobj
AVUs defined for dataObj dataobj:
None

See if this modified form works for you. If not, I'd be interested in the particular combination of AVUs present on the object when you see the error.

trel commented 4 years ago

@jjkoehorst can you confirm this is behaving with @d-w-moore edits above? if so, please close.