Skip to content

request.py

Provides HTTP request representation.

Request dataclass

Represents an HTTP request.

Parameters:

Name Type Description Default
method str

Request method (GET, POST, etc.).

required
endpoint str

Request endpoint.

required
query_params CaseInsensitiveDict

Case-insensitive dict of query parameters.

required
headers CaseInsensitiveDict

Case-insensitive dict of headers.

required
body bytes

Request body.

required
Source code in jetweb/http/request.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@dataclass
class Request:
    """
    Represents an HTTP request.

    :param method: Request method (GET, POST, etc.).
    :param endpoint: Request endpoint.
    :param query_params: Case-insensitive dict of query parameters.
    :param headers: Case-insensitive dict of headers.
    :param body: Request body.
    """
    method: str
    endpoint: str
    query_params: CaseInsensitiveDict
    headers: CaseInsensitiveDict
    body: bytes

    @property
    def text(self) -> str:
        """
        Parse body as text.

        :returns: Request body decoded as text.
        """
        return self.body.decode()

    @property
    def json(self) -> dict:
        """
        Parse body as JSON.

        :returns: Request body loaded as JSON.
        :raises ValueError: If content-type is not application/json.
        """
        if self.headers["content-type"] != "application/json":
            raise ValueError("Content type must be application/json")

        return loads(self.body)

    @classmethod
    def from_environ(cls, environ: dict) -> Request:
        """
        Construct a Request object from WSGI environ.

        :param environ: WSGI environ.
        :returns: Request object.
        """
        return cls(
            method=environ["REQUEST_METHOD"],
            endpoint=environ["PATH_INFO"],
            query_params=parse_query_params(environ),
            headers=parse_headers(environ),
            body=parse_body(environ),
        )

json property

Parse body as JSON.

Returns:

Type Description
dict

Request body loaded as JSON.

Raises:

Type Description
ValueError

If content-type is not application/json.

text property

Parse body as text.

Returns:

Type Description
str

Request body decoded as text.

from_environ(environ) classmethod

Construct a Request object from WSGI environ.

Parameters:

Name Type Description Default
environ dict

WSGI environ.

required

Returns:

Type Description
Request

Request object.

Source code in jetweb/http/request.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@classmethod
def from_environ(cls, environ: dict) -> Request:
    """
    Construct a Request object from WSGI environ.

    :param environ: WSGI environ.
    :returns: Request object.
    """
    return cls(
        method=environ["REQUEST_METHOD"],
        endpoint=environ["PATH_INFO"],
        query_params=parse_query_params(environ),
        headers=parse_headers(environ),
        body=parse_body(environ),
    )