Source code for jivago.wsgi.request.request_factory

import re

from jivago.lang.stream import Stream
from jivago.wsgi.request.headers import Headers
from jivago.wsgi.request.request import Request
from jivago.wsgi.request.streaming_request_body import StreamingRequestBody


[docs] class RequestFactory(object):
[docs] def build_request(self, env: dict) -> Request: """Builds the Jivago request object from the WSGI environment dictionary.""" raw_headers = Stream(env.items()).filter(lambda key, value: key.startswith("HTTP_")).map( lambda key, value: (re.sub("^HTTP_", "", key).title().replace("_", "-"), value)).toDict() request_size = int(env.get('CONTENT_LENGTH')) if 'CONTENT_LENGTH' in env else 0 if 'CONTENT_TYPE' in env: raw_headers['Content-Type'] = env['CONTENT_TYPE'] if raw_headers.get("Transfer-Encoding") == "chunked": body = StreamingRequestBody(env['wsgi.input']) else: body = env['wsgi.input'].read(request_size) return Request(env['REQUEST_METHOD'], env['PATH_INFO'], Headers(raw_headers), env['QUERY_STRING'], body)