(
self,
method: str,
url: URL | str,
*,
params: QueryParamTypes | None = None,
headers: HeaderTypes | None = None,
cookies: CookieTypes | None = None,
content: RequestContent | None = None,
data: RequestData | None = None,
files: RequestFiles | None = None,
json: typing.Any | None = None,
stream: SyncByteStream | AsyncByteStream | None = None,
extensions: RequestExtensions | None = None,
)
| 381 | |
| 382 | class Request: |
| 383 | def __init__( |
| 384 | self, |
| 385 | method: str, |
| 386 | url: URL | str, |
| 387 | *, |
| 388 | params: QueryParamTypes | None = None, |
| 389 | headers: HeaderTypes | None = None, |
| 390 | cookies: CookieTypes | None = None, |
| 391 | content: RequestContent | None = None, |
| 392 | data: RequestData | None = None, |
| 393 | files: RequestFiles | None = None, |
| 394 | json: typing.Any | None = None, |
| 395 | stream: SyncByteStream | AsyncByteStream | None = None, |
| 396 | extensions: RequestExtensions | None = None, |
| 397 | ) -> None: |
| 398 | self.method = method.upper() |
| 399 | self.url = URL(url) if params is None else URL(url, params=params) |
| 400 | self.headers = Headers(headers) |
| 401 | self.extensions = {} if extensions is None else dict(extensions) |
| 402 | |
| 403 | if cookies: |
| 404 | Cookies(cookies).set_cookie_header(self) |
| 405 | |
| 406 | if stream is None: |
| 407 | content_type: str | None = self.headers.get(class="st">"content-type") |
| 408 | headers, stream = encode_request( |
| 409 | content=content, |
| 410 | data=data, |
| 411 | files=files, |
| 412 | json=json, |
| 413 | boundary=get_multipart_boundary_from_content_type( |
| 414 | content_type=content_type.encode(self.headers.encoding) |
| 415 | if content_type |
| 416 | else None |
| 417 | ), |
| 418 | ) |
| 419 | self._prepare(headers) |
| 420 | self.stream = stream |
| 421 | class="cm"># Load the request body, except for streaming content. |
| 422 | if isinstance(stream, ByteStream): |
| 423 | self.read() |
| 424 | else: |
| 425 | class="cm"># There's an important distinction between `Request(content=...)`, |
| 426 | class="cm"># and `Request(stream=...)`. |
| 427 | class="cm"># |
| 428 | class="cm"># Using `content=...` implies automatically populated `Host` and content |
| 429 | class="cm"># headers, of either `Content-Length: ...` or `Transfer-Encoding: chunked`. |
| 430 | class="cm"># |
| 431 | class="cm"># Using `stream=...` will not automatically include *any* |
| 432 | class="cm"># auto-populated headers. |
| 433 | class="cm"># |
| 434 | class="cm"># As an end-user you donclass="st">'t really need `stream=...`. It's only |
| 435 | class="cm"># useful when: |
| 436 | class="cm"># |
| 437 | class="cm"># * Preserving the request stream when copying requests, eg for redirects. |
| 438 | class="cm"># * Creating request instances on the *server-side* of the transport API. |
| 439 | self.stream = stream |
| 440 |
nothing calls this directly
no test coverage detected