Source code for jivago.wsgi.routing.router

import logging

from jivago.inject.service_locator import ServiceLocator
from jivago.wsgi.filter.filter_chain_factory import FilterChainFactory
from jivago.wsgi.request.http_status_code_resolver import HttpStatusCodeResolver
from jivago.wsgi.request.request_factory import RequestFactory
from jivago.wsgi.request.response import Response
from jivago.wsgi.request.streaming_response_body import StreamingResponseBody


[docs] class Router(object): LOGGER = logging.getLogger("Jivago").getChild("Router") def __init__(self, service_locator: ServiceLocator, request_factory: RequestFactory, filter_chain_factory: FilterChainFactory): self.filter_chain_factory = filter_chain_factory self.request_factory = request_factory self.serviceLocator = service_locator self.http_status_resolver = HttpStatusCodeResolver()
[docs] def route(self, env, start_response): request = self.request_factory.build_request(env) filter_chain = self.filter_chain_factory.create_filter_chain(request) response = Response.empty() filter_chain.doFilter(request, response) start_response(self.http_status_resolver.get_status_code(response.status), [x for x in response.headers.items()]) if isinstance(response.body, str): return [response.body.encode('utf-8')] elif isinstance(response.body, StreamingResponseBody): return response.body.iterable else: return [response.body]