Исходный код 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