Source code for minos.networks.decorators.definitions.abc

from __future__ import (
    annotations,
)

from abc import (
    ABC,
    abstractmethod,
)
from collections.abc import (
    Iterable,
)
from typing import (
    Final,
    Union,
)

from ..callables import (
    Handler,
    HandlerMeta,
    HandlerWrapper,
)
from .kinds import (
    EnrouteDecoratorKind,
)


[docs]class EnrouteDecorator(ABC): """Base Decorator class.""" # noinspection PyFinal KIND: Final[EnrouteDecoratorKind]
[docs] def __init__(self, **kwargs): self.kwargs = kwargs
def __call__(self, func: Union[Handler, HandlerWrapper]) -> HandlerWrapper: if isinstance(func, HandlerWrapper): meta = func.meta else: meta = HandlerMeta(func) meta.add_decorator(self) return meta.wrapper def __repr__(self): args = ", ".join(map(repr, self)) return f"{type(self).__name__}({args})" def __eq__(self, other: EnrouteDecorator) -> bool: return type(self) == type(other) and tuple(self) == tuple(other) def __hash__(self) -> int: return hash(tuple(self)) @abstractmethod def __iter__(self) -> Iterable: raise NotImplementedError @property def pre_fn_name(self) -> str: """Get the pre execution function name. :return: A string value containing the function name. """ return self.KIND.pre_fn_name @property def post_fn_name(self) -> str: """Get the post execution function name. :return: A string value containing the function name. """ return self.KIND.post_fn_name