1212from stix2 .utils import NOW
1313
1414
15- class StixCyberObservableTypes (Enum ):
15+ class CaseInsensitiveMixin :
16+ """Mixin providing case-insensitive value checking for Enum classes."""
17+ _lower_values_cache = None
18+
19+ @classmethod
20+ def _get_lower_values (cls ):
21+ if cls ._lower_values_cache is None :
22+ cls ._lower_values_cache = {v .lower () for v in cls ._value2member_map_ }
23+ return cls ._lower_values_cache
24+
25+ @classmethod
26+ def has_value (cls , value ):
27+ return value .lower () in cls ._get_lower_values ()
28+
29+
30+ class StixCyberObservableTypes (CaseInsensitiveMixin , Enum ):
1631 AUTONOMOUS_SYSTEM = "Autonomous-System"
1732 DIRECTORY = "Directory"
1833 DOMAIN_NAME = "Domain-Name"
@@ -47,74 +62,44 @@ class StixCyberObservableTypes(Enum):
4762 SIMPLE_OBSERVABLE = "Simple-Observable"
4863 PERSONA = "Persona"
4964
50- @classmethod
51- def has_value (cls , value ):
52- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
53- return value .lower () in lower_attr
5465
55-
56- class IdentityTypes (Enum ):
66+ class IdentityTypes (CaseInsensitiveMixin , Enum ):
5767 SECTOR = "Sector"
5868 ORGANIZATION = "Organization"
5969 INDIVIDUAL = "Individual"
6070 SYSTEM = "System"
6171
62- @classmethod
63- def has_value (cls , value ):
64- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
65- return value .lower () in lower_attr
66-
6772
68- class ThreatActorTypes (Enum ):
73+ class ThreatActorTypes (CaseInsensitiveMixin , Enum ):
6974 THREAT_ACTOR_GROUP = "Threat-Actor-Group"
7075 THREAT_ACTOR_INDIVIDUAL = "Threat-Actor-Individual"
7176
72- @classmethod
73- def has_value (cls , value ):
74- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
75- return value .lower () in lower_attr
76-
7777
78- class LocationTypes (Enum ):
78+ class LocationTypes (CaseInsensitiveMixin , Enum ):
7979 REGION = "Region"
8080 COUNTRY = "Country"
8181 ADMINISTRATIVE_AREA = "Administrative-Area"
8282 CITY = "City"
8383 POSITION = "Position"
8484
85- @classmethod
86- def has_value (cls , value ):
87- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
88- return value .lower () in lower_attr
8985
90-
91- class ContainerTypes (Enum ):
86+ class ContainerTypes (CaseInsensitiveMixin , Enum ):
9287 NOTE = "Note"
9388 OBSERVED_DATA = "Observed-Data"
9489 OPINION = "Opinion"
9590 REPORT = "Report"
9691 GROUPING = "Grouping"
9792 CASE = "Case"
9893
99- @classmethod
100- def has_value (cls , value ):
101- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
102- return value .lower () in lower_attr
103-
10494
105- class StixMetaTypes (Enum ):
95+ class StixMetaTypes (CaseInsensitiveMixin , Enum ):
10696 MARKING_DEFINITION = "Marking-Definition"
10797 LABEL = "Label"
10898 EXTERNAL_REFERENCE = "External-Reference"
10999 KILL_CHAIN_PHASE = "Kill-Chain-Phase"
110100
111- @classmethod
112- def has_value (cls , value ):
113- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
114- return value .lower () in lower_attr
115-
116101
117- class MultipleRefRelationship (Enum ):
102+ class MultipleRefRelationship (CaseInsensitiveMixin , Enum ):
118103 OPERATING_SYSTEM = "operating-system"
119104 SAMPLE = "sample"
120105 CONTAINS = "contains"
@@ -132,11 +117,6 @@ class MultipleRefRelationship(Enum):
132117 INSTALLED_SOFTWARE = "installed-software"
133118 RELATION_ANALYSIS_SCO = "analysis-sco"
134119
135- @classmethod
136- def has_value (cls , value ):
137- lower_attr = list (map (lambda x : x .lower (), cls ._value2member_map_ ))
138- return value .lower () in lower_attr
139-
140120
141121# Custom objects
142122
0 commit comments