Skip to content

Commit a10bdbb

Browse files
d-w-moorealanking
authored andcommitted
[#547] unify AVU field exceptions interface for metadata add and set
1 parent 86a8f11 commit a10bdbb

2 files changed

Lines changed: 30 additions & 5 deletions

File tree

irods/manager/metadata_manager.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,6 @@ def meta_opts(row):
9595
for row in results]
9696

9797
def add(self, model_cls, path, meta, **opts):
98-
# Avoid sending request with empty argument(s)
99-
if not(len(path) and len(meta.name) and len(meta.value)):
100-
raise ValueError('Empty value in ' + repr(meta))
10198

10299
resource_type = self._model_class_to_resource_type(model_cls)
103100
message_body = MetadataRequest(

irods/test/meta_test.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,13 +520,41 @@ def units():
520520
if d: d.unlink(force = True)
521521
helpers.remove_unused_metadata(session)
522522

523+
def test_AVUs_populated_improperly_with_empties_or_nonstrings_fail_identically__issue_547(self):
524+
try:
525+
to_delete = []
526+
hc = helpers.home_collection(self.sess)
527+
mtemplate = iRODSMeta('some_name', 'some_value', 'some_units')
528+
for index in ('name','value','units'):
529+
for edge_case_arg in ('', 3):
530+
# Empty units are permitted, ie. iRODSMeta(attr,value,'') and iRODSMeta(attr,value) are equivalent.
531+
if edge_case_arg in ('',b'') and index == 'units':
532+
continue
533+
for method in ('set','add'):
534+
data = self.sess.data_objects.create("{hc}/{index}_{edge_case_arg}_{method}_AZ__issue_547".format(**locals()))
535+
to_delete.append(data)
536+
m = iRODSMeta(*mtemplate)
537+
setattr(m, index, edge_case_arg)
538+
with self.assertRaises(Bad_AVU_Field):
539+
getattr(data.metadata, method)(*m)
540+
finally:
541+
for d in to_delete:
542+
d.unlink(force=True)
543+
523544
def test_nonstring_as_AVU_value_raises_an_error__issue_434(self):
545+
args = ("an_attribute",0)
524546
with self.assertRaisesRegexp(Bad_AVU_Field,'incorrect type'):
525-
self.coll.metadata.set("an_attribute",0)
547+
self.coll.metadata.set(*args)
548+
with self.assertRaisesRegexp(Bad_AVU_Field,'incorrect type'):
549+
self.coll.metadata.add(*args)
526550

527551
def test_empty_string_as_AVU_value_raises_an_error__issue_434(self):
552+
args = ("an_attribute","")
553+
with self.assertRaisesRegexp(Bad_AVU_Field,'zero-length'):
554+
self.coll.metadata.set(*args)
528555
with self.assertRaisesRegexp(Bad_AVU_Field,'zero-length'):
529-
self.coll.metadata.set("an_attribute","")
556+
self.coll.metadata.add(*args)
557+
530558

531559
if __name__ == '__main__':
532560
# let the tests find the parent irods lib

0 commit comments

Comments
 (0)