Skip to content

Commit f30ee5b

Browse files
authored
Merge pull request #1148 from syucream/fix/enum
Use enum more effectively
2 parents f9bb906 + a3ca910 commit f30ee5b

File tree

7 files changed

+88
-96
lines changed

7 files changed

+88
-96
lines changed

airone/lib/acl.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import enum
22

3-
from six import with_metaclass
4-
53
__all__ = ["ACLType", "ACLObjType"]
64

75

@@ -10,6 +8,7 @@ def __iter__(self):
108
return self._types.__iter__()
119

1210

11+
@enum.unique
1312
class ACLObjType(enum.IntEnum):
1413
Entity = 1 << 0
1514
EntityAttr = 1 << 1
@@ -40,7 +39,7 @@ def __le__(cls, comp):
4039
return False
4140

4241

43-
class ACLTypeBase(with_metaclass(MetaACLType)):
42+
class ACLTypeBase(metaclass=MetaACLType):
4443
pass
4544

4645

airone/lib/elasticsearch.py

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class AdvancedSearchResults(TypedDict):
3838
ret_values: list[AdvancedSearchResultValue]
3939

4040

41+
@enum.unique
4142
class FilterKey(enum.IntEnum):
4243
CLEARED = 0
4344
EMPTY = 1

airone/lib/types.py

+73-83
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
import enum
22
from typing import Any
33

4-
from six import with_metaclass
54

6-
_ATTR_OBJECT_TYPE = 1 << 0
7-
_ATTR_STRING_TYPE = 1 << 1
8-
_ATTR_TEXT_TYPE = 1 << 2
9-
_ATTR_BOOL_TYPE = 1 << 3
10-
_ATTR_GROUP_TYPE = 1 << 4
11-
_ATTR_DATE_TYPE = 1 << 5
12-
_ATTR_ROLE_TYPE = 1 << 6
13-
_ATTR_ARRAY_TYPE = 1 << 10
14-
_ATTR_NAMED_TYPE = 1 << 11
5+
@enum.unique
6+
class AttrType(enum.IntFlag):
7+
OBJECT = 1 << 0
8+
STRING = 1 << 1
9+
TEXT = 1 << 2
10+
BOOLEAN = 1 << 3
11+
GROUP = 1 << 4
12+
DATE = 1 << 5
13+
ROLE = 1 << 6
14+
_ARRAY = 1 << 10
15+
_NAMED = 1 << 11
16+
NAMED_OBJECT = _NAMED | OBJECT
17+
ARRAY_OBJECT = _ARRAY | OBJECT
18+
ARRAY_STRING = _ARRAY | STRING
19+
ARRAY_NAMED_OBJECT = _ARRAY | _NAMED | OBJECT
20+
ARRAY_NAMED_OBJECT_BOOLEAN = 3081 # unmanaged by AttrTypeXXX
21+
ARRAY_GROUP = _ARRAY | GROUP
22+
ARRAY_ROLE = _ARRAY | ROLE
1523

1624

1725
class MetaAttrType(type):
@@ -22,7 +30,6 @@ def __eq__(cls, comp):
2230
return cls.NAME == comp
2331
else:
2432
return cls.TYPE == comp.TYPE
25-
return False
2633

2734
def __ne__(cls, comp):
2835
return not cls == comp
@@ -34,82 +41,82 @@ def __int__(cls):
3441
return cls.TYPE
3542

3643

37-
class AttrTypeObj(with_metaclass(MetaAttrType)):
44+
class AttrTypeObj(metaclass=MetaAttrType):
3845
NAME = "entry"
39-
TYPE = _ATTR_OBJECT_TYPE
46+
TYPE = AttrType.OBJECT
4047
DEFAULT_VALUE = None
4148

4249

4350
# STRING-type restricts data size to AttributeValue.MAXIMUM_VALUE_LENGTH
44-
class AttrTypeStr(with_metaclass(MetaAttrType)):
51+
class AttrTypeStr(metaclass=MetaAttrType):
4552
NAME = "string"
46-
TYPE = _ATTR_STRING_TYPE
53+
TYPE = AttrType.STRING
4754
DEFAULT_VALUE = ""
4855

4956

50-
class AttrTypeNamedObj(with_metaclass(MetaAttrType)):
57+
class AttrTypeNamedObj(metaclass=MetaAttrType):
5158
NAME = "named_entry"
52-
TYPE = _ATTR_OBJECT_TYPE | _ATTR_NAMED_TYPE
59+
TYPE = AttrType.NAMED_OBJECT
5360
DEFAULT_VALUE = {"name": "", "id": None}
5461

5562

56-
class AttrTypeArrObj(with_metaclass(MetaAttrType)):
63+
class AttrTypeArrObj(metaclass=MetaAttrType):
5764
NAME = "array_entry"
58-
TYPE = _ATTR_OBJECT_TYPE | _ATTR_ARRAY_TYPE
65+
TYPE = AttrType.ARRAY_OBJECT
5966
DEFAULT_VALUE = []
6067

6168

62-
class AttrTypeArrStr(with_metaclass(MetaAttrType)):
69+
class AttrTypeArrStr(metaclass=MetaAttrType):
6370
NAME = "array_string"
64-
TYPE = _ATTR_STRING_TYPE | _ATTR_ARRAY_TYPE
71+
TYPE = AttrType.ARRAY_STRING
6572
DEFAULT_VALUE = []
6673

6774

68-
class AttrTypeArrNamedObj(with_metaclass(MetaAttrType)):
75+
class AttrTypeArrNamedObj(metaclass=MetaAttrType):
6976
NAME = "array_named_entry"
70-
TYPE = _ATTR_OBJECT_TYPE | _ATTR_NAMED_TYPE | _ATTR_ARRAY_TYPE
77+
TYPE = AttrType.ARRAY_NAMED_OBJECT
7178
DEFAULT_VALUE: Any = dict().values()
7279

7380

74-
class AttrTypeArrGroup(with_metaclass(MetaAttrType)):
81+
class AttrTypeArrGroup(metaclass=MetaAttrType):
7582
NAME = "array_group"
76-
TYPE = _ATTR_GROUP_TYPE | _ATTR_ARRAY_TYPE
83+
TYPE = AttrType.ARRAY_GROUP
7784
DEFAULT_VALUE = []
7885

7986

80-
class AttrTypeText(with_metaclass(MetaAttrType)):
87+
class AttrTypeText(metaclass=MetaAttrType):
8188
NAME = "textarea"
82-
TYPE = _ATTR_TEXT_TYPE
89+
TYPE = AttrType.TEXT
8390
DEFAULT_VALUE = ""
8491

8592

86-
class AttrTypeBoolean(with_metaclass(MetaAttrType)):
93+
class AttrTypeBoolean(metaclass=MetaAttrType):
8794
NAME = "boolean"
88-
TYPE = _ATTR_BOOL_TYPE
95+
TYPE = AttrType.BOOLEAN
8996
DEFAULT_VALUE = False
9097

9198

92-
class AttrTypeGroup(with_metaclass(MetaAttrType)):
99+
class AttrTypeGroup(metaclass=MetaAttrType):
93100
NAME = "group"
94-
TYPE = _ATTR_GROUP_TYPE
101+
TYPE = AttrType.GROUP
95102
DEFAULT_VALUE = None
96103

97104

98-
class AttrTypeDate(with_metaclass(MetaAttrType)):
105+
class AttrTypeDate(metaclass=MetaAttrType):
99106
NAME = "date"
100-
TYPE = _ATTR_DATE_TYPE
107+
TYPE = AttrType.DATE
101108
DEFAULT_VALUE = None
102109

103110

104-
class AttrTypeRole(with_metaclass(MetaAttrType)):
111+
class AttrTypeRole(metaclass=MetaAttrType):
105112
NAME = "role"
106-
TYPE = _ATTR_ROLE_TYPE
113+
TYPE = AttrType.ROLE
107114
DEFAULT_VALUE = None
108115

109116

110-
class AttrTypeArrRole(with_metaclass(MetaAttrType)):
117+
class AttrTypeArrRole(metaclass=MetaAttrType):
111118
NAME = "array_role"
112-
TYPE = _ATTR_ROLE_TYPE | _ATTR_ARRAY_TYPE
119+
TYPE = AttrType.ARRAY_ROLE
113120
DEFAULT_VALUE = []
114121

115122

@@ -129,51 +136,34 @@ class AttrTypeArrRole(with_metaclass(MetaAttrType)):
129136
AttrTypeArrRole,
130137
]
131138
AttrTypeValue = {
132-
"object": AttrTypeObj.TYPE,
133-
"string": AttrTypeStr.TYPE,
134-
"named": _ATTR_NAMED_TYPE,
135-
"named_object": AttrTypeNamedObj.TYPE,
136-
"array": _ATTR_ARRAY_TYPE,
137-
"array_object": AttrTypeArrObj.TYPE,
138-
"array_string": AttrTypeArrStr.TYPE,
139-
"array_named_object": AttrTypeArrNamedObj.TYPE,
140-
"array_group": AttrTypeArrGroup.TYPE,
141-
"array_role": AttrTypeArrRole.TYPE,
142-
"text": AttrTypeText.TYPE,
143-
"boolean": AttrTypeBoolean.TYPE,
144-
"group": AttrTypeGroup.TYPE,
145-
"date": AttrTypeDate.TYPE,
146-
"role": AttrTypeRole.TYPE,
139+
"object": AttrType.OBJECT,
140+
"string": AttrType.STRING,
141+
"named": AttrType._NAMED,
142+
"named_object": AttrType.NAMED_OBJECT,
143+
"array": AttrType._ARRAY,
144+
"array_object": AttrType.ARRAY_OBJECT,
145+
"array_string": AttrType.ARRAY_STRING,
146+
"array_named_object": AttrType.ARRAY_NAMED_OBJECT,
147+
"array_group": AttrType.ARRAY_GROUP,
148+
"array_role": AttrType.ARRAY_ROLE,
149+
"text": AttrType.TEXT,
150+
"boolean": AttrType.BOOLEAN,
151+
"group": AttrType.GROUP,
152+
"date": AttrType.DATE,
153+
"role": AttrType.ROLE,
147154
}
148-
AttrDefaultValue = {
149-
AttrTypeValue["object"]: AttrTypeObj.DEFAULT_VALUE,
150-
AttrTypeValue["string"]: AttrTypeStr.DEFAULT_VALUE,
151-
AttrTypeValue["named_object"]: AttrTypeNamedObj.DEFAULT_VALUE,
152-
AttrTypeValue["array_object"]: AttrTypeArrObj.DEFAULT_VALUE,
153-
AttrTypeValue["array_string"]: AttrTypeArrStr.DEFAULT_VALUE,
154-
AttrTypeValue["array_named_object"]: AttrTypeArrNamedObj.DEFAULT_VALUE,
155-
AttrTypeValue["array_group"]: AttrTypeArrGroup.DEFAULT_VALUE,
156-
AttrTypeValue["array_role"]: AttrTypeArrRole.DEFAULT_VALUE,
157-
AttrTypeValue["text"]: AttrTypeText.DEFAULT_VALUE,
158-
AttrTypeValue["boolean"]: AttrTypeBoolean.DEFAULT_VALUE,
159-
AttrTypeValue["group"]: AttrTypeGroup.DEFAULT_VALUE,
160-
AttrTypeValue["date"]: AttrTypeDate.DEFAULT_VALUE,
161-
AttrTypeValue["role"]: AttrTypeRole.DEFAULT_VALUE,
155+
AttrDefaultValue: dict[int, Any] = {
156+
AttrType.OBJECT: AttrTypeObj.DEFAULT_VALUE,
157+
AttrType.STRING: AttrTypeStr.DEFAULT_VALUE,
158+
AttrType.NAMED_OBJECT: AttrTypeNamedObj.DEFAULT_VALUE,
159+
AttrType.ARRAY_OBJECT: AttrTypeArrObj.DEFAULT_VALUE,
160+
AttrType.ARRAY_STRING: AttrTypeArrStr.DEFAULT_VALUE,
161+
AttrType.ARRAY_NAMED_OBJECT: AttrTypeArrNamedObj.DEFAULT_VALUE,
162+
AttrType.ARRAY_GROUP: AttrTypeArrGroup.DEFAULT_VALUE,
163+
AttrType.ARRAY_ROLE: AttrTypeArrRole.DEFAULT_VALUE,
164+
AttrType.TEXT: AttrTypeText.DEFAULT_VALUE,
165+
AttrType.BOOLEAN: AttrTypeBoolean.DEFAULT_VALUE,
166+
AttrType.GROUP: AttrTypeGroup.DEFAULT_VALUE,
167+
AttrType.DATE: AttrTypeDate.DEFAULT_VALUE,
168+
AttrType.ROLE: AttrTypeRole.DEFAULT_VALUE,
162169
}
163-
164-
165-
class AttrType(enum.IntEnum):
166-
OBJECT = AttrTypeObj.TYPE
167-
STRING = AttrTypeStr.TYPE
168-
NAMED_OBJECT = AttrTypeNamedObj.TYPE
169-
ARRAY_OBJECT = AttrTypeArrObj.TYPE
170-
ARRAY_STRING = AttrTypeArrStr.TYPE
171-
ARRAY_NAMED_OBJECT = AttrTypeArrNamedObj.TYPE
172-
ARRAY_NAMED_OBJECT_BOOLEAN = 3081 # unmanaged by AttrTypeXXX
173-
ARRAY_GROUP = AttrTypeArrGroup.TYPE
174-
ARRAY_ROLE = AttrTypeArrRole.TYPE
175-
TEXT = AttrTypeText.TYPE
176-
BOOLEAN = AttrTypeBoolean.TYPE
177-
GROUP = AttrTypeGroup.TYPE
178-
DATE = AttrTypeDate.TYPE
179-
ROLE = AttrTypeRole.TYPE

entry/models.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class AttributeValue(models.Model):
8484
)
8585

8686
@classmethod
87-
def get_default_value(kls, attr):
87+
def get_default_value(kls, attr: "Attribute"):
8888
"""
8989
Returns the default value for each attribute type.
9090
Used when there is no attribute value.

job/models.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import enum
12
import json
23
import pickle
34
import time
45
from datetime import date, datetime, timedelta
5-
from enum import IntEnum
66
from importlib import import_module
77
from typing import Any
88

@@ -26,7 +26,8 @@ def _support_time_default(o):
2626
raise TypeError(repr(o) + " is not JSON serializable")
2727

2828

29-
class JobOperation(IntEnum):
29+
@enum.unique
30+
class JobOperation(enum.IntEnum):
3031
# Constant to describes status of each jobs
3132
CREATE_ENTRY = 1
3233
EDIT_ENTRY = 2
@@ -59,13 +60,15 @@ class JobOperation(IntEnum):
5960
DELETE_ENTRY_V2 = 29
6061

6162

62-
class JobTarget(IntEnum):
63+
@enum.unique
64+
class JobTarget(enum.IntEnum):
6365
UNKNOWN = 0
6466
ENTRY = 1
6567
ENTITY = 2
6668

6769

68-
class JobStatus(IntEnum):
70+
@enum.unique
71+
class JobStatus(enum.IntEnum):
6972
PREPARING = 1
7073
DONE = 2
7174
ERROR = 3

poetry.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ python-ldap = "3.4.0"
5151
python3-saml = "1.12.0"
5252
pyyaml = "6.0.1"
5353
requests = "2.31.0"
54-
six = "1.15.0"
5554
setproctitle = "1.3.2"
5655
social-auth-app-django = "5.4.0"
5756
social-auth-core = "4.5.1"

0 commit comments

Comments
 (0)