a
    ‘db	  ã                   @   s„   d dl mZ d dlZd dlmZ d dlmZ ddlmZ ddl	m
Z
 ddlmZ e d	¡d
 Zdd„ Zdd„ Zdd„ Zddd„ZdS )é    )Úabsolute_importN)Úuuid4)ÚBytesIOé   )Úsix)Úb)ÚRequestFieldzutf-8é   c                   C   s   t ƒ jS )zN
    Our embarrassingly-simple replacement for mimetools.choose_boundary.
    )r   Úhex© r   r   úa/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/urllib3/filepost.pyÚchoose_boundary   s    r   c                 c   sJ   t | tƒrt | ¡}nt| ƒ}|D ]"}t |tƒr8|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Údictr   Ú	iteritemsÚiterr   Úfrom_tuples)ÚfieldsÚiÚfieldr   r   r   Úiter_field_objects   s    

r   c                 C   s,   t | tƒrdd„ t | ¡D ƒS dd„ | D ƒS )a-  
    .. deprecated:: 1.6

    Iterate over fields.

    The addition of :class:`~urllib3.fields.RequestField` makes this function
    obsolete. Instead, use :func:`iter_field_objects`, which returns
    :class:`~urllib3.fields.RequestField` objects.

    Supports list of (k, v) tuples and dicts.
    c                 s   s   | ]\}}||fV  qd S ©Nr   ©Ú.0ÚkÚvr   r   r   Ú	<genexpr>6   ó    ziter_fields.<locals>.<genexpr>c                 s   s   | ]\}}||fV  qd S r   r   r   r   r   r   r   8   r   )r   r   r   r   )r   r   r   r   Úiter_fields)   s    
r   c                 C   s¸   t ƒ }|du rtƒ }t| ƒD ]p}| td| ƒ¡ t|ƒ | ¡ ¡ |j}t|t	ƒr\t
|ƒ}t|tjƒrxt|ƒ |¡ n
| |¡ | d¡ q| td| ƒ¡ t
d| ƒ}| ¡ |fS )aJ  
    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`).

    :param boundary:
        If not specified, then a random boundary will be generated using
        :func:`mimetools.choose_boundary`.
    Nz--%s
s   
z--%s--
z multipart/form-data; boundary=%s)r   r   r   Úwriter   ÚwriterÚrender_headersÚdatar   ÚintÚstrr   Ú	text_typeÚgetvalue)r   ÚboundaryÚbodyr   r"   Úcontent_typer   r   r   Úencode_multipart_formdata;   s     

r*   )N)Ú
__future__r   ÚcodecsÚuuidr   Úior   Úpackagesr   Zpackages.sixr   r   r   Úlookupr    r   r   r   r*   r   r   r   r   Ú<module>   s   