Handles encoding the given `content`, `data`, `files`, and `json`, returning a two-tuple of (<headers>, <stream>).
(
content: RequestContent | None = None,
data: RequestData | None = None,
files: RequestFiles | None = None,
json: Any | None = None,
boundary: bytes | None = None,
)
| 184 | |
| 185 | |
| 186 | def encode_request( |
| 187 | content: RequestContent | None = None, |
| 188 | data: RequestData | None = None, |
| 189 | files: RequestFiles | None = None, |
| 190 | json: Any | None = None, |
| 191 | boundary: bytes | None = None, |
| 192 | ) -> tuple[dict[str, str], SyncByteStream | AsyncByteStream]: |
| 193 | class="st">""" |
| 194 | Handles encoding the given `content`, `data`, `files`, and `json`, |
| 195 | returning a two-tuple of (<headers>, <stream>). |
| 196 | class="st">""" |
| 197 | if data is not None and not isinstance(data, Mapping): |
| 198 | class="cm"># We prefer to separate `content=<bytes|str|byte iterator|bytes aiterator>` |
| 199 | class="cm"># for raw request content, and `data=<form data>` for url encoded or |
| 200 | class="cm"># multipart form content. |
| 201 | class="cm"># |
| 202 | class="cm"># However for compat with requests, we *do* still support |
| 203 | class="cm"># `data=<bytes...>` usages. We deal with that case here, treating it |
| 204 | class="cm"># as if `content=<...>` had been supplied instead. |
| 205 | message = class="st">"Use &class="cm">#x27;content=<...>' to upload raw bytes/text content." |
| 206 | warnings.warn(message, DeprecationWarning, stacklevel=2) |
| 207 | return encode_content(data) |
| 208 | |
| 209 | if content is not None: |
| 210 | return encode_content(content) |
| 211 | elif files: |
| 212 | return encode_multipart_data(data or {}, files, boundary) |
| 213 | elif data: |
| 214 | return encode_urlencoded_data(data) |
| 215 | elif json is not None: |
| 216 | return encode_json(json) |
| 217 | |
| 218 | return {}, ByteStream(bclass="st">"") |
| 219 | |
| 220 | |
| 221 | def encode_response( |
no test coverage detected