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

  1. Advanced Registration - Conditional registration - Registration with metadata - Registration hooks

  2. Registry Events - Event subscription - Event handling - Custom event triggers

  3. Registry Extensions - Custom registry types - Registry inheritance - Registry composition

  4. Performance Optimization - Caching strategies - Lazy loading - Bulk operations