a
    Aù’iT	  ã                   @  sÀ   d dl mZ d dlZd dlZd dlZd dlZd dlmZ ddlm	Z	m
Z
 e d¡d Zejejeee	f e
f  Zejeejee	f f Zdd	œd
d„Zdddœdd„Zdddddœdd„ZdS )é    )ÚannotationsN)ÚBytesIOé   )Ú_TYPE_FIELD_VALUE_TUPLEÚRequestFieldzutf-8é   Ústr)Úreturnc                   C  s   t  t d¡¡ ¡ S )zN
    Our embarrassingly-simple replacement for mimetools.choose_boundary.
    é   )ÚbinasciiÚhexlifyÚosÚurandomÚdecode© r   r   úM/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/urllib3/filepost.pyÚchoose_boundary   s    r   Ú_TYPE_FIELDSztyping.Iterable[RequestField])Úfieldsr	   c                 c  sF   t | tjƒr|  ¡ }n| }|D ]"}t |tƒr4|V  qtj|Ž V  qdS )z†
    Iterate over fields.

    Supports list of (k, v) tuples and dicts, and lists of
    :class:`~urllib3.fields.RequestField`.

    N)Ú
isinstanceÚtypingÚMappingÚitemsr   Úfrom_tuples)r   ÚiterableÚfieldr   r   r   Úiter_field_objects   s    


r   z
str | Noneztuple[bytes, str])r   Úboundaryr	   c                 C  sÀ   t ƒ }|du rtƒ }t| ƒD ]t}| d|› d� d¡¡ t|ƒ | ¡ ¡ |j}t|t	ƒrbt
|ƒ}t|t
ƒr|t|ƒ |¡ n
| |¡ | d¡ q| d|› d� d¡¡ d|› �}| ¡ |fS )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
zlatin-1s   
z--
zmultipart/form-data; boundary=)r   r   r   ÚwriteÚencodeÚwriterÚrender_headersÚdatar   Ú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    ÚSequenceÚUnionÚtupler   Z_TYPE_FIELDS_SEQUENCEr   r   r   r   r'   r   r   r   r   Ú<module>   s&   ÿÿÿ ÿ