a Æ*Naˆ ã@sˆddlmZddlZddlZddlZddlmZddlmZddl m Z ddl m Z e  d¡d Zd d „Zd d „Zdd„Zddd„ZdS)é)Úabsolute_importN)ÚBytesIOé)Ú RequestField)Úsix)Úbzutf-8écCs$t t d¡¡}tjs | d¡}|S)zN Our embarrassingly-simple replacement for mimetools.choose_boundary. éÚascii)ÚbinasciiÚhexlifyÚosÚurandomrÚPY2Údecode)Úboundary©rúk/private/var/folders/js/6pj4vh5d4zd0k6bxv74qrbhr0000gr/T/pip-target-22xwyzbs/lib/python/urllib3/filepost.pyÚchoose_boundarys rccsJt|tƒrt |¡}nt|ƒ}|D]"}t|tƒr8|Vq"tj|ŽVq"dS)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ÚfieldrrrÚiter_field_objectss   rcCs,t|tƒrdd„t |¡DƒSdd„|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. css|]\}}||fVqdS©Nr©Ú.0ÚkÚvrrrÚ :óziter_fields..css|]\}}||fVqdSrrrrrrr#<r$)rrrr)rrrrÚ iter_fields-s r%cCs¸tƒ}|durtƒ}t|ƒD]p}| td|ƒ¡t|ƒ | ¡¡|j}t|t ƒr\t |ƒ}t|t j ƒrxt|ƒ |¡n | |¡| d¡q| td|ƒ¡t d|ƒ}|  ¡|fS)aQ 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:`urllib3.filepost.choose_boundary`. Nz--%s s z--%s-- z multipart/form-data; boundary=%s)rrrÚwriterÚwriterÚrender_headersÚdatarÚintÚstrrÚ text_typeÚgetvalue)rrÚbodyrr)Ú content_typerrrÚencode_multipart_formdata?s       r0)N)Ú __future__rr Úcodecsr ÚiorrrÚpackagesrZ packages.sixrÚlookupr'rrr%r0rrrrÚs