Исходный код EJIO.ctk_extender.window.registry

## /ctk_extender/window/registry.py

from EJIO.utils import Registry
from EJIO.err import RegistryKeyError, RegistryTypeError
from .base import Window
from .err import IncorrectWindowTypeError, WindowAlreadyRegisteredError, WindowNotFoundError

__all__ = [
    'WindowRegistry',
    'register_window',
]


[документация] class WindowRegistry[T: Window](Registry[Window]): """ Статический реестр классов окон приложения. """ __slots__ = ()
[документация] @classmethod def get(cls, key: str) -> type[T]: try: return super().get(key) except RegistryKeyError: raise WindowNotFoundError(f"Window {key} is not registered.")
[документация] def register_window(window_cls: type[Window]) -> type[Window]: """ Декоратор для автоматической регистрации окон в WindowRegistry. """ config = getattr(window_cls, "config", None) if config is None or config.name == "default_window": raise ValueError( f"Cannot register class '{window_cls.__name__}': " f"Need to declare static filed of class 'config = WindowConfig(name=\"...\")'." ) try: WindowRegistry.register(config.name, window_cls) except RegistryTypeError: raise IncorrectWindowTypeError(f"Class {window_cls.__name__} is not a valid window type.") except RegistryKeyError: raise WindowAlreadyRegisteredError(f"Window {config.name} is already registered.") return window_cls