Source code for redditwarp.http.requisition


from __future__ import annotations
from typing import TYPE_CHECKING, Optional, Mapping, MutableMapping, Union
if TYPE_CHECKING:
    from .payload import Payload
    from .types import RequestFiles
    from ..types import JSON_ro

from dataclasses import dataclass

from .payload import make_payload
from .util.case_insensitive_dict import CaseInsensitiveDict


[docs]@dataclass(repr=False, eq=False) class Requisition: """Basically a request object designed to be mutated.""" verb: str url: str params: MutableMapping[str, str] headers: MutableMapping[str, str] payload: Optional[Payload]
[docs]def make_requisition( verb: str, url: str, *, params: Optional[Mapping[str, str]] = None, headers: Optional[Mapping[str, str]] = None, data: Optional[Union[Mapping[str, str], bytes]] = None, json: JSON_ro = None, files: Optional[RequestFiles] = None, payload: Optional[Payload] = None, ) -> Requisition: params = dict(params or {}) headers = CaseInsensitiveDict(headers or {}) payload_args = (data, json, files) if payload is None: payload = make_payload(*payload_args) elif any(i is not None for i in payload_args): raise TypeError("`payload` cannot be used with payload arguments: `data`, `json`, `files`") return Requisition(verb, url, params=params, headers=headers, payload=payload)