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

  1. Dynamic Creation - Runtime enum creation - Dynamic value assignment - Type safety

  2. Value Management - Adding new values - Removing values - Value validation

  3. Advanced Features - Value constraints - Custom validation - Event handling