3
/v_ø  ã               @   s€   d dl mZ d dlZd dlmZ d dlmZ d dlZd dlmZ ddl	m
Z
 ejdƒd	 Zd
d„ Zdd„ Zdd„ Zddd„ZdS )é    )Úabsolute_importN)Úuuid4)ÚBytesIO)Úbé   )ÚRequestFieldzutf-8é   c               C   s   t ƒ jS )zN
    Our embarrassingly-simple replacement for mimetools.choose_boundary.
    )r   Úhex© r
   r
   ú2/usr/lib/python3/dist-packages/urllib3/filepost.pyÚchoose_boundary   s    r   c             c   sN   t | tƒrtj| ƒ}nt| ƒ}x*|D ]"}t |tƒr:|V  q$tj|Ž V  q$W dS )z†
    Iterate over fields.

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

    N)Ú
isinstanceÚdictÚsixÚ	iteritemsÚiterr   Zfrom_tuples)ÚfieldsÚiÚfieldr
   r
   r   Úiter_field_objects   s    


r   c             C   s,   t | tƒrdd„ tj| ƒ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   s    ziter_fields.<locals>.<genexpr>c             s   s   | ]\}}||fV  qd S )Nr
   )r   r   r   r
   r
   r   r   8   s    )r   r   r   r   )r   r
   r
   r   Úiter_fields)   s    
r   c             C   s¼   t ƒ }|dkrtƒ }x|t| ƒD ]p}|jtd| ƒƒ t|ƒj|jƒ ƒ |j}t|t	ƒr^t
|ƒ}t|tjƒrzt|ƒj|ƒ n
|j|ƒ |jdƒ qW |jtd| ƒƒ t
d| ƒ}|jƒ |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   ÚwriterZrender_headersÚdatar   ÚintÚstrr   Z	text_typeÚgetvalue)r   ÚboundaryZbodyr   r   Zcontent_typer
   r
   r   Úencode_multipart_formdata;   s     

r"   )N)Z
__future__r   ÚcodecsZuuidr   Úior   r   r   r   r   Úlookupr   r   r   r   r"   r
   r
   r
   r   Ú<module>   s   