Source code for phantom.re

"""
Types for representing strings that match a pattern.

::

    class Greeting(Match, pattern=re.compile(r"^(Hi|Hello)")):
        ...

    assert isinstance("Hello Jane!", Greeting)
"""
from typing import Any
from typing import Pattern

from .base import Phantom
from .predicates import re


[docs]class Match(str, Phantom, abstract=True): """ Takes ``pattern: Pattern[str]`` as class argument. Uses the :py:func:`phantom.predicate.re.is_match` predicate. """ def __init_subclass__(cls, pattern: Pattern[str], **kwargs: Any) -> None: super().__init_subclass__(predicate=re.is_match(pattern), **kwargs)
[docs]class FullMatch(str, Phantom, abstract=True): """ Takes ``pattern: Pattern[str]`` as class argument. Uses the :py:func:`phantom.predicate.re.is_full_match` predicate. """ def __init_subclass__(cls, pattern: Pattern[str], **kwargs: Any) -> None: super().__init_subclass__(predicate=re.is_full_match(pattern), **kwargs)