U
f[ @ s d dl mZ d dlZd dlZd dlZd dlZd dlmZ ddlm Z m
Z
edd Zej
ejejee f e
f Zejeejee f f Zdd d
dZdd
dddZdddddddZdS ) )annotationsN)BytesIO )_TYPE_FIELD_VALUE_TUPLERequestFieldzutf-8 str)returnc C s t td S )zN
Our embarrassingly-simple replacement for mimetools.choose_boundary.
)binasciihexlifyosurandomdecode r r A/opt/alt/python38/lib/python3.8/site-packages/urllib3/filepost.pychoose_boundary s r _TYPE_FIELDSztyping.Iterable[RequestField])fieldsr c c sF t | tjr| }n| }|D ]"}t |tr4|V qtj| V qdS )z
Iterate over fields.
Supports list of (k, v) tuples and dicts, and lists of
:class:`~urllib3.fields.RequestField`.
N)
isinstancetypingMappingitemsr from_tuples)r iterablefieldr r r iter_field_objects s
r z
str | Noneztuple[bytes, str])r boundaryr c C s t }|dkrt }t| D ]t}|d| dd t|| |j}t|t rbt
|}t|t
r|t|| n
|| |d q|d| dd d| }| |fS )a
Encode a dictionary of ``fields`` using the multipart/form-data MIME format.
:param fields:
Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`).
Values are processed by :func:`urllib3.fields.RequestField.from_tuples`.
:param boundary:
If not specified, then a random boundary will be generated using
:func:`urllib3.filepost.choose_boundary`.
Nz--z
zlatin-1s
z--
zmultipart/form-data; boundary=)r r r writeencodewriterrender_headersdatar intr getvalue)r r bodyr r" content_typer r r encode_multipart_formdata3 s
r' )N)
__future__r r codecsr
r ior r r r lookupr SequenceUnionTupler Z_TYPE_FIELDS_SEQUENCEr r r r r' r r r r