Source code for pyqt_reactive.forms.widget_creation_registry

"""
Functional widget creation registry for OpenHCS UI frameworks.

Provides extensible type-to-widget dispatch using simple dicts and functions,
eliminating class-based abstractions while maintaining clean extensibility.
"""

from typing import Type, get_origin, get_args, Union
from enum import Enum


[docs] def resolve_optional(param_type: Type) -> Type: """Resolve Optional[T] to T.""" if get_origin(param_type) is Union: args = get_args(param_type) if len(args) == 2 and type(None) in args: return next(arg for arg in args if arg is not type(None)) return param_type
[docs] def is_enum(param_type: Type) -> bool: """Check if type is an Enum.""" return isinstance(param_type, type) and issubclass(param_type, Enum)
[docs] def is_list_of_enums(param_type: Type) -> bool: """Check if type is List[Enum].""" return (get_origin(param_type) is list and get_args(param_type) and is_enum(get_args(param_type)[0]))
[docs] def get_enum_from_list(param_type: Type) -> Type: """Extract enum type from List[Enum].""" return get_args(param_type)[0]
# Registry factory functions - return actual widget creators
[docs] def create_textual_registry(): """Return Textual widget creator function.""" return create_textual_widget
[docs] def create_pyqt6_registry(): """Return PyQt6 widget creator function.""" try: from pyqt_reactive.forms.widget_strategies import MagicGuiWidgetFactory factory = MagicGuiWidgetFactory() return factory.create_widget except ImportError: def fallback_creator(*args, **kwargs): raise ImportError("PyQt6 not available - install with pip install 'pyqt-reactor[gui]'") return fallback_creator