Source code for templatest.templates

"""
templatest.templates
====================

Registration and usage of template subclasses.
"""

import typing as _t

from ._abc import BaseTemplate as _BaseTemplate
from ._objects import Registered as _Registered
from ._objects import Template as _Template
from .exceptions import NameConflictError as _NameConflictError

#: Instantiated :class:`templatest.Registered` object for accessing
#: :class:`templatest.Template` properties
#:
#: Populated through registering :class:`templatest.BaseTemplate`
#: subclasses with :func:`register`.
registered = _Registered()


[docs] def register(base_template: _t.Type[_BaseTemplate]) -> _t.Type[_BaseTemplate]: """Register :class:`templatest.BaseTemplate` subclasses. Decorate subclass definition to register. Registered subclasses of :class:`templatest.BaseTemplate` can be accessed through :attr:`registered`. :param base_template: :class:`templatest.BaseTemplate` object. :return: :class:`templatest.BaseTemplate` object. """ inst = base_template() for template in registered: if inst.name == template.name: raise _NameConflictError(inst, inst.name) registered.append(_Template(inst.name, inst.template, inst.expected)) return base_template