@@ -33,18 +33,37 @@ def use_timestamps(self):
3333 return getattr (self , "_use_ts" , False )
3434
3535 __kw = {} # default (empty) keywords
36+ _admin = False
37+ _use_ts = False
3638
3739 def _updated_keywords (self , opts ):
3840 kw_ = self .__kw .copy ()
3941 kw_ .update (opts )
4042 return kw_
4143
42- def __call__ (self , admin = False , timestamps = False , ** irods_kw_opt ):
43- if admin :
44- irods_kw_opt .update ([(kw .ADMIN_KW , "" )])
44+ __generate_new_options = staticmethod (lambda obj , from_kw : { 'admin' :obj ._admin ,
45+ 'timestamps' :obj ._use_ts ,
46+ ** from_kw })
47+
48+ def get_api_keywords (self ): return self .__kw .copy ()
49+
50+ def __call__ (self , ** kw_opt ):
51+ # Make a new shallow copy of the manager object, but update options from parameter list.
4552 new_self = copy .copy (self )
46- new_self ._use_ts = timestamps
47- new_self .__kw = irods_kw_opt
53+ new_options = new_self .__kw = self .__generate_new_options (new_self , kw_opt )
54+
55+ # 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
60+
61+ # Update the ADMIN_KW flag in the returned(new) object.
62+ if new_self ._admin :
63+ new_options [kw .ADMIN_KW ] = ""
64+ else :
65+ new_options .pop (kw .ADMIN_KW , None )
66+
4867 return new_self
4968
5069 @staticmethod
0 commit comments