Skip to content

Commit b237ac1

Browse files
committed
[_709] correct and streamline. _opts and __kw should be separate.
1 parent 472f990 commit b237ac1

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

irods/manager/metadata_manager.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,41 +28,37 @@ class InvalidAtomicAVURequest(Exception):
2828

2929
class MetadataManager(Manager):
3030

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

3539
__kw = {} # default (empty) keywords
36-
_admin = False
37-
_use_ts = False
3840

3941
def _updated_keywords(self, opts):
4042
kw_ = self.__kw.copy()
4143
kw_.update(opts)
4244
return kw_
4345

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

50-
def __call__(self, **kw_opt):
48+
def __call__(self, **flags):
5149
# Make a new shallow copy of the manager object, but update options from parameter list.
5250
new_self = copy.copy(self)
53-
new_options = new_self.__kw = self.__generate_new_options(new_self, kw_opt)
5451

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

6157
# Update the ADMIN_KW flag in the returned(new) object.
62-
if new_self._admin:
63-
new_options[kw.ADMIN_KW] = ""
58+
if new_self._opts.get('admin'):
59+
self.__kw[kw.ADMIN_KW] = ""
6460
else:
65-
new_options.pop(kw.ADMIN_KW, None)
61+
self.__kw.pop(kw.ADMIN_KW, None)
6662

6763
return new_self
6864

irods/test/meta_test.py

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

799799
def test_cascading_changes_of_metadata_manager_options__issue_709(self):
800800
d = None
801+
get_option = lambda metacoll, key: metacoll._manager._opts[key]
801802
try:
802803
d = self.sess.data_objects.create(f'{self.coll.path}/issue_709_test_1')
803804
m = d.metadata
804-
self.assertEqual(m._manager._admin,False)
805+
self.assertEqual(get_option(m,'admin'),False)
805806

806807
m2 = m(admin = True)
807-
self.assertEqual(m2._manager._use_ts,False)
808-
self.assertEqual(m2._manager._admin,True)
808+
self.assertEqual(get_option(m2,'timestamps'),False)
809+
self.assertEqual(get_option(m2,'admin'),True)
809810

810811
m3 = m2(timestamps = True)
811-
self.assertEqual(m3._manager._use_ts, True)
812-
self.assertEqual(m3._manager._admin, True)
812+
self.assertEqual(get_option(m3,'timestamps'), True)
813+
self.assertEqual(get_option(m3,'admin'), True)
813814
self.assertEqual(m3._manager.get_api_keywords().get(kw.ADMIN_KW), "")
814815

815816
m4 = m3(admin = False)
816-
self.assertEqual(m4._manager._use_ts, True)
817+
self.assertEqual(get_option(m4,'admin'), False)
817818
self.assertEqual(m4._manager.get_api_keywords().get(kw.ADMIN_KW), None)
818819
finally:
819820
if d:

0 commit comments

Comments
 (0)