stouputils.collections.registry module#
- class Registry[source]#
Bases:
dict[str,T],GenericDictionary that registers callables by decorator.
- register(function: T, /) T[source]#
- register(
- *,
- name: str | None = None,
Register a callable by its own name or a custom name.
Python applies stacked decorators from bottom to top. Put
registeroutermost when the registry should keep the fully decorated callable.>>> FUNCS = Registry[Callable[[int], int]]() >>> from stouputils import measure_time >>> @FUNCS.register ... @measure_time(printer=lambda *args: None) ... def measured(value: int) -> int: ... return value * 5 >>> FUNCS["measured"] is measured True >>> @FUNCS.register ... def double(value: int) -> int: ... return value * 2 >>> @FUNCS.register() ... def triple(value: int) -> int: ... return value * 3 >>> @FUNCS.register(name="quadruple") ... def multiply(value: int) -> int: ... return value * 4 >>> sorted(FUNCS), FUNCS["double"](2), FUNCS["quadruple"](2) (['double', 'measured', 'quadruple', 'triple'], 4, 8) >>> @FUNCS.register(name="double") ... def another(value: int) -> int: ... return value Traceback (most recent call last): ... KeyError: "The name 'double' is already registered."