Source code for templatest._objects

"""
templatest._objects
===================
"""

from __future__ import annotations

import typing as _t

from ._collections import MutableSequence as _MutableSequence


[docs] class Template(_t.NamedTuple): """Contains registered :class:`BaseTemplate` properties.""" #: The name of the inherited class, parsed for test ID. name: str #: Template to test. template: str #: Expected result. expected: str
[docs] class Registered(_MutableSequence[Template]): """Mutable sequence of :class:`Template` named tuples. :param args: Instantiate with any number of :class:`Template` objects. """ def __init__(self, *args: Template) -> None: super().__init__() self.extend(args)
[docs] def filtergroup(self, *prefix: str) -> Registered: """Get new object excluding templates sharing a prefix. :param prefix: Common prefix(s) to registered subclasses. :return: New :class:`Registered` object containing :class:`Template` objects that do not have the provided prefix in their names. """ return Registered( *(x for x in self if not any(x.name.startswith(y) for y in prefix)) )
[docs] def getgroup(self, *prefix: str) -> Registered: """Get new object containing templates sharing a prefix. :param prefix: Common prefix(s) to registered subclasses. :return: New :class:`Registered` object containing :class:`Template` objects with common prefix to their names. """ return Registered( *(x for y in prefix for x in self if x.name.startswith(y)) )
[docs] def getids(self) -> _t.Tuple[str, ...]: """Returns a tuple of all the names of the classes contained. :return: A tuple of names of the classes within this sequence. """ return tuple(i.name for i in self)
[docs] def getbyname(self, name: str) -> Template | None: """Get a template by name if it exists. :param name: Name assigned to template. :return: :class:`Template` object. """ return next((i for i in self if i.name == name), None)
[docs] def getindex(self, name: str) -> int | None: """Get the index of a template by name if it exists. :param name: Name assigned to template. :return: Index of the template if it exists, else None. """ template = self.getbyname(name) return template if template is None else self.index(template)