Source code for jivago.wsgi.routing.table.route_node

from typing import List

from jivago.wsgi.methods import HttpMethod
from jivago.wsgi.routing.exception.unknown_path_exception import UnknownPathException
from jivago.wsgi.routing.route_registration import RouteRegistration

PATH_PARAMETER = object()


[docs] class RouteNode(object): def __init__(self): self.children = {} self.invocators = {}
[docs] def register_child(self, path: List[str], http_primitive: HttpMethod, route_registration: RouteRegistration): if len(path) == 0: if http_primitive in self.invocators: self.invocators[http_primitive].append(route_registration) else: self.invocators[http_primitive] = [route_registration] else: next_path_element = PATH_PARAMETER if path[0].startswith("{") and path[0].endswith('}') else path[0] if next_path_element not in self.children: self.children[next_path_element] = RouteNode() self.children[next_path_element].register_child(path[1::], http_primitive, route_registration)
[docs] def explore(self, path: List[str]) -> "RouteNode": if len(path) == 0: return self next_path_element = path[0] if next_path_element in self.children: return self.children[next_path_element].explore(path[1::]) elif PATH_PARAMETER in self.children: return self.children[PATH_PARAMETER].explore(path[1::]) raise UnknownPathException()