
Ã|j�  ã               @   sþ   d  d l  m Z d  d l m Z d d l m Z d d l m Z m Z d Z	 e
 d d d	 g ƒ Z d
 Z y5 y d  d l Z Wn e k
 rš d  d l Z Yn XWn e k
 r° Yn Xe d 7Z e ƒ  Z d d d d d d d d „ Z d d „  Z d d „  Z d S)é    )Úabsolute_import)Ú	b64encodeé   )ÚUnrewindableBodyError)ÚbÚinteger_typesz@@@SKIP_HEADER@@@zaccept-encodingÚhostz
user-agentzgzip,deflateNz,brc             C   sÕ   i  } | rO t  | t ƒ r n' t  | t ƒ r? d j | ƒ } n t } | | d <| r_ | | d <|  ro d | d <| r˜ d t t | ƒ ƒ j d ƒ | d <| rÁ d t t | ƒ ƒ j d ƒ | d	 <| rÑ d
 | d <| S)a  
    Shortcuts for generating request headers.

    :param keep_alive:
        If ``True``, adds 'connection: keep-alive' header.

    :param accept_encoding:
        Can be a boolean, list, or string.
        ``True`` translates to 'gzip,deflate'.
        List will get joined by comma.
        String will be used as provided.

    :param user_agent:
        String representing the user-agent you want, such as
        "python-urllib3/0.6"

    :param basic_auth:
        Colon-separated username:password string for 'authorization: basic ...'
        auth header.

    :param proxy_basic_auth:
        Colon-separated username:password string for 'proxy-authorization: basic ...'
        auth header.

    :param disable_cache:
        If ``True``, adds 'cache-control: no-cache' header.

    Example::

        >>> make_headers(keep_alive=True, user_agent="Batman/1.0")
        {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'}
        >>> make_headers(accept_encoding=True)
        {'accept-encoding': 'gzip,deflate'}
    ú,zaccept-encodingz
user-agentz
keep-aliveÚ
connectionzBasic zutf-8Úauthorizationzproxy-authorizationzno-cachezcache-control)Ú
isinstanceÚstrÚlistÚjoinÚACCEPT_ENCODINGr   r   Údecode)Ú
keep_aliveÚaccept_encodingÚ
user_agentÚ
basic_authÚproxy_basic_authÚdisable_cacheÚheaders© r   ú7/tmp/pip-build-1hwfuv5s/urllib3/urllib3/util/request.pyÚmake_headers   s*    *


#
r   c             C   si   | d k	 r t  |  | ƒ nI t |  d d ƒ d k	 re y |  j ƒ  } Wn t t f k
 rd t } Yn X| S)z
    If a position is provided, move file to that point.
    Otherwise, we'll attempt to record a position for future use.
    NÚtell)Úrewind_bodyÚgetattrr   ÚIOErrorÚOSErrorÚ_FAILEDTELL)ÚbodyÚposr   r   r   Úset_file_positione   s    r$   c             C   sš   t  |  d d ƒ } | d k	 re t | t ƒ re y | | ƒ Wq– t t f k
 ra t d ƒ ‚ Yq– Xn1 | t k r€ t d ƒ ‚ n t d t | ƒ ƒ ‚ d S)zæ
    Attempt to rewind body to a certain position.
    Primarily used for request redirects and retries.

    :param body:
        File-like object that supports seek.

    :param int pos:
        Position to seek to in file.
    ÚseekNzAAn error occurred when rewinding request body for redirect/retry.zRUnable to record file position for rewinding request body during a redirect/retry.z4body_pos must be of type integer, instead it was %s.)	r   r   r   r   r    r   r!   Ú
ValueErrorÚtype)r"   Zbody_posÚ	body_seekr   r   r   r   w   s    r   )Ú
__future__r   Úbase64r   Ú
exceptionsr   Zpackages.sixr   r   ZSKIP_HEADERÚ	frozensetZSKIPPABLE_HEADERSr   Z
brotlicffiZ_unused_module_brotliÚImportErrorZbrotliÚobjectr!   r   r$   r   r   r   r   r   Ú<module>   s.   
	B