Skip to content

Commit c51532f

Browse files
committed
[_768] reload option
[_768] add test [_768] reasonable handling of _meta
1 parent 2cc03aa commit c51532f

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

irods/manager/metadata_manager.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ def _model_class_to_resource_description(model_cls):
8383
}[model_cls]
8484

8585
def get(self, model_cls, path):
86+
if not path:
87+
# Short circuit. This should be of the same type as the object returned at the function's end.
88+
return []
8689
resource_type = self._model_class_to_resource_type(model_cls)
8790
model = {
8891
"d": DataObjectMeta,

irods/meta.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ def __init__(self, manager, model_cls, path):
107107
self._reset_metadata()
108108

109109
def _reset_metadata(self):
110-
self._meta = self._manager.get(self._model_cls, self._path)
110+
m = self._manager
111+
if not hasattr(self,"_meta"):
112+
self._meta = m.get(None, "")
113+
if m._opts.setdefault('reload',True):
114+
self._meta = m.get(self._model_cls, self._path)
111115

112116
def get_all(self, key):
113117
"""

irods/test/meta_test.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,25 @@ def test_cascading_changes_of_metadata_manager_options__issue_709(self):
822822
if d:
823823
d.unlink(force=True)
824824

825+
def test_reload_can_be_deactivated__issue_768(self):
826+
# Set an initial AVU
827+
metacoll = self.obj.metadata
828+
metacoll.set(i:=iRODSMeta('aa','bb','cc'))
829+
830+
# Initial defaults will always reload the AVU list from the server, so new AVU should be seen.
831+
self.assertIn(i, metacoll.items())
832+
833+
# Setting reload option to False will prevent reload of object AVUs, so an AVU just set should not be seen.
834+
(mc:=metacoll(reload=False)).set(i2:=iRODSMeta('xx','yy','zz'))
835+
items = mc.items()
836+
self.assertIn(i, items)
837+
self.assertNotIn(i2, items)
838+
839+
# Restore old setting. Check that both AVUs are seen as present.
840+
items_reloaded = mc(reload=True).items()
841+
self.assertIn(i, items_reloaded)
842+
self.assertIn(i2, items_reloaded)
843+
825844
if __name__ == "__main__":
826845
# let the tests find the parent irods lib
827846
sys.path.insert(0, os.path.abspath("../.."))

0 commit comments

Comments
 (0)