Source code for wheezy.routing.plain

""" ``plain`` module.
"""

import re

RE_PLAIN_ROUTE = re.compile(r"^[\w\./-]+$")


[docs]def try_build_plain_route(pattern, finishing=True, kwargs=None, name=None): """If the plain route regular expression match the pattern than create a PlainRoute instance. """ if isinstance(pattern, PlainRoute): return pattern if pattern == "" or RE_PLAIN_ROUTE.match(pattern): return PlainRoute(pattern, finishing, kwargs, name) return None
[docs]class PlainRoute(object): """Route based on string equalty operation.""" __slots__ = ("pattern", "kwargs", "matched", "match", "exact_matches") def __init__(self, pattern, finishing, kwargs=None, name=None): """Initializes the route by given ``pattern``. If ``finishing`` is True than choose ``equals_math`` strategy """ kwargs = kwargs and kwargs.copy() or {} self.pattern = pattern self.matched = len(pattern) # Choose match strategy if finishing: if name: kwargs["route_name"] = name self.match = self.equals_match else: self.match = self.startswith_match self.exact_matches = ((pattern, kwargs),) self.kwargs = kwargs
[docs] def equals_match(self, path): """If the ``path`` exactly equals pattern string, return end index of substring matched and a copy of ``self.kwargs``. """ return ( path == self.pattern and (self.matched, self.kwargs) or (-1, None) )
[docs] def startswith_match(self, path): """If the ``path`` starts with pattern string, return the end of substring matched and ``self.kwargs``. """ return ( path.startswith(self.pattern) and (self.matched, self.kwargs) or (-1, None) )
[docs] def path(self, values=None): """Build the path for given route by simply returning the pattern used during initialization. """ return self.pattern