11from __future__ import annotations
22
33from enum import Enum
4+ from typing import Self
45
56from infrahub .core .constants import InfrahubKind
67from 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
169124NODES_THAT_TRIGGER_ACTION_RULES_SETUP = [
170125 InfrahubKind .GROUPACTION ,
0 commit comments