Advanced Enum Registry Features
This example demonstrates advanced features of the enum registry module.
Example Code
Advanced Enum Registry Features Example
1"""
2Examples of advanced features in EnumRegistry.
3"""
4
5from enum import Enum
6
7from true.enum_registry import EnumRegistry, EnumMetadata, auto
8
9
10# Define example enums
11class Status(Enum):
12 PENDING = "pending"
13 ACTIVE = "active"
14 INACTIVE = "inactive"
15 DELETED = "deleted"
16
17
18class UserRole(Enum):
19 ADMIN = auto()
20 MODERATOR = auto()
21 USER = auto()
22 GUEST = auto()
23
24
25class Priority(Enum):
26 LOW = 1
27 MEDIUM = 2
28 HIGH = 3
29 CRITICAL = 4
30
31
32def demo_decorators():
33 """Demonstrate decorator usage for enum registration."""
34 print("=== Decorator Usage ===")
35
36 registry = EnumRegistry()
37
38 # Register using decorator
39 @registry.dregister
40 class TempStatus(Enum):
41 HOT = "hot"
42 WARM = "warm"
43 COLD = "cold"
44
45 print(registry)
46 #
47 print("Registry after decorator registration:")
48 for enum_class in registry.enum_classes:
49 print(f"- {enum_class.__name__}")
50 #
51 # Deregister using decorator
52 registry.deregister([TempStatus])
53 #
54 print("\nRegistry after decorator deregistration:")
55 for enum_class in registry.enum_classes:
56 print(f"- {enum_class.__name__}")
57
58
59#
60def demo_serialization():
61 """Demonstrate serialization features."""
62 print("\n=== Serialization ===")
63 #
64 # Create registry with metadata
65 metadata = EnumMetadata(
66 tags={"core", "valid"},
67 category="active"
68 )
69 #
70 registry = EnumRegistry({Status: metadata})
71 print(registry)
72 #
73 # # Convert to dictionary
74 print("Registry as dictionary:")
75 dict_form = registry.to_dict()
76 for key, value in dict_form.items():
77 if key != "metadata": # Skip metadata for brevity
78 print(f"{key}: {value}")
79 #
80 # Debug format
81 print("\nDebug representation:")
82 print(registry.format_debug())
83
84
85#
86def demo_advanced_filtering():
87 """Demonstrate advanced filtering and analysis."""
88 print("\n=== Advanced Filtering ===")
89 #
90 registry = EnumRegistry([Status, UserRole, Priority], duplication=True)
91 #
92 # # Filter by metadata
93
94 registry.set_member_metadata(
95 Status.ACTIVE,
96 tags={"core", "valid"},
97 category="active"
98 )
99 registry.set_member_metadata(
100 Status.INACTIVE,
101 tags={"core", "invalid"},
102 category="inactive"
103 )
104 #
105 print("Members with 'core' tag:")
106 core_members = registry.filter.by_metadata(tags={"core"})
107 print(core_members)
108 for member, metadata in core_members:
109 print(f"- {member} = {metadata}")
110 #
111 # Value range filtering
112 print("\nPriorities in range 2-3:")
113 mid_priorities = registry.filter.within_values_range(start=2, end=3, skip_non_numeric=True)
114 for member, metadata in mid_priorities:
115 print(f"- {member} = {metadata}")
116 #
117 # Most/least common values
118 print("\nMost common values:")
119 most_common = registry.values.most_common(4)
120 for value, count in most_common:
121 print(f"Value '{value}' appears {count} times")
122
123
124#
125def demo_conflict_detection():
126 """Demonstrate name conflict detection."""
127 print("\n=== Conflict Detection ===")
128
129 #
130 # Create enums with conflicting names
131 class StatusA(Enum):
132 ACTIVE = "active"
133 INACTIVE = "inactive"
134
135 #
136 class StatusB(Enum):
137 ACTIVE = 1 # Conflicting name
138 PENDING = 2
139
140 #
141 registry = EnumRegistry([StatusA, StatusB], duplication=True)
142 #
143 print("Name conflicts:")
144 conflicts = registry.names.conflicts_with()
145 for name, classes in conflicts.items():
146 print(f"\nConflict for name '{name}':")
147 for cls in classes:
148 print(f"- Defined in {cls.__name__} with value: {cls[name].value}")
149
150
151if __name__ == "__main__":
152 demo_decorators()
153 demo_serialization()
154 demo_advanced_filtering()
155 demo_conflict_detection()
Key Features
Advanced Registration - Conditional registration - Registration with metadata - Registration hooks
Registry Events - Event subscription - Event handling - Custom event triggers
Registry Extensions - Custom registry types - Registry inheritance - Registry composition
Performance Optimization - Caching strategies - Lazy loading - Bulk operations