£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>

7ReW  c               @   s  d  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 m	 Z	 m
 Z
 m Z m Z d d l m Z m Z m Z m Z d d	 l m Z m Z m Z d d
 l m Z m Z d d l m Z m Z m Z d d l m Z m Z m  Z  m! Z! d d l" m# Z# d d l$ m% Z% d d l m& Z& m' Z' m( Z( m) Z) m* Z* d d l+ m, Z, d d l m- Z- e	 d d  Z. e	 d d  Z/ Gd d   d e0  Z1 Gd d   d e1  Z2 d d   Z3 d S(   u   
requests.session
~~~~~~~~~~~~~~~~

This module provides a Session object to manage and persist settings across
requests (cookies, auth, proxies).

i    N(   u   Mapping(   u   datetimei   (   u   _basic_auth_str(   u	   cookielibu   OrderedDictu   urljoinu   urlparseu   builtin_str(   u   cookiejar_from_dictu   extract_cookies_to_jaru   RequestsCookieJaru   merge_cookies(   u   Requestu   PreparedRequestu   DEFAULT_REDIRECT_LIMIT(   u   default_hooksu   dispatch_hook(   u   to_key_val_listu   default_headersu   to_native_string(   u   TooManyRedirectsu   InvalidSchemau   ChunkedEncodingErroru   ContentDecodingError(   u   CaseInsensitiveDict(   u   HTTPAdapter(   u   requote_uriu   get_environ_proxiesu   get_netrc_authu   should_bypass_proxiesu   get_auth_from_url(   u   codes(   u   REDIRECT_STATIc             C   s   | d k r |  S|  d k r  | St | t  o; t |  t  sB |  S| t |   } | j t |    x0 |  j   D]" \ } } | d k rt | | =qt qt Wt d d   | j   D  } | S(   u   
    Determines appropriate setting for a given request, taking into account the
    explicit setting on that request, and the setting in the session. If a
    setting is a dictionary, they will be merged together using `dict_class`
    c             s   s-   |  ]# \ } } | d  k	 r | | f Vq d  S(   N(   u   None(   u   .0u   ku   v(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu	   <genexpr>C   s    u    merge_setting.<locals>.<genexpr>N(   u   Noneu
   isinstanceu   Mappingu   to_key_val_listu   updateu   itemsu   dict(   u   request_settingu   session_settingu
   dict_classu   merged_settingu   ku   v(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   merge_setting'   s    u   merge_settingc             C   sZ   | d k s! | j d  g  k r% |  S|  d k sF |  j d  g  k rJ | St |  | |  S(   u   
    Properly merges both requests and session hooks.

    This is necessary because when request_hooks == {'response': []}, the
    merge breaks Session hooks entirely.
    u   responseN(   u   Noneu   getu   merge_setting(   u   request_hooksu   session_hooksu
   dict_class(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   merge_hooksH   s
    !!u   merge_hooksc             B   sG   |  Ee  Z d  Z d d d	 d d d d  Z d d   Z d d   Z d S(
   u   SessionRedirectMixinc          !   c   s  d } x| j  r| j   }	 y | j Wn. t t t f k
 rY | j j d d  Yn X| |  j	 k r t
 d |  j	   n  | j   | j d }
 | j } |
 j d  r t | j  } d | j |
 f }
 n  t |
  } | j   }
 t |
  j st | j t |
   }
 n t |
  }
 t |
  |	 _ | j t j k rW| d k rWd } n  | j t j k r~| d k r~d } n  | j t j k r| d	 k rd } n  | |	 _ | j t j t j f k rd
 |	 j k r|	 j d
 =n  d |	 _ n  |	 j } y | d =Wn t  k
 rYn Xt! |	 j" |	 | j  |	 j" j# |  j$  |	 j% |	 j"  |  j& |	 |  } |  j' |	 |  |	 } |  j( | d | d | d | d | d | d d } t! |  j$ |	 | j  | d 7} | Vq	 Wd S(   u6   Receives a Response. Returns a generator of Responses.i    u   decode_contentu   Exceeded %s redirects.u   locationu   //u   %s:%su   HEADu   GETu   POSTu   Content-Lengthu   Cookieu   streamu   timeoutu   verifyu   certu   proxiesu   allow_redirectsi   NF()   u   is_redirectu   copyu   contentu   ChunkedEncodingErroru   ContentDecodingErroru   RuntimeErroru   rawu   readu   Falseu   max_redirectsu   TooManyRedirectsu   closeu   headersu   methodu
   startswithu   urlparseu   urlu   schemeu   geturlu   netlocu   urljoinu   requote_uriu   to_native_stringu   status_codeu   codesu	   see_otheru   foundu   movedu	   temporaryu   resumeu   Noneu   bodyu   KeyErroru   extract_cookies_to_jaru   _cookiesu   updateu   cookiesu   prepare_cookiesu   rebuild_proxiesu   rebuild_authu   send(   u   selfu   respu   requ   streamu   timeoutu   verifyu   certu   proxiesu   iu   prepared_requestu   urlu   methodu   parsed_rurlu   parsedu   headers(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   resolve_redirectsY   sn    
							
u&   SessionRedirectMixin.resolve_redirectsc             C   s   | j  } | j } d | k r[ t | j j  } t |  } | j | j k r[ | d =q[ n  |  j rp t |  n d } | d k	 r | j |  n  d S(   u   
        When being redirected we may want to strip authentication from the
        request to avoid leaking credentials. This method intelligently removes
        and reapplies authentication where possible to avoid credential loss.
        u   AuthorizationN(	   u   headersu   urlu   urlparseu   requestu   hostnameu	   trust_envu   get_netrc_authu   Noneu   prepare_auth(   u   selfu   prepared_requestu   responseu   headersu   urlu   original_parsedu   redirect_parsedu   new_auth(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   rebuild_auth   s    		u!   SessionRedirectMixin.rebuild_authc             C   s  | j  } | j } t |  j } | d k	 r9 | j   n i  } |  j r t |  r t |  } | j	 |  } | r | j
 | | |  q n  d | k r | d =n  y t | |  \ }	 }
 Wn t k
 r d \ }	 }
 Yn X|	 r|
 rt |	 |
  | d <n  | S(   u  
        This method re-evaluates the proxy configuration by considering the
        environment variables. If we are redirected to a URL covered by
        NO_PROXY, we strip the proxy configuration. Otherwise, we set missing
        proxy keys for this URL (in case they were stripped by a previous
        redirect).

        This method also replaces the Proxy-Authorization header where
        necessary.
        u   Proxy-AuthorizationN(   NN(   u   headersu   urlu   urlparseu   schemeu   Noneu   copyu	   trust_envu   should_bypass_proxiesu   get_environ_proxiesu   getu
   setdefaultu   get_auth_from_urlu   KeyErroru   _basic_auth_str(   u   selfu   prepared_requestu   proxiesu   headersu   urlu   schemeu   new_proxiesu   environ_proxiesu   proxyu   usernameu   password(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   rebuild_proxies   s$    		
u$   SessionRedirectMixin.rebuild_proxiesNFT(	   u   __name__u
   __module__u   __qualname__u   Falseu   Noneu   Trueu   resolve_redirectsu   rebuild_authu   rebuild_proxies(   u
   __locals__(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   SessionRedirectMixinX   s   au   SessionRedirectMixinc             B   sR  |  Ee  Z d  Z d Z d d d d d d d d	 d
 d d d d d g Z d d   Z d d   Z d d   Z d d   Z d4 d4 d4 d4 d4 d4 d4 d5 d4 d4 d4 d4 d4 d d  Z d d   Z d d   Z d d   Z d4 d  d!  Z d4 d" d#  Z d4 d$ d%  Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d4 S(6   u   Sessionu   A Requests session.

    Provides cookie persistence, connection-pooling, and configuration.

    Basic Usage::

      >>> import requests
      >>> s = requests.Session()
      >>> s.get('http://httpbin.org/get')
      200
    u   headersu   cookiesu   authu   timeoutu   proxiesu   hooksu   paramsu   verifyu   certu   prefetchu   adaptersu   streamu	   trust_envu   max_redirectsc             C   s   t    |  _ d  |  _ i  |  _ t   |  _ i  |  _ d |  _	 d |  _ d  |  _ t |  _ d |  _ t i   |  _ t   |  _ |  j d t    |  j d t    d  S(   Nu   https://u   http://FT(   u   default_headersu   headersu   Noneu   authu   proxiesu   default_hooksu   hooksu   paramsu   Falseu   streamu   Trueu   verifyu   certu   DEFAULT_REDIRECT_LIMITu   max_redirectsu	   trust_envu   cookiejar_from_dictu   cookiesu   OrderedDictu   adaptersu   mountu   HTTPAdapter(   u   self(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   __init__  s    								u   Session.__init__c             C   s   |  S(   N(    (   u   self(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu	   __enter__?  s    u   Session.__enter__c             G   s   |  j    d  S(   N(   u   close(   u   selfu   args(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   __exit__B  s    u   Session.__exit__c             C   s!  | j  p i  } t | t j  s0 t |  } n  t t t   |  j   |  } | j } |  j r | r |  j r t	 | j
  } n  t   } | j d | j j   d | j
 d | j d | j d t | j |  j d t d t | j |  j  d t | |  j  d	 | d
 t | j |  j   	| S(   ub  Constructs a :class:`PreparedRequest <PreparedRequest>` for
        transmission and returns it. The :class:`PreparedRequest` has settings
        merged from the :class:`Request <Request>` instance and those of the
        :class:`Session`.

        :param request: :class:`Request` instance to prepare with this
            session's settings.
        u   methodu   urlu   filesu   datau   headersu
   dict_classu   paramsu   authu   cookiesu   hooks(   u   cookiesu
   isinstanceu	   cookielibu	   CookieJaru   cookiejar_from_dictu   merge_cookiesu   RequestsCookieJaru   authu	   trust_envu   get_netrc_authu   urlu   PreparedRequestu   prepareu   methodu   upperu   filesu   datau   merge_settingu   headersu   CaseInsensitiveDictu   paramsu   merge_hooksu   hooks(   u   selfu   requestu   cookiesu   merged_cookiesu   authu   p(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   prepare_requestE  s(    							u   Session.prepare_requestc             C   s  t  |  } t d | j   d | d | d | d | p9 i  d | pE i  d | d | d	 |  	} |  j |  } | pu i  } |  j rt |  p i  } x* | j   D] \ } } | j | |  q W| r | d k	 r t	 j
 j d
  } n  | r| d k	 rt	 j
 j d  } qn  t | |  j  } t | |  j  } t | |  j  } t | |  j  } i | d 6|	 d 6| d 6| d 6| d 6|
 d 6} |  j | |  } | S(   u4  Constructs a :class:`Request <Request>`, prepares it and sends it.
        Returns :class:`Response <Response>` object.

        :param method: method for the new :class:`Request` object.
        :param url: URL for the new :class:`Request` object.
        :param params: (optional) Dictionary or bytes to be sent in the query
            string for the :class:`Request`.
        :param data: (optional) Dictionary or bytes to send in the body of the
            :class:`Request`.
        :param headers: (optional) Dictionary of HTTP Headers to send with the
            :class:`Request`.
        :param cookies: (optional) Dict or CookieJar object to send with the
            :class:`Request`.
        :param files: (optional) Dictionary of 'filename': file-like-objects
            for multipart encoding upload.
        :param auth: (optional) Auth tuple or callable to enable
            Basic/Digest/Custom HTTP Auth.
        :param timeout: (optional) Float describing the timeout of the
            request in seconds.
        :param allow_redirects: (optional) Boolean. Set to True by default.
        :param proxies: (optional) Dictionary mapping protocol to the URL of
            the proxy.
        :param stream: (optional) whether to immediately download the response
            content. Defaults to ``False``.
        :param verify: (optional) if ``True``, the SSL cert will be verified.
            A CA_BUNDLE path can also be provided.
        :param cert: (optional) if String, path to ssl client cert file (.pem).
            If Tuple, ('cert', 'key') pair.
        u   methodu   urlu   headersu   filesu   datau   paramsu   authu   cookiesu   hooksu   REQUESTS_CA_BUNDLEu   CURL_CA_BUNDLEu   streamu   timeoutu   verifyu   certu   proxiesu   allow_redirectsF(   u   builtin_stru   Requestu   upperu   prepare_requestu	   trust_envu   get_environ_proxiesu   itemsu
   setdefaultu   Falseu   osu   environu   getu   merge_settingu   proxiesu   streamu   verifyu   certu   send(   u   selfu   methodu   urlu   paramsu   datau   headersu   cookiesu   filesu   authu   timeoutu   allow_redirectsu   proxiesu   hooksu   streamu   verifyu   certu   requ   prepu   env_proxiesu   ku   vu   send_kwargsu   resp(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   requestl  sD    ,		
u   Session.requestc             K   s#   | j  d d  |  j d | |  S(   u   Sends a GET request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   allow_redirectsu   GETT(   u
   setdefaultu   Trueu   request(   u   selfu   urlu   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   get  s    u   Session.getc             K   s#   | j  d d  |  j d | |  S(   u   Sends a OPTIONS request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   allow_redirectsu   OPTIONST(   u
   setdefaultu   Trueu   request(   u   selfu   urlu   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   options  s    u   Session.optionsc             K   s#   | j  d d  |  j d | |  S(   u   Sends a HEAD request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   allow_redirectsu   HEADF(   u
   setdefaultu   Falseu   request(   u   selfu   urlu   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   head  s    u   Session.headc             K   s   |  j  d | d | | S(   u8  Sends a POST request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   POSTu   data(   u   request(   u   selfu   urlu   datau   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   post  s    u   Session.postc             K   s   |  j  d | d | | S(   u7  Sends a PUT request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   PUTu   data(   u   request(   u   selfu   urlu   datau   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   put  s    u   Session.putc             K   s   |  j  d | d | | S(   u9  Sends a PATCH request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   PATCHu   data(   u   request(   u   selfu   urlu   datau   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   patch  s    u   Session.patchc             K   s   |  j  d | |  S(   u   Sends a DELETE request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        u   DELETE(   u   request(   u   selfu   urlu   kwargs(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   delete  s    u   Session.deletec             K   s  | j  d |  j  | j  d |  j  | j  d |  j  | j  d |  j  t | t  sj t d   n  | j d d  } | j
 d  } | j
 d  } | j
 d  } | j
 d  } | j
 d  } | j }	 |  j d | j  }
 t j   } |
 j | |  } t j   | | _ t d	 |	 | |  } | j rdx- | j D] } t |  j | j | j  q>Wn  t |  j | | j  |  j | | d | d | d | d | d | } | rd
 d   | D n g  } | r| j d |  | j   } | | _ n  | s| j n  | S(   u   Send a given PreparedRequest.u   streamu   verifyu   certu   proxiesu#   You can only send PreparedRequests.u   allow_redirectsu   timeoutu   urlu   responsec             S   s   g  |  ] } |  q S(    (    (   u   .0u   resp(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu
   <listcomp>I  s   	 u    Session.send.<locals>.<listcomp>i    T(   u
   setdefaultu   streamu   verifyu   certu   proxiesu
   isinstanceu   PreparedRequestu
   ValueErroru   popu   Trueu   getu   hooksu   get_adapteru   urlu   datetimeu   utcnowu   sendu   elapsedu   dispatch_hooku   historyu   extract_cookies_to_jaru   cookiesu   requestu   rawu   resolve_redirectsu   insertu   content(   u   selfu   requestu   kwargsu   allow_redirectsu   streamu   timeoutu   verifyu   certu   proxiesu   hooksu   adapteru   startu   ru   respu   genu   history(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   send  sH    		 	
u   Session.sendc             C   sM   x6 |  j  j   D]% \ } } | j   j |  r | Sq Wt d |   d S(   u>   Returns the appropriate connnection adapter for the given URL.u*   No connection adapters were found for '%s'N(   u   adaptersu   itemsu   loweru
   startswithu   InvalidSchema(   u   selfu   urlu   prefixu   adapter(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   get_adapterX  s    u   Session.get_adapterc             C   s(   x! |  j  j   D] } | j   q Wd S(   u+   Closes all adapters and as such the sessionN(   u   adaptersu   valuesu   close(   u   selfu   v(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   closeb  s    u   Session.closec                sW   | |  j    <  f d d   |  j  D } x' | D] } |  j  j |  |  j  | <q0 Wd S(   uk   Registers a connection adapter to a prefix.

        Adapters are sorted in descending order by key length.c                s.   g  |  ]$ } t  |  t     k  r |  q S(    (   u   len(   u   .0u   k(   u   prefix(    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu
   <listcomp>m  s   	 u!   Session.mount.<locals>.<listcomp>N(   u   adaptersu   pop(   u   selfu   prefixu   adapteru   keys_to_moveu   key(    (   u   prefixu6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   mountg  s    u   Session.mountc                s    t    f d d     j D  S(   Nc             3   s'   |  ] } | t    | d   f Vq d  S(   N(   u   getattru   None(   u   .0u   attr(   u   self(    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu	   <genexpr>s  s    u'   Session.__getstate__.<locals>.<genexpr>(   u   dictu	   __attrs__(   u   self(    (   u   selfu6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   __getstate__r  s    u   Session.__getstate__c             C   s1   x* | j    D] \ } } t |  | |  q Wd  S(   N(   u   itemsu   setattr(   u   selfu   stateu   attru   value(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   __setstate__u  s    u   Session.__setstate__NT(   u   __name__u
   __module__u   __qualname__u   __doc__u	   __attrs__u   __init__u	   __enter__u   __exit__u   prepare_requestu   Noneu   Trueu   requestu   getu   optionsu   headu   postu   putu   patchu   deleteu   sendu   get_adapteru   closeu   mountu   __getstate__u   __setstate__(   u
   __locals__(    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   Session   sD   3(S





	G
u   Sessionc               C   s   t    S(   u2   Returns a :class:`Session` for context-management.(   u   Session(    (    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   sessionz  s    u   session(4   u   __doc__u   osu   collectionsu   Mappingu   datetimeu   authu   _basic_auth_stru   compatu	   cookielibu   OrderedDictu   urljoinu   urlparseu   builtin_stru   cookiesu   cookiejar_from_dictu   extract_cookies_to_jaru   RequestsCookieJaru   merge_cookiesu   modelsu   Requestu   PreparedRequestu   DEFAULT_REDIRECT_LIMITu   hooksu   default_hooksu   dispatch_hooku   utilsu   to_key_val_listu   default_headersu   to_native_stringu
   exceptionsu   TooManyRedirectsu   InvalidSchemau   ChunkedEncodingErroru   ContentDecodingErroru
   structuresu   CaseInsensitiveDictu   adaptersu   HTTPAdapteru   requote_uriu   get_environ_proxiesu   get_netrc_authu   should_bypass_proxiesu   get_auth_from_urlu   status_codesu   codesu   REDIRECT_STATIu   merge_settingu   merge_hooksu   objectu   SessionRedirectMixinu   Sessionu   session(    (    (    u6   /tmp/pip-zej_zi-build/pip/_vendor/requests/sessions.pyu   <module>
   s*   (""(! 