Skip to content

Commit 26bf7dc

Browse files
committed
fix metaclass/inheritance conflicts
1 parent da7c881 commit 26bf7dc

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

irods/access.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@
2323

2424
class _Access_LookupMeta(type):
2525

26+
def __init__(self,*args,**kwargs):
27+
print (f"metaclass=_Access_LookupMeta used for defining class {args[0]!r}")
28+
super().__init__(*args,**kwargs)
29+
2630
@staticmethod
2731
def _codes():
28-
print ("inherit _Access_LookupMeta")
2932
return collections.OrderedDict(
3033
(key_, value_)
3134
for key_, value_ in sorted(
@@ -77,7 +80,7 @@ def items(self):
7780
return list(zip(self.keys(), self.values()))
7881

7982

80-
class iRODSAccess(metaclass=_Access_LookupMeta):
83+
class _iRODSAccess_base:
8184
@classmethod
8285
def to_int(cls, key):
8386
return cls.codes[key]
@@ -86,10 +89,7 @@ def to_int(cls, key):
8689
def to_string(cls, key):
8790
return cls.strings[key]
8891

89-
90-
def __init__(self, access_name, path, user_name="", user_zone="", user_type=None):
91-
self.codes = self.__class__.codes.copy()
92-
self.strings = self.__class__.strings.copy()
92+
def __init__(self, access_name, path, user_name, user_zone, user_type):
9393
self.access_name = access_name
9494
if isinstance(path, (iRODSCollection, iRODSDataObject)):
9595
self.path = path.path
@@ -149,6 +149,13 @@ def __repr__(self):
149149
return f"<iRODSAccess {access_name} {self.path} {self.user_name}{user_type_hint} {self.user_zone}>"
150150

151151

152+
class iRODSAccess(_iRODSAccess_base, metaclass=_Access_LookupMeta):
153+
def __init__(self, access_name, path, user_name="", user_zone="", user_type=None):
154+
self.codes = self.__class__.codes
155+
self.strings = self.__class__.strings
156+
super().__init__(access_name, path, user_name, user_zone, user_type)
157+
158+
152159
class ACLOperation(iRODSAccess):
153160
def __init__(self, access_name: str, user_name: str = "", user_zone: str = ""):
154161
super().__init__(
@@ -199,7 +206,8 @@ def __repr__(self):
199206
}
200207

201208

202-
class _iRODSAccess_pre_4_3_0(iRODSAccess):
209+
class _iRODSAccess_pre_4_3_0(_iRODSAccess_base):
210+
203211
codes = collections.OrderedDict(
204212
(key.replace("_", " "), value)
205213
for key, value in iRODSAccess.codes.items()

0 commit comments

Comments
 (0)