Dynamic Enums
This example demonstrates how to work with dynamic enums in the True-Core enums and toolkits module.
Example Code
Dynamic Enums Example
1"""
2Examples of dynamic enum creation and manipulation.
3"""
4
5from true.enums_toolkits import DynamicEnum
6
7
8def demo_basic_dynamic_enum():
9 """Demonstrate basic DynamicEnum creation and usage."""
10 print("=== Basic Dynamic Enum ===")
11
12 # Create dynamic enum with initial members
13 status = DynamicEnum(
14 PENDING="pending",
15 ACTIVE="active",
16 INACTIVE="inactive"
17 )
18
19 print("Initial members:")
20 for member in status:
21 print(f"{member.name}: {member.value}")
22
23 # Add new member
24 print("\nAdding new member 'DELETED'...")
25 status.add_member("DELETED", "deleted")
26
27 print("Updated members:")
28 for member in status:
29 print(f"{member.name}: {member.value}")
30
31 # Remove member
32 print("\nRemoving member 'INACTIVE'...")
33 status.remove_member("INACTIVE")
34
35 print("Final members:")
36 for member in status:
37 print(f"{member.name}: {member.value}")
38
39
40def demo_dynamic_enum_operations():
41 """Demonstrate operations with DynamicEnum."""
42 print("\n=== Dynamic Enum Operations ===")
43
44 # Create enum with numeric values
45 levels = DynamicEnum(
46 LOW=1,
47 MEDIUM=2,
48 HIGH=3
49 )
50
51 print("Available levels:")
52 print(f"Names: {levels.names}")
53 print(f"Values: {levels.values}")
54
55 # Access members
56 print("\nAccessing members:")
57 high = levels["HIGH"]
58 print(f"HIGH level: {high.name} = {high.value}")
59
60 # Check membership
61 print("\nMembership tests:")
62 print(f"'HIGH' in levels: {'HIGH' in levels}")
63 print(f"'CRITICAL' in levels: {'CRITICAL' in levels}")
64
65 # Length
66 print(f"\nTotal members: {len(levels)}")
67
68
69def demo_conversion_from_enum():
70 """Demonstrate converting regular Enum to DynamicEnum."""
71 print("\n=== Converting from Regular Enum ===")
72
73 from enum import Enum
74
75 # Regular enum
76 class Color(Enum):
77 RED = "#FF0000"
78 GREEN = "#00FF00"
79 BLUE = "#0000FF"
80
81 # Convert to dynamic enum
82 dynamic_colors = DynamicEnum.from_enum(Color)
83
84 print("Converted colors:")
85 for member in dynamic_colors:
86 print(f"{member.name}: {member.value}")
87
88 # Add new color
89 print("\nAdding new color...")
90 dynamic_colors.add_member("YELLOW", "#FFFF00")
91
92 print("Updated colors:")
93 for member in dynamic_colors:
94 print(f"{member.name}: {member.value}")
95
96
97def demo_error_handling():
98 """Demonstrate error handling in DynamicEnum."""
99 print("\n=== Error Handling ===")
100
101 numbers = DynamicEnum(ONE=1, TWO=2)
102
103 # Try to add existing member
104 print("Trying to add existing member...")
105 try:
106 numbers.add_member("ONE", 1)
107 except ValueError as e:
108 print(f"Error: {e}")
109
110 # Try to remove non-existent member
111 print("\nTrying to remove non-existent member...")
112 try:
113 numbers.remove_member("THREE")
114 except ValueError as e:
115 print(f"Error: {e}")
116
117 # Try to access non-existent member
118 print("\nTrying to access non-existent member...")
119 try:
120 value = numbers["THREE"]
121 except KeyError as e:
122 print(f"Error: {e}")
123
124
125if __name__ == "__main__":
126 demo_basic_dynamic_enum()
127 demo_dynamic_enum_operations()
128 demo_conversion_from_enum()
129 demo_error_handling()
Key Features
Dynamic Creation - Runtime enum creation - Dynamic value assignment - Type safety
Value Management - Adding new values - Removing values - Value validation
Advanced Features - Value constraints - Custom validation - Event handling