Skip to content

Commit a56729b

Browse files
committed
[_709] correct and streamline. _opts and __kw should be separate.
1 parent 131b3e0 commit a56729b

2 files changed

Lines changed: 19 additions & 20 deletions

File tree

irods/manager/metadata_manager.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,13 @@ class InvalidAtomicAVURequest(Exception):
2929

3030
class MetadataManager(Manager):
3131

32+
def __init__(self, *_):
33+
self._opts = {'admin':False, 'timestamps':False}
34+
super().__init__(*_)
35+
3236
@property
3337
def use_timestamps(self):
34-
return getattr(self, "_use_ts", False)
38+
return self._opts['timestamps']
3539

3640
__kw : Dict[str, Any] = {} # default (empty) keywords
3741

@@ -40,28 +44,22 @@ def _updated_keywords(self, opts):
4044
kw_.update(opts)
4145
return kw_
4246

43-
__generate_new_options = staticmethod(lambda obj, from_kw: { 'admin':obj._admin,
44-
'timestamps':obj._use_ts,
45-
**from_kw })
46-
4747
def get_api_keywords(self): return self.__kw.copy()
4848

49-
def __call__(self, **kw_opt):
49+
def __call__(self, **flags):
5050
# Make a new shallow copy of the manager object, but update options from parameter list.
5151
new_self = copy.copy(self)
52-
new_options = new_self.__kw = self.__generate_new_options(new_self, kw_opt)
5352

5453
# Update the flags that do bookkeeping in the returned(new) manager object.
55-
if (timestamps:=new_options.pop('timestamps',None)) is not None:
56-
new_self._use_ts = timestamps
57-
if (admin:=new_options.pop('admin',None)) is not None:
58-
new_self._admin = admin
54+
new_self._opts.update(
55+
(key,val) for key,val in flags.items() if val is not None
56+
)
5957

6058
# Update the ADMIN_KW flag in the returned(new) object.
61-
if new_self._admin:
62-
new_options[kw.ADMIN_KW] = ""
59+
if new_self._opts.get('admin'):
60+
self.__kw[kw.ADMIN_KW] = ""
6361
else:
64-
new_options.pop(kw.ADMIN_KW, None)
62+
self.__kw.pop(kw.ADMIN_KW, None)
6563

6664
return new_self
6765

irods/test/meta_test.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -800,22 +800,23 @@ def test_xml_mode_addresses_odd_metadata_characters__issue_582(self):
800800

801801
def test_cascading_changes_of_metadata_manager_options__issue_709(self):
802802
d = None
803+
get_option = lambda metacoll, key: metacoll._manager._opts[key]
803804
try:
804805
d = self.sess.data_objects.create(f'{self.coll.path}/issue_709_test_1')
805806
m = d.metadata
806-
self.assertEqual(m._manager._admin,False)
807+
self.assertEqual(get_option(m,'admin'),False)
807808

808809
m2 = m(admin = True)
809-
self.assertEqual(m2._manager._use_ts,False)
810-
self.assertEqual(m2._manager._admin,True)
810+
self.assertEqual(get_option(m2,'timestamps'),False)
811+
self.assertEqual(get_option(m2,'admin'),True)
811812

812813
m3 = m2(timestamps = True)
813-
self.assertEqual(m3._manager._use_ts, True)
814-
self.assertEqual(m3._manager._admin, True)
814+
self.assertEqual(get_option(m3,'timestamps'), True)
815+
self.assertEqual(get_option(m3,'admin'), True)
815816
self.assertEqual(m3._manager.get_api_keywords().get(kw.ADMIN_KW), "")
816817

817818
m4 = m3(admin = False)
818-
self.assertEqual(m4._manager._use_ts, True)
819+
self.assertEqual(get_option(m4,'admin'), False)
819820
self.assertEqual(m4._manager.get_api_keywords().get(kw.ADMIN_KW), None)
820821
finally:
821822
if d:

0 commit comments

Comments
 (0)