
    N&                         S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S r
S r\
4S jr " S S\R                  5      rS rSS	 jrS
 rg)    )abcNc                    U R                   (       d  [        R                  U l         U R                  nU R                   (       a	  U(       d  SOSn[	        U[
        R                  5      (       a  U" 5       nU(       a  UR                  (       a  UR                  (       a  SR                  UR                  UR                  UR                  UR                  5      n[        R                  R                  R                  SR                  UR                  UR                  5      S9nO(SR                  UR                  UR                  5      n0 n[        R                   " UUU R                   US9$ [        R"                  " U R                   US9$ )	zGCreates a urllib3.PoolManager object that has SSL verification enabled.CERT_REQUIREDNzhttp://{}:{}@{}:{}/z{}:{})proxy_basic_authzhttp://{}:{}/)	proxy_urlproxy_headersca_certs	cert_reqs)r	   r
   )r	   httplib2CA_CERTS"disable_ssl_certificate_validation
isinstancer   Callable
proxy_user
proxy_passformat
proxy_host
proxy_porturllib3utilrequestmake_headersProxyManagerPoolManager)http
proxy_infossl_disabledr
   r   r   s         (lib/third_party/httplib2shim/__init__.py_default_make_poolr   "   s:    == ))::L#'==4I*cll++\
  Z%:%:-44%%z'<'<%%z'<'<I $LL00==!()):+@+@" > M (..%%z'<'<I M##']]	
 	
      c                    ^  U 4S jnSU 4S jjnUT l         T R                  SSS5        T R                  T l        UT l        g)zAMonkey-patches PoolManager to make it accept client certificates.c                 0   > U Tl         UTl        UTl        g N)_client_key_client_cert_client_key_password)keycertpasswordpool_managers      r   add_certificate/_patch_add_certificate.<locals>.add_certificateM   s    #& $(!,4)r    Nc                    > TR                  XX#5      nTR                  Ul        TR                  Ul        TR
                  Ul        U$ r#   )_connection_from_hostr$   key_filer%   	cert_filer&   key_password)hostportschemepool_kwargspoolr*   s        r   connection_from_host4_patch_add_certificate.<locals>.connection_from_hostR   sD    11$fR %00%22(==r    )Nr   N)r+   r7   r.   )r*   r+   r7   s   `  r   _patch_add_certificater9   K   s?    5
 $3L   tT2)5)J)JL&(<L%r    c                 v    [        [        S[        R                  5        [        [        l        U [        l        g)a!  Monkey-patches httplib2.Http to be httplib2shim.Http.

This effectively makes all clients of httplib2 use urlilb3. It's preferable
to specify httplib2shim.Http explicitly where you can, but this can be
useful in situations where you do not control the construction of the http
object.

Args:
    make_pool: A function that returns a urllib3.Pool-like object. This
        allows you to specify special arguments to your connection pool if
        needed. By default, this will create a urllib3.PoolManager with
        SSL verification enabled.
_HttpOriginalN)setattrr   Http
_make_pool)	make_pools    r   patchr@   a   s"     Hox}}5HMDOr    c                      ^  \ rS rSrSr\rSS\R                  SSS4U 4S jjr	\
S 5       rS rSS jrU 4S	 jrU 4S
 jrSrU =r$ )r=   t   zA httplib2.Http subclass that uses urllib3 to perform requests.

This allows full thread safety, connection pooling, and proper SSL
verification support.
NFc                    > Un[         [        U ]  UUUUUS9  U(       d  U R                  US9n[	        U5        X`l        g )N)cachetimeoutr   r	   r   r   )superr=   __init__r>   r9   r6   )	selfrD   rE   r   r	   r   r6   disable_ssl	__class__s	           r   rH   Http.__init__|   sO     9dD"!/: 	# 	< ??j?9Dt$	r    c                 D   [        U[        R                  R                  R                  5      (       a  SnOSnUR
                  n[        U5      (       a  SR                  U5      nSnUR                  b  SR                  UR                  5      nSR                  X4XR5      $ )Nhttpsr   z[{}] z:{}z{}://{}{}{})	r   sixmoveshttp_clientHTTPSConnectionr2   _is_ipv6r   r3   )clsconnrequest_urir4   r2   r3   s         r   _create_full_uriHttp._create_full_uri   s     dCII11AABBFFyy D>>==&D99 <<		*D##F$DDr    c                 B   U R                  X5      nUS:w  a  SOSn U R                  R                  UUUUS[        R                  " SSS9[        R
                  " U R                  S9US9n[        XS9n	UR                  n
X4$ ! [         a  n[        U5      eS nAff = f)	NHEADTFr   )totalredirect)r\   )bodyheadersr]   retriesrE   decode_content)decode)rX   r6   r   r   RetryTimeoutrE   _map_responsedata	Exception_map_exception)rI   rV   rW   methodr^   r_   full_urirb   urllib3_responseresponsecontentes               r   _conn_requestHttp._conn_request   s    ((;6)u	$#yy00EA>dll;%  1  ' %%5EH&++G
     	$ ##	$s   A$B 
BBBc                 <    U R                   R                  XU5        g r#   )r6   r+   )rI   r'   r(   domainr)   s        r   r+   Http.add_certificate   s    		!!#X6r    c                 2   > [         [        U ]  5       nUS	 U$ )Nr6   )rG   r=   __getstate__rI   dictrK   s     r   ru   Http.__getstate__   s    T4-/Lr    c                 p   > [         [        U ]  U5        U R                  U R	                  5       S9U l        g )NrF   )rG   r=   __setstate__r>   r   r6   rv   s     r   rz   Http.__setstate__   s+    dD&t,OOt/@OA	r    )r6   r#   )__name__
__module____qualname____firstlineno____doc__r   r>   r   proxy_info_from_environmentrH   classmethodrX   ro   r+   ru   rz   __static_attributes____classcell__)rK   s   @r   r=   r=   t   s[    
 $J!4$@@5& E E&!07
B Br    r=   c                      [         R                  " U SSSS[         R                  5         [         R                  " U 5        g! [         R                   a     gf = f! [         R
                   a     gf = f)z-Checks if a given address is an IPv6 address.Nr   FT)socketgetaddrinfoAI_NUMERICHOSTgaierror	inet_atonerror)addrs    r   rT   rT      sl     	4q!Q0E0EF ??  << s"   )A A AAA43A4c                    U R                  5       nUR                  SS5        [        R                  " U5      nU R                  Ul        [        UR                  5      US'   U R                  Ul        U R                  Ul        U(       aJ  UR                  S5      S;   a5  [        [        U R                  5      5      US'   UR                  S5      US'   U$ )z7Maps a urllib3 response to a httplib/httplib2 Response.statusNzcontent-encoding)gzipdeflatezcontent-lengthz-content-encoding)
getheaderspopr   Responser   strreasonversiongetlenrf   )rl   rb   r_   items       r   re   re      s     !!#GKK$W%D//DK%DN//DK##DL
 $((-.2EE!$S%7!8$(HH-?$@ !Kr    c                    [        U [        R                  R                  5      (       a  U R                  (       d  U $ U R                  n U R
                  (       a  U R
                  S   OSn[        U [        R                  R                  5      (       a  SU;   a  [        R                  " U5      $ [        U [        R                  R                  5      (       aN  SU;   d  SU;   a  [        R                  " S5      $ SU;   a&  [        R                  " [        R                  S45      $ [        U [        R                  R                  5      (       a.  [        R                   " S[        R"                  " S	S
05      S5      $ [        U [        R                  R$                  5      (       a  [        R&                  " S5      $ [        U [        R                  R(                  5      (       a  [        R&                  " S5      $ [        U [        R                  R*                  5      (       a  [,        R*                  " U R
                  6 $ U $ )z*Maps an exception from urlib3 to httplib2.r   rO   ztoo many redirectszName or service not knownz,nodename nor servname provided, or not knownzUnable to find hostname.zConnection refusedz7Content purported as compressed but not uncompressable.r   i  z	timed outzconnect timed out)r   r   
exceptionsMaxRetryErrorr   argsResponseErrorr   RedirectLimitNewConnectionErrorServerNotFoundErrorr   r   errnoECONNREFUSEDDecodeErrorFailedToDecompressContentr   TimeoutErrorrE   ConnectTimeoutErrorSSLErrorssl)rn   messages     r   rh   rh      s   !W''5566xxHHH66affQirG!W''55667*))'22!W''::;;'72>'I//*, ,7*<<!3!35I JKK!W''334411Exo.4 	4 !W''4455~~k**!W'';;<<~~122!W''0011||QVV$$Hr    )F)collectionsr   r   r   r   warningsr   six.moves.http_clientrP   r   r   r9   r@   r=   rT   re   rh    r    r   <module>r      sX   .    
    &R=, '  &QB8== QBh",r    