Skip to content

Commit 2bc6d0d

Browse files
committed
Dropdown enum cleanup
1 parent 13bb9f4 commit 2bc6d0d

File tree

1 file changed

+20
-65
lines changed

1 file changed

+20
-65
lines changed

backend/infrahub/actions/constants.py

Lines changed: 20 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
from enum import Enum
4+
from typing import Self
45

56
from infrahub.core.constants import InfrahubKind
67
from infrahub.core.schema.dropdown import DropdownChoice
@@ -13,7 +14,21 @@ class NodeAction(InfrahubStringEnum):
1314
UPDATED = "updated"
1415

1516

16-
class BranchScope(Enum):
17+
class DropdownEnum(Enum):
18+
@classmethod
19+
def available_types(cls) -> list[DropdownChoice]:
20+
return [cls.__members__[member].value for member in list(cls.__members__)]
21+
22+
@classmethod
23+
def from_value(cls, value: str) -> Self:
24+
for member in cls.__members__:
25+
if value == cls.__members__[member].value.name:
26+
return cls.__members__[member]
27+
28+
raise NotImplementedError(f"The defined value {value} doesn't match a value of {cls.__class__.__name__}")
29+
30+
31+
class BranchScope(DropdownEnum):
1732
ALL_BRANCHES = DropdownChoice(
1833
name="all_branches",
1934
label="All Branches",
@@ -33,20 +48,8 @@ class BranchScope(Enum):
3348
color="#e5e7eb",
3449
)
3550

36-
@classmethod
37-
def available_types(cls) -> list[DropdownChoice]:
38-
return [cls.__members__[member].value for member in list(cls.__members__)]
3951

40-
@classmethod
41-
def from_value(cls, value: str) -> BranchScope:
42-
for member in cls.__members__:
43-
if value == cls.__members__[member].value.name:
44-
return cls.__members__[member]
45-
46-
raise NotImplementedError(f"The defined value {value} doesn't match a branch scope")
47-
48-
49-
class MemberAction(Enum):
52+
class MemberAction(DropdownEnum):
5053
ADD_MEMBER = DropdownChoice(
5154
name="add_member",
5255
label="Add member",
@@ -60,20 +63,8 @@ class MemberAction(Enum):
6063
color="#fef08a",
6164
)
6265

63-
@classmethod
64-
def available_types(cls) -> list[DropdownChoice]:
65-
return [cls.__members__[member].value for member in list(cls.__members__)]
66-
67-
@classmethod
68-
def from_value(cls, value: str) -> MemberAction:
69-
for member in cls.__members__:
70-
if value == cls.__members__[member].value.name:
71-
return cls.__members__[member]
72-
73-
raise NotImplementedError(f"The defined value {value} doesn't match a member action")
74-
7566

76-
class MemberUpdate(Enum):
67+
class MemberUpdate(DropdownEnum):
7768
ADDED = DropdownChoice(
7869
name="added",
7970
label="Added",
@@ -87,20 +78,8 @@ class MemberUpdate(Enum):
8778
color="#fef08a",
8879
)
8980

90-
@classmethod
91-
def available_types(cls) -> list[DropdownChoice]:
92-
return [cls.__members__[member].value for member in list(cls.__members__)]
93-
94-
@classmethod
95-
def from_value(cls, value: str) -> MemberUpdate:
96-
for member in cls.__members__:
97-
if value == cls.__members__[member].value.name:
98-
return cls.__members__[member]
9981

100-
raise NotImplementedError(f"The defined value {value} doesn't match a MemberUpdate")
101-
102-
103-
class RelationshipMatch(Enum):
82+
class RelationshipMatch(DropdownEnum):
10483
ADDED = DropdownChoice(
10584
name="added",
10685
label="Added",
@@ -120,20 +99,8 @@ class RelationshipMatch(Enum):
12099
color="#e5e7eb",
121100
)
122101

123-
@classmethod
124-
def available_types(cls) -> list[DropdownChoice]:
125-
return [cls.__members__[member].value for member in list(cls.__members__)]
126-
127-
@classmethod
128-
def from_value(cls, value: str) -> RelationshipMatch:
129-
for member in cls.__members__:
130-
if value == cls.__members__[member].value.name:
131-
return cls.__members__[member]
132-
133-
raise NotImplementedError(f"The defined value {value} doesn't match a RelationshipMatch")
134102

135-
136-
class ValueMatch(Enum):
103+
class ValueMatch(DropdownEnum):
137104
VALUE = DropdownChoice(
138105
name="value",
139106
label="Value",
@@ -153,18 +120,6 @@ class ValueMatch(Enum):
153120
color="#e5e7eb",
154121
)
155122

156-
@classmethod
157-
def available_types(cls) -> list[DropdownChoice]:
158-
return [cls.__members__[member].value for member in list(cls.__members__)]
159-
160-
@classmethod
161-
def from_value(cls, value: str) -> ValueMatch:
162-
for member in cls.__members__:
163-
if value == cls.__members__[member].value.name:
164-
return cls.__members__[member]
165-
166-
raise NotImplementedError(f"The defined value {value} doesn't match a ValueMatch")
167-
168123

169124
NODES_THAT_TRIGGER_ACTION_RULES_SETUP = [
170125
InfrahubKind.GROUPACTION,

0 commit comments

Comments
 (0)