
    z%i                       	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) 	 d dl*Z*dZ+g dZ-dej\                  dd	 z  Z/da0de	jb                  fddddd
dZ2d Z3g Z4dedZ5d Z6 ejn                  dejp                        Z9d Z: G d d      Z; G d d      Z<d Z= G d d      Z> G d de>      Z? G d de>      Z@ G d de>      ZAd ZB G d d e>      ZC G d! d"      ZD G d# d$eD      ZE G d% d&eE      ZF G d' d(      ZG G d) d*eGe>      ZH G d+ d,eGe>      ZIej                  ZK G d- d.      ZL G d/ d0e>eL      ZM G d1 d2e>eL      ZN G d3 d4e>      ZO G d5 d6eO      ZP eQej                  d7      r G d8 d9eO      ZSe-j                  d9        G d: d;e>      ZU G d< d=e>      ZVd> ZWd? ZX G d@ dAe>      ZYdB ZZ G dC dDe>      Z[ G dE dFe[      Z\ G dG dHe>      Z]dIZ^ej                  dJk(  r	d dKl`maZambZb ndL ZadM Zbi Zc G dN dO      Zd G dP dQed      ZedafdR ZgdahdS ZidajdT ZkdaldU Zm G dV dW      ZndX ZodfdYZpdZ Zqej                  d[k(  rd d\lsmtZtmuZu d] Zvd^ Zwd_ Zxd` Zyyej                  dJk(  rda Zzdb Zydc Z{dd ZxyeoZyepZxy# e,$ r dZ+Y Xw xY w)g    N)URLError	HTTPErrorContentTooShortError)urlparseurlspliturljoinunwrapquoteunquote
_splittype
_splithost
_splitport
_splituser_splitpasswd
_splitattr_splitquery_splitvalue	_splittag	_to_bytesunquote_to_bytes
urlunparse)
addinfourladdclosehookTF)!RequestOpenerDirectorBaseHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerHTTPCookieProcessorProxyHandlerHTTPPasswordMgrHTTPPasswordMgrWithDefaultRealmHTTPPasswordMgrWithPriorAuthAbstractBasicAuthHandlerHTTPBasicAuthHandlerProxyBasicAuthHandlerAbstractDigestAuthHandlerHTTPDigestAuthHandlerProxyDigestAuthHandlerHTTPHandlerFileHandler
FTPHandlerCacheFTPHandlerDataHandlerUnknownHandlerHTTPErrorProcessorurlopeninstall_openerbuild_openerpathname2urlurl2pathname
getproxiesurlretrieve
urlcleanup	URLopenerFancyURLopenerz%d.%d   )cafilecapath	cadefaultcontextc                   	 |s|s|rdd l } |j                  dt        d       |t        d      t        st        d      t        j                  t
        j                  j                  ||      }|j                  dg       t        |      }t        |      }	n3|rt        |      }t        |      }	nt        t               xa}	nt        }	|	j                  | ||      S )	Nr   zJcafile, capath and cadefault are deprecated, use a custom context instead.r;   zDYou can't pass both context and any of cafile, capath, and cadefaultzSSL support not available)r<   r=   zhttp/1.1r?   )warningswarnDeprecationWarning
ValueError	_have_sslsslcreate_default_contextPurposeSERVER_AUTHset_alpn_protocolsHTTPSHandlerr3   _openeropen)
urldatatimeoutr<   r=   r>   r?   rB   https_handleropeners
             B/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/urllib/request.pyr1   r1      s    0d 9 01CQ	H  899,,S[[-D-D4:4:< 	""J<0$W5m,	$W5m,	'>)&;;sD'**    c                     | a y N)rM   )rS   s    rT   r2   r2      s    GrU   c                     	 t        |       \  }}t        j                  t        | |            5 }|j	                         }|dk(  r,|s*t
        j                  j                  |      |fcd d d        S |rt        |d      }n7t        j                  d      }|j                  }t        j                  |       |5  ||f}	d}
d}d}d}d|v rt        |d	         }|r
 |||
|       |j                  |
      x}rD|t!        |      z  }|j#                  |       |d
z  }|r
 |||
|       |j                  |
      x}rDd d d        d d d        dk\  r|k  rt%        d||fz  	      	S # 1 sw Y   .xY w# 1 sw Y   2xY w)NfilewbF)delete    r   content-lengthContent-Length   1retrieval incomplete: got only %i out of %i bytes)r   
contextlibclosingr1   infoospathnormpathrN   tempfileNamedTemporaryFilename_url_tempfilesappendintreadlenwriter   )rO   filename
reporthookrP   url_typerf   fpheaderstfpresultbssizern   blocknumblocks                  rT   r7   r7      s     _NHd			GC.	/ !32'') vh77##D)72!3 !3 x&C--U;CxxH!!(+ 	3w&FBDDH7*7#3458R.772;&%&E
"		% AxT2 772;&%&	3!!3F qyTD["?Tl"$ 	$ M1	3 	3!!3 !3s+   8E41AE49BE(;E4(E1	-E44E=c                      	 t         D ]  } 	 t        j                  |         t         d d = t        rd ay y # t        $ r Y 9w xY wrW   )rk   re   unlinkOSErrorrM   )	temp_files    rT   r8   r8     sP    :# 		IIi  	q   		s   6	AAz:\d+$c                     	 | j                   }t        |      d   }|dk(  r| j                  dd      }t        j	                  d|d      }|j                         S )Nr`    Host)full_urlr   
get_header_cut_port_resublower)requestrO   hosts      rT   request_hostr   )  s]     

CC=Drz!!&"- Ba(D::<rU   c                      e Zd Zdi dddfdZed        Zej                  d        Zej                  d        Zed        Zej                  d        Zej                  d	        Zd
 Z	d Z
d Zd Zd Zd Zd Zd ZddZd Zd Zy)r   NFc                     || _         i | _        i | _        d | _        || _        d | _        |j                         D ]  \  }}| j                  ||        |t        |       }|| _	        || _
        |r|| _        y y rW   )r   ru   unredirected_hdrs_datarP   _tunnel_hostitems
add_headerr   origin_req_hostunverifiablemethod)	selfrO   rP   ru   r   r   r   keyvalues	            rT   __init__zRequest.__init__;  s     !#
	 !--/ 	(JCOOC'	("*40O.( DK rU   c                 ~    | j                   r&dj                  | j                  | j                         S | j                  S )Nz{}#{})fragmentformat	_full_urlr   s    rT   r   zRequest.full_urlM  s,    ==>>$..$--@@~~rU   c                     t        |      | _        t        | j                        \  | _        | _        | j	                          y rW   )r	   r   r   r   _parser   rO   s     rT   r   zRequest.full_urlS  s/      (1$..(A%rU   c                 .    d | _         d | _        d| _        y Nr   )r   r   selectorr   s    rT   r   zRequest.full_urlZ  s    rU   c                     | j                   S rW   )r   r   s    rT   rP   zRequest.data`  s    zzrU   c                 x    || j                   k7  r+|| _         | j                  d      r| j                  d       y y y )NContent-length)r   
has_headerremove_header)r   rP   s     rT   rP   zRequest.datad  s=    4::DJ /0""#34 1 rU   c                     d | _         y rW   )rP   r   s    rT   rP   zRequest.datan  s	    	rU   c                    t        | j                        \  | _        }| j                  t        d| j                  z        t        |      \  | _        | _        | j                  rt        | j                        | _        y y )Nzunknown url type: %r)	r   r   typerE   r   r   r   r   r   )r   rests     rT   r   zRequest._parser  sd    $T^^4	4993dmmCDD#-d#3 	4=99		*DI rU   c                 >    	 | j                   dnd}t        | d|      S )NPOSTGETr   )rP   getattr)r   default_methods     rT   
get_methodzRequest.get_methodz  s$    A#'99#8etX~66rU   c                     | j                   S rW   )r   r   s    rT   get_full_urlzRequest.get_full_url  s    }}rU   c                     | j                   dk(  r%| j                  s| j                  | _        || _        y || _         | j                  | _        || _        y )Nhttps)r   r   r   r   r   )r   r   r   s      rT   	set_proxyzRequest.set_proxy  sF    99(9(9 $		D 	 DI MMDM	rU   c                 4    | j                   | j                  k(  S rW   )r   r   r   s    rT   	has_proxyzRequest.has_proxy  s    }}--rU   c                 >    || j                   |j                         <   y rW   )ru   
capitalizer   r   vals      rT   r   zRequest.add_header  s    ),S^^%&rU   c                 >    || j                   |j                         <   y rW   )r   r   r   s      rT   add_unredirected_headerzRequest.add_unredirected_header  s    36s~~/0rU   c                 >    || j                   v xs || j                  v S rW   )ru   r   r   header_names     rT   r   zRequest.has_header  s&    t||+ 6t555	7rU   c                 n    | j                   j                  || j                  j                  ||            S rW   )ru   getr   )r   r   defaults      rT   r   zRequest.get_header  s2    ||""&&{G<> 	>rU   c                 t    | j                   j                  |d        | j                  j                  |d        y rW   )ru   popr   r   s     rT   r   zRequest.remove_header  s,    d+"";5rU   c                 h    i | j                   | j                  }t        |j                               S rW   )r   ru   listr   )r   hdrss     rT   header_itemszRequest.header_items  s,    9$((9DLL9DJJL!!rU   rW   )__name__
__module____qualname__r   propertyr   setterdeleterrP   r   r   r   r   r   r   r   r   r   r   r    rU   rT   r   r   9  s    !%r!%E!$  
 __   
   
[[5 5 
\\ +7
.-77>
6"rU   r   c                   R    e Zd Zd Zd Zd Zd Zdej                  fdZ	d	dZ
d Zy)
r   c                 p    dt         z  }d|fg| _        g | _        i | _        i | _        i | _        i | _        y )NPython-urllib/%sz
User-agent)__version__
addheadershandlershandle_openhandle_errorprocess_responseprocess_request)r   client_versions     rT   r   zOpenerDirector.__init__  sB    +k9(.9: "!rU   c                    t        |d      st        dt        |      z        d}t        |      D ]	  }|dv r	|j	                  d      }|d | }||dz   d  }|j                  d      rW|j	                  d      |z   dz   }||dz   d  }	 t        |      }| j                  j                  |i       }	|	| j                  |<   n=|dk(  r|}| j                  }	n)|d	k(  r|}| j                  }	n|d
k(  r|}| j                  }	n|	j                  |g       }
|
rt        j                  |
|       n|
j!                  |       d} |r2t        j                  | j"                  |       |j%                  |        y y # t        $ r Y w xY w)N
add_parentz%expected BaseHandler instance, got %rF)redirect_requestdo_open
proxy_open_r`   errorrN   responser   T)hasattr	TypeErrorr   dirfind
startswithrm   rE   r   r   r   r   r   
setdefaultbisectinsortrl   r   r   )r   handleraddedmethiprotocol	conditionjkindlookupr   s              rT   add_handlerzOpenerDirector.add_handler  s   w-C M* + + L #	DDD		#ABQxHQqST
I##G,NN3'!+a/AaCDzt9D **..x<.4!!(+f$))j(..i'--((r2Hh0(EG#	J MM$--1t$ / " s   	E33	E?>E?c                      y rW   r   r   s    rT   closezOpenerDirector.close      rU   c                 d    |j                  |d      }|D ]  }t        ||      } || }||c S  y )Nr   )r   r   )	r   chainr   	meth_nameargsr   r   funcrw   s	            rT   _call_chainzOpenerDirector._call_chain  sC     99T2& 	G7I.D4[F!		rU   Nc                    t        |t              rt        ||      }n|}|||_        ||_        |j
                  }|dz   }| j                  j                  |g       D ]  }t        ||      } ||      } t        j                  d|j                  |j                  |j                  |j                                | j                  ||      }	|dz   }| j                  j                  |g       D ]  }t        ||      } |||	      }	 |	S )N_requestzurllib.Request	_response)
isinstancestrr   rP   rQ   r   r   r   r   sysauditr   ru   r   _openr   )
r   fullurlrP   rQ   reqr   r   	processorr   r   s
             rT   rN   zOpenerDirector.open  s   gs#'4(CC88 Z'	--11(B? 	I9i0Ds)C	 			"CLL#((CKKIYZ::c4( [(	..228R@ 	+I9i0DC*H	+ rU   c                     | j                  | j                  dd|      }|r|S |j                  }| j                  | j                  ||dz   |      }|r|S | j                  | j                  dd|      S )Nr   default_openr  unknownunknown_open)r   r   r   )r   r
  rP   rw   r   s        rT   r  zOpenerDirector._open  s    !!$"2"2I"0#7M88!!$"2"2Hh")?*+.0M 0 0) .5 	5rU   c                     |dv r| j                   d   }|d   }d|z  }d}|}n| j                   }|dz   }d}|||f|z   } | j                  | }|r|S |r|dd	fz   } | j                  | S y )
Nhttpr   r  r;   zhttp_error_%sr`   _errorr   r   http_error_default)r   r   )r   protor   dictr   http_err	orig_argsrw   s           rT   r   zOpenerDirector.error  s    %%$$V,DGE'%/IHI$$D(IHeY'$.!!!4(M)%9:YFD#4##T** rU   rW   )r   r   r   r   r   r   r   socket_GLOBAL_DEFAULT_TIMEOUTrN   r  r   r   rU   rT   r   r     s3    	"-%^	 "&v/M/M :5+rU   r   c            	      j   	 t               }t        t        t        t        t
        t        t        t        t        g	}t        t        j                  d      r|j                  t               t               }|D ]V  }| D ]O  }t!        |t"              rt%        ||      s |j'                  |       2t!        ||      s?|j'                  |       Q X |D ]  }|j)                  |        |D ]  }|j+                   |               | D ]*  }t!        |t"              r |       }|j+                  |       , |S )NHTTPSConnection)r   r    r/   r*   r   r   r,   r+   r0   r.   r   r  clientrl   rL   setr  r   
issubclassaddremover   )r   rS   default_classesskipklasscheckhs          rT   r3   r3   5  s    F#^[.0C!;0B"$O t{{-.|,5D    	 E%&eU+HHUOE5)	    &u%& ! $57#$  aA1 MrU   c                   "    e Zd ZdZd Zd Zd Zy)r     c                     || _         y rW   )parent)r   r*  s     rT   r   zBaseHandler.add_parent\  s	    rU   c                      y rW   r   r   s    rT   r   zBaseHandler.close_  r   rU   c                 N    t        |d      sy| j                  |j                  k  S )Nhandler_orderT)r   r-  )r   others     rT   __lt__zBaseHandler.__lt__c  s(    uo. !!E$7$777rU   N)r   r   r   r-  r   r   r/  r   rU   rT   r   r   Y  s    M8rU   r   c                       e Zd Z	 dZd ZeZy)r0   i  c                     |j                   |j                  |j                         }}}d|cxk  rdk  s"n | j                  j	                  d|||||      }|S )N   ,  r  )codemsgrd   r*  r   )r   r   r   r4  r5  r   s         rT   http_responsez HTTPErrorProcessor.http_responsep  sT    "--x}}4c t!c!{{((4d<H rU   N)r   r   r   r-  r6  https_responser   rU   rT   r0   r0   l  s    'M	 #NrU   r0   c                       e Zd Zd Zy)r   c                 4    t        |j                  ||||      rW   )r   r   )r   r
  rt   r4  r5  r   s         rT   r  z*HTTPDefaultErrorHandler.http_error_default~  s    dCr::rU   N)r   r   r   r  r   rU   rT   r   r   }  s    ;rU   r   c                   4    e Zd ZdZdZd Zd ZexZxZxZ	Z
dZy)r      
   c                 \   	 |j                         }|dv r|dv s"|dv r|dk(  st        |j                  ||||      |j                  dd      }d}|j                  j                         D 	
ci c]  \  }	}
|	j                         |vr|	|
 }}	}
t        |||j                  d	      S c c}
}	w )
N)-  .  /  i3  i4  )r   HEAD)r>  r?  r@  r    z%20)r^   zcontent-typeT)ru   r   r   )	r   r   r   replaceru   r   r   r   r   )r   r
  rt   r4  r5  ru   newurlmCONTENT_HEADERSkv
newheaderss               rT   r   z$HTTPRedirectHandler.redirect_request  s    	 NN22qO7K&1;CLL$WbAA U+<'*{{'8'8': ;tq!/9 d ;
 ;v)'*':':$(* 	*;s   -B(c                 Z   d|v r|d   }nd|v r|d   }ny t        |      }|j                  dvrt        |||d|d||      |j                  s|j                  rt        |      }d|d<   t        |      }t        |dt        j                  	      }t        |j                  |      }| j                  ||||||      }|y t        |d
      rp|j                  x}	|_        |	j                  |d      | j                   k\  st#        |	      | j$                  k\  r6t        |j                  || j&                  |z   ||      i x}	x|_        |_        |	j                  |d      dz   |	|<   |j)                          |j+                          | j,                  j/                  ||j0                        S )Nlocationurir  r   ftpr   z - Redirection to url 'z' is not allowed/r;   z
iso-8859-1)encodingsaferedirect_dictr   r`   rQ   )r   schemer   rf   netlocr   r   r
   stringpunctuationr   r   r   r   rR  r   max_repeatsro   max_redirectionsinf_msgrn   r   r*  rN   rQ   )
r   r
  rt   r4  r5  ru   rD  urlpartsnewvisiteds
             rT   http_error_302z"HTTPRedirectHandler.http_error_302  s     Z(FgU^F F#
 ??">>ADfM 
 }}H~HHQKH%
 \0B0BDv.
 ##CT3H; 3(*-*;*;;Gc'FA&$*:*::G 5 55d $s 2GRA A ?A@G@c'#*;!++fa014 		

{{S[[99rU   zoThe HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
N)r   r   r   rX  rY  r   r^  http_error_301http_error_303http_error_307http_error_308rZ  r   rU   rT   r   r     s<     K  *L::x IWVNV^Vn~2GrU   r   c                 h   	 t        |       \  }}|j                  d      sd }| }ne|j                  d      st        d| z        d|v r$|j                  d      }|j                  d|      }n|j                  dd      }|dk(  rd }|d| }t	        |      \  }}|t        |      \  }}	nd x}}	|||	|fS )NrO  //zproxy URL with no authority: %r@r;   r]   )r   r   rE   r   r   r   )
proxyrT  r_scheme	authorityhost_separatorenduserinfohostportuserpasswords
             rT   _parse_proxyro    s     "%(FHs#	 ""4(>FGG (?%]]3/N--^4C--Q'C"9CQsO	#I.Hh%h/hx48++rU   c                       e Zd ZdZddZd Zy)r    d   Nc                     |
t               }|| _        |j                         D ]4  \  }}|j                         }t	        | d|z  ||| j
                  fd       6 y )Nz%s_openc                      || ||      S rW   r   )rrf  r   r   s       rT   <lambda>z'ProxyHandler.__init__.<locals>.<lambda>  s    Qt, rU   )r6   proxiesr   r   setattrr   )r   rv  r   rO   s       rT   r   zProxyHandler.__init__  sZ    ? lG  	.ID#::<DD)d*$'d -.	.rU   c                    |j                   }t        |      \  }}}}||}|j                  rt        |j                        ry |rb|r`t	        |      dt	        |      }	t        j                  |	j                               j                  d      }
|j                  dd|
z          t	        |      }|j                  ||       ||k(  s|dk(  ry | j                  j                  ||j                        S )N:asciiProxy-authorizationBasic r   rS  )r   ro  r   proxy_bypassr   base64	b64encodeencodedecoder   r   r*  rN   rQ   )r   r
  rf  r   	orig_type
proxy_typerm  rn  rl  	user_passcredss              rT   r   zProxyHandler.proxy_open"  s    HH	/;E/B,
D(H"J88SXX.H#*4=#*8#46I$$Y%5%5%78??HENN0(U2BC8$h
+
"i7&: ;;##C#==rU   rW   )r   r   r   r-  r   r   r   rU   rT   r    r      s    M	.>rU   r    c                   ,    e Zd Zd Zd Zd ZddZd Zy)r!   c                     i | _         y rW   )passwdr   s    rT   r   zHTTPPasswordMgr.__init__@  s	    rU   c                      t        |t              r|g}| j                  vri  j                  |<   dD ]+  t         fd|D              }||f j                  |   |<   - y )NTFc              3   B   K   | ]  }j                  |        y wrW   )
reduce_uri).0udefault_portr   s     rT   	<genexpr>z/HTTPPasswordMgr.add_password.<locals>.<genexpr>J  s!       ?56<0 ?s   )r  r  r  tuple)r   realmrL  rm  r  reduced_urir  s   `     @rT   add_passwordzHTTPPasswordMgr.add_passwordC  sk    c3%C#!#DKK' 	=L  ?:= ? ?K/3VnDKK{+	=rU   c                     | j                   j                  |i       }dD ]M  }| j                  ||      }|j                         D ]&  \  }}|D ]  }| j	                  ||      s|c c c S  ( O y)Nr  NN)r  r   r  r   	is_suburi)	r   r  authuridomainsr  reduced_authuriurisauthinforL  s	            rT   find_user_passwordz"HTTPPasswordMgr.find_user_passwordN  su    ++//%,' 	(L"oog|DO")--/ (h (C~~c?;'((	( rU   c                     	 t        |      }|d   r|d   }|d   }|d   xs d}nd }|}d}t        |      \  }}|r!||dddj                  |      }	|	d||	fz  }||fS )	Nr`   r   r;   rO  P   i  r  z%s:%d)r   r   r   )
r   rL  r  partsrT  rh  rf   r   portdports
             rT   r  zHTTPPasswordMgr.reduce_uriX  s    N81XFaI8?sD FID	*
dDLV-?!s6{   #tUm3	$rU   c                 t    	 ||k(  ry|d   |d   k7  ry|d   }|dd  dk7  r|dz  }|d   j                  |      S )NTr   Fr`   r]   rO  )r   )r   basetestprefixs       rT   r  zHTTPPasswordMgr.is_suburio  s[    	 4<7d1ga"#;#cMFAw!!&))rU   N)T)r   r   r   r   r  r  r  r  r   rU   rT   r!   r!   >  s    	=.*rU   r!   c                       e Zd Zd Zy)r"   c                 p    t         j                  | ||      \  }}|||fS t         j                  | d |      S rW   )r!   r  )r   r  r  rm  rn  s        rT   r  z2HTTPPasswordMgrWithDefaultRealm.find_user_password  sC    (;;D%<CEh>!11$gFFrU   N)r   r   r   r  r   rU   rT   r"   r"   ~  s    GrU   r"   c                   8     e Zd Z fdZd fd	ZddZd Z xZS )r#   c                 2    i | _         t        |   |i | y rW   )authenticatedsuperr   )r   r   kwargs	__class__s      rT   r   z%HTTPPasswordMgrWithPriorAuth.__init__  s    $)&)rU   c                 v    | j                  ||       |t        | 	  d |||       t        | 	  ||||       y rW   )update_authenticatedr  r  )r   r  rL  rm  r  is_authenticatedr  s         rT   r  z)HTTPPasswordMgrWithPriorAuth.add_password  s@    !!#'78G sD&9UCv6rU   c                     t        |t              r|g}dD ]*  }|D ]#  }| j                  ||      }|| j                  |<   % , y Nr  )r  r  r  r  )r   rL  r  r  r  r  s         rT   r  z1HTTPPasswordMgrWithPriorAuth.update_authenticated  sU    c3%C' 	CL C"ooa>2B"";/C	CrU   c                     dD ]J  }| j                  ||      }| j                  D ]'  }| j                  ||      s| j                  |   c c S  L y r  )r  r  r  )r   r  r  r  rL  s        rT   r  z-HTTPPasswordMgrWithPriorAuth.is_authenticated  sU    ' 	3L"oog|DO)) 3>>#7--c223	3rU   )F)r   r   r   r   r  r  r  __classcell__)r  s   @rT   r#   r#     s    *7C3rU   r#   c                   t    e Zd Z ej                  dej
                        Zd	dZd Zd Z	d Z
d Zd ZeZeZy)
r$   z1(?:^|,)[ 	]*([^ 	,]+)[ 	]+realm=(["']?)([^"']*)\2Nc                 `    |
t               }|| _        | j                  j                  | _        y rW   )r!   r  r  )r   password_mgrs     rT   r   z!AbstractBasicAuthHandler.__init__  s)    *,L" KK44rU   c              #     K   d}t         j                  j                  |      D ]=  }|j                         \  }}}|dvrt	        j
                  dt        d       ||f d}? |s|r|j                         d   }nd}|d f y y w)NF)"'zBasic Auth Realm was unquoted   Tr   r   )r$   rxfinditergroupsrB   rC   UserWarningsplit)r   headerfound_challengemorT  r
   r  s          rT   _parse_realmz%AbstractBasicAuthHandler._parse_realm  s     *--66v> 	#B#%99; FE5J&=)1. 5/!"O	# *4.  s   BBc                     |j                  |      }|sy d }|D ]J  }| j                  |      D ]4  \  }}|j                         dk7  r|}|| j                  |||      c c S  L |t	        d      y )Nbasicz@AbstractBasicAuthHandler does not support the following scheme: )get_allr  r   retry_http_basic_authrE   )	r   authreqr   r
  ru   unsupportedr  rT  r  s	            rT   http_error_auth_reqedz.AbstractBasicAuthHandler.http_error_auth_reqed  s     //'* 
	HF!%!2!26!: 	H<<>W,"(K$  55dCGG	H
	H " &) * * #rU   c                    | j                   j                  ||      \  }}||d|}dt        j                  |j	                               j                  d      z   }|j                  | j                  d       |k(  ry |j                  | j                  |       | j                  j                  ||j                        S y )Nry  r|  rz  rS  )r  r  r~  r  r  r  r   auth_headerr   r*  rN   rQ   )r   r   r
  r  rm  pwrawauths           rT   r  z.AbstractBasicAuthHandler.retry_http_basic_auth  s    ;;11%>b>!2&Cf..szz|<CCGLLD~~d..5=''(8(8$?;;##C#==rU   c                    t        | j                  d      r%| j                  j                  |j                        s|S |j	                  d      s| j                  j                  d |j                        \  }}dj                  ||      j                         }t        j                  |      j                         }|j                  ddj                  |j                                      |S )Nr  Authorizationz{0}:{1}zBasic {})r   r  r  r   r   r  r   r  r~  standard_b64encoder  r   strip)r   r
  rm  r  credentialsauth_strs         rT   http_requestz%AbstractBasicAuthHandler.http_request  s    %78{{++CLL9J~~o.;;99$MLD&#**48??AK00=DDFH''(2(9(9(..:J(KM
rU   c                     t        | j                  d      rfd|j                  cxk  rdk  r+n n(| j                  j                  |j                  d       |S | j                  j                  |j                  d       |S )Nr  r2  r3  TF)r   r  r4  r  r   )r   r
  r   s      rT   r6  z&AbstractBasicAuthHandler.http_response	  s`    4;; 23hmm)c)00tD  00uErU   rW   )r   r   r   recompileIr  r   r  r  r  r  r6  https_requestr7  r   rU   rT   r$   r$     sL     
 1 DD
B5!(*4
 !M"NrU   r$   c                       e Zd ZdZd Zy)r%   r  c                 F    |j                   }| j                  d|||      }|S )Nwww-authenticate)r   r  )r   r
  rt   r4  r5  ru   rO   r   s           rT   http_error_401z#HTTPBasicAuthHandler.http_error_401  s*    ll--.@*-sG=rU   N)r   r   r   r  r  r   rU   rT   r%   r%     s    !KrU   r%   c                       e Zd ZdZd Zy)r&   r{  c                 F    |j                   }| j                  d|||      }|S Nproxy-authenticate)r   r  )r   r
  rt   r4  r5  ru   rh  r   s           rT   http_error_407z$ProxyBasicAuthHandler.http_error_407%  s-    
 HH	--.B*3S'CrU   N)r   r   r   r  r  r   rU   rT   r&   r&   !  s    'KrU   r&   c                   >    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	 Z
y)r'   Nc                     |
t               }|| _        | j                  j                  | _        d| _        d| _        d | _        y Nr   )r!   r  r  retriednonce_count
last_nonce)r   r  s     rT   r   z"AbstractDigestAuthHandler.__init__?  s>    >$&F KK44rU   c                     d| _         y r  )r  r   s    rT   reset_retry_countz+AbstractDigestAuthHandler.reset_retry_countH  s	    rU   c                 Z   |j                  |d       }| j                  dkD  rt        |j                  dd|d       | xj                  dz  c_        |rZ|j	                         d   }|j                         dk(  r| j                  ||      S |j                         dk7  rt        d|z        y y )	N   i  zdigest auth failedr`   r   digestr  zEAbstractDigestAuthHandler does not support the following scheme: '%s')r   r  r   r   r  r   retry_http_digest_authrE   )r   r  r   r
  ru   r  rT  s          rT   r  z/AbstractDigestAuthHandler.http_error_auth_reqedK  s    ++k40<<! CLL#/C#T+ + LLAL]]_Q'F||~)223@@7*  "?AG"H I I +	 rU   c                 z   |j                  dd      \  }}t        t        d t        |                  }| j	                  ||      }|rtd|z  }|j
                  j                  | j                  d       |k(  ry |j                  | j                  |       | j                  j                  ||j                        }|S y )NrB  r`   z	Digest %srS  )r  parse_keqv_listfilterparse_http_listget_authorizationru   r   r  r   r*  rN   rQ   )r   r
  r  token	challengechalauth_valresps           rT   r  z0AbstractDigestAuthHandler.retry_http_digest_auth_  s    ::c1-yvdOI,FGH%%c40"T)H{{t//6(B''(8(8(C;;##C#=DK rU   c                     | j                   d|dt        j                         d}|j                  d      t	        d      z   }t        j                  |      j                         }|d d S )Nry  rz        )r  timectimer  _randombyteshashlibsha1	hexdigest)r   noncesbdigs        rT   
get_cnoncez$AbstractDigestAuthHandler.get_cnoncek  sT      ++UDJJLAHHWQ/ll1o'')3BxrU   c                    	 |d   }|d   }|j                  d      }|j                  dd      }|j                  dd       }| j                  |      \  }}	|y | j                  j	                  ||j
                        \  }
}|
y |j                  | j                  |j                  |      }nd }|
d|d|}|j                         d|j                  }| |	 ||      |d ||            }nd|j                  d	      v ry|| j                  k(  r| xj                  d
z  c_        nd
| _        || _        d| j                  z  }| j                  |      }|d|d|ddd ||      	} |	 ||      |      }nt        d|z        d|
d|d|d|j                  d|d}|r|d|z  z  }|r|d|z  z  }|d|z  z  }|r|dddz  }|S # t        $ r Y y w xY w)Nr  r  qop	algorithmMD5opaquery  r  ,r`   z%08xzqop '%s' is not supported.z
username="z
", realm="z
", nonce="z", uri="z", response="r  z, opaque="%s"z, digest="%s"z, algorithm="%s"z, qop=auth, nc=z
, cnonce=")r   KeyErrorget_algorithm_implsr  r  r   rP   get_entity_digestr   r   r  r  r  r
  r   )r   r
  r  r  r  r  r  r  HKDrm  r  entdigA1A2respdigncvaluecnoncenoncebitr  s                       rT   r  z+AbstractDigestAuthHandler.get_authorizationv  s   		MEME((5/Ce4I XXh-F ((329;;11%Fb< 88++CHHd;FF+(&
 ;25!B% 89Gsyy~%'  A% #$ "'t///G__U+F+0'661R5QH2)G 7#=>>
 #'ucll")+ Of,,DOf,,D"Y..HHDg  		s   ?G 	G#"G#c                 V    |dk(  rd n|dk(  rd nt        d|z        fd}|fS )Nr  c                 f    t        j                  | j                  d            j                         S Nrz  )r  md5r  r  xs    rT   ru  z?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s!    '++ahhw&78BBD rU   SHAc                 f    t        j                  | j                  d            j                         S r  )r  r  r  r  r!  s    rT   ru  z?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s!    ',,qxx'89CCE rU   z.Unsupported digest authentication algorithm %rc                      | d|      S )Nry  r   )r  dr  s     rT   ru  z?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s    !q!,- rU   )rE   )r   r  r  r  s      @rT   r  z-AbstractDigestAuthHandler.get_algorithm_impls  sG    DA%EA  ,.78 9 9-"urU   c                      y rW   r   )r   rP   r  s      rT   r  z+AbstractDigestAuthHandler.get_entity_digest  s    rU   rW   )r   r   r   r   r  r  r  r
  r  r  r  r   rU   rT   r'   r'   4  s,    I(
	<|rU   r'   c                       e Zd Z	 dZdZd Zy)r(   r    c                 ~    t        |j                        d   }| j                  d|||      }| j                          |S )Nr`   r  )r   r   r  r  r   r
  rt   r4  r5  ru   r   retrys           rT   r  z$HTTPDigestAuthHandler.http_error_401  s@    %a(**+=+/g? rU   N)r   r   r   r  r-  r  r   rU   rT   r(   r(     s     "KMrU   r(   c                       e Zd ZdZdZd Zy)r)   Proxy-Authorizationr)  c                 f    |j                   }| j                  d|||      }| j                          |S r  )r   r  r  r+  s           rT   r  z%ProxyDigestAuthHandler.http_error_407  s6    xx**+?+/g? rU   N)r   r   r   r  r-  r  r   rU   rT   r)   r)     s    'KMrU   r)   c                   ,    e Zd ZddZd Zd Zd Zd Zy)AbstractHTTPHandlerNc                 j    ||| _        y t         j                  j                  j                  | _        y rW   )r  r  HTTPConnection
debuglevel_debuglevel)r   r4  s     rT   r   zAbstractHTTPHandler.__init__  s&    )3)?:T[[E_E_EjEjrU   c                     || _         y rW   )r5  )r   levels     rT   set_http_debuglevelz'AbstractHTTPHandler.set_http_debuglevel  s
     rU   c                     t         j                  j                  j                  |j                  |j                               S rW   )r  r  r3  _get_content_lengthrP   r   r   r   s     rT   r:  z'AbstractHTTPHandler._get_content_length  s2    {{))==LL " 	"rU   c                    |j                   }|st        d      |j                  |j                  }t        |t              rd}t        |      |j                  d      s|j                  dd       |j                  d      sR|j                  d      sA| j                  |      }||j                  dt	        |             n|j                  dd       |}|j                         r&t        |j                        \  }}t        |      \  }}	|j                  d      s|j                  d|       | j                  j                  D ]9  \  }
}|
j                         }
|j                  |
      r(|j                  |
|       ; |S )	Nno host givenz\POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.zContent-type!application/x-www-form-urlencodedr   Transfer-encodingchunkedr   )r   r   rP   r  r  r   r   r   r:  r   r   r   r   r*  r   r   )r   r   r   rP   r5  content_lengthsel_hostrT  selsel_pathrj   r   s               rT   do_request_zAbstractHTTPHandler.do_request_  so   ||?++<<#<<D$$Dn$%%n5//"79 &&'78#../BC!%!9!9'!B!-33,c..AC 33/< $W%5%56KFC!+CHh!!&)++FH=;;11 	=KD%??$D%%d+//e<	=
 rU   c           	         	 |j                   }|st        d       ||fd|j                  i|}|j                  | j                         t        |j                        }|j                  |j                  j                         D ci c]  \  }}||vr|| c}}       d|d<   |j                         D 	
ci c]  \  }	}
|	j                         |
 }}	}
|j                  r0i }d}||v r||   ||<   ||= |j                  |j                  |       	 	 |j                  |j                         |j                  |j                   ||j#                  d             |j'                         }|j*                  r!|j*                  j)                          d |_        |j-                         |_        |j0                  |_        |S c c}}w c c}
}	w # t$        $ r}t        |      d }~ww xY w#  |j)                           xY w)	Nr=  rQ   r   
Connectionr.  ru   r?  )encode_chunked)r   r   rQ   set_debuglevelr5  r  r   updateru   r   titler   
set_tunnelr   r   r   rP   r   r~   getresponser   sockr   rO   reasonr5  )r   
http_classr
  http_conn_argsr   r&  ru   rG  rH  rj   r   tunnel_headersproxy_auth_hdrerrrt  s                  rT   r   zAbstractHTTPHandler.do_open  s   	 xx?++ tCS[[CNC	))*s,,-):):)< -AG+ 1 - 	. !(6=mmoFs4::<$FFN2N(181H~. N+LL))>LB		$		#..*CLL#((G),8K)L  N A 66FFLLNAF  " e- G   $sm#$	GGIs7   G
9GAG G) 	G&G!!G&&G) )G<rW   )r   r   r   r   r8  r:  rE  r   r   rU   rT   r1  r1    s    k!"
$L@rU   r1  c                   *    e Zd Zd Zej
                  Zy)r*   c                 V    | j                  t        j                  j                  |      S rW   )r   r  r  r3  r   r
  s     rT   	http_openzHTTPHandler.http_open\  s    ||DKK66<<rU   N)r   r   r   rY  r1  rE  r  r   rU   rT   r*   r*   Z  s    = '22LrU   r*   r  c                   2    e Zd ZddZd Zej                  Zy)rL   Nc                 *   ||n#t         j                  j                  j                  }t        j                  | |       |Ct         j                  j                  j                  }t         j                  j                  |      }|||_        || _	        y rW   )
r  r  r  r4  r1  r   	_http_vsn_create_https_contextcheck_hostname_context)r   r4  r?   r^  http_versions        rT   r   zHTTPSHandler.__init__e  sq    '1'=4;;C^C^CiCiJ((z:#{{::DD++;;LI))7&#DMrU   c                 n    | j                  t        j                  j                  || j                        S )NrA   )r   r  r  r  r_  rX  s     rT   
https_openzHTTPSHandler.https_openo  s-    << ; ;S(,   7 7rU   NNN)r   r   r   r   rb  r1  rE  r  r   rU   rT   rL   rL   c  s    	$	7 ,77rU   rL   c                   (    e Zd ZddZd Zd ZeZeZy)r   Nc                 R    dd l }||j                  j                         }|| _        y r  )http.cookiejar	cookiejar	CookieJar)r   rg  r  s      rT   r   zHTTPCookieProcessor.__init__x  s$    002I"rU   c                 <    | j                   j                  |       |S rW   )rg  add_cookie_headerr;  s     rT   r  z HTTPCookieProcessor.http_request~  s    ((1rU   c                 >    | j                   j                  ||       |S rW   )rg  extract_cookies)r   r   r   s      rT   r6  z!HTTPCookieProcessor.http_response  s    &&x9rU   rW   )r   r   r   r   r  r6  r  r7  r   rU   rT   r   r   w  s    # !M"NrU   r   c                       e Zd Zd Zy)r/   c                 6    |j                   }t        d|z        )Nzunknown url type: %s)r   r   )r   r
  r   s      rT   r  zUnknownHandler.unknown_open  s    xx-455rU   N)r   r   r   r  r   rU   rT   r/   r/     s    6rU   r/   c                 x    	 i }| D ]1  }|j                  dd      \  }}|d   dk(  r|d   dk(  r|dd }|||<   3 |S )N=r`   r   r  r]   )r  )lparsedeltrG  rH  s        rT   r  r    s]    HF yya 1Q43;1R5C<!BAq		
 MrU   c                    	 g }d}dx}}| D ]H  }|r||z  }d}|r|dk(  rd}|dk(  rd}||z  }$|dk(  r|j                  |       d}=|dk(  rd}||z  }J |r|j                  |       |D cg c]  }|j                          c}S c c}w )Nr   F\Tr  r  )rl   r  )r  respartescaper
   curs         rT   r  r    s     CDFU CKDFd{CKD#:JJtD#:E-2 

4%()TDJJL)))s   .Bc                   "    e Zd Zd ZdZd Zd Zy)r+   c                     |j                   }|d d dk(  rK|dd dk7  rC|j                  r7|j                  dk7  r(|j                  | j                         vrt        d      y | j	                  |      S )Nr;   rd  r  rO  	localhost-file:// scheme is supported only on localhost)r   r   	get_namesr   open_local_file)r   r
  rO   s      rT   	file_openzFileHandler.file_open  sm    llr7d?s1Qx3CHHK'88t~~//NOO 0 '',,rU   Nc                    t         j                  f	 t        t        j                  d      d   t        j                  t        j
                               d   z         t         _        t         j                  S t         j                  S # t        j                  $ r1 t        j                  d      ft         _        Y t         j                  S w xY w)Nr|  r;   )r+   namesr  r  gethostbyname_exgethostnamegaierrorgethostbynamer   s    rT   r~  zFileHandler.get_names  s    $I$)++K8;++F,>,>,@A!DE%F!
    {    ?? I%+%9%9+%F$H!   Is   AB 2C
Cc                 D   dd l }dd l}|j                  }|j                  }t	        |      }	 t        j                  |      }|j                  }|j                  j                  |j                  d      }	|j                  |      d   }
 |j                  d|
xs d||	fz        }|rt        |      \  }}|rsBt        |      | j                         v r'|r	d|z   |z   }nd|z   }t!        t#        |d      ||      S t'        d      # t$        $ r}t'        |      d }~ww xY w)	Nr   Tusegmtz6Content-type: %s
Content-length: %d
Last-modified: %s

text/plainfile://rbzfile not on local host)email.utils	mimetypesr   r   r5   re   statst_sizeutils
formatdatest_mtime
guess_typemessage_from_stringr   _safe_gethostbynamer~  r   rN   r~   r   )r   r
  emailr  r   rq   	localfilestatsry   modifiedmtyperu   r  origurlexps                  rT   r  zFileHandler.open_local_file  s$   xx<< *		 GGI&E==D{{--ennT-JH((215E/e//K&,h789G '-
d1$74>>;KK'$.9G'(2G!$y$"7'JJ /00  	 3-	 s   CD 	DDD)r   r   r   r  r  r~  r  r   rU   rT   r+   r+     s    - E!1rU   r+   c                 `    	 t        j                  |       S # t         j                  $ r Y y w xY wrW   )r  r  r  )r   s    rT   r  r    s.    ##D))?? s    --c                       e Zd Zd Zd Zy)r,   c                 $   dd l }dd l}|j                  }|st        d      t	        |      \  }}||j
                  }nt        |      }t        |      \  }}|rt        |      \  }}nd }t        |      }|xs d}|xs d}	 t        j                  |      }t        |j                        \  }	}
|	j                  d      }t!        t#        t        |            }|d d |d   }}|r
|d   s|dd  }	 | j%                  ||||||j&                        }|xr dxs d}|
D ]9  }t)        |      \  }}|j+                         d	k(  s%|d
v s*|j-                         }; |j/                  ||      \  }}d}|j1                  |j2                        d   }|r|d|z  z  }||dk\  r|d|z  z  }t5        j6                  |      }t9        |||j2                        S # t        $ r}t        |      d }~ww xY w# |j:                  $ r}t        |      |d }~ww xY w)Nr   ftp error: no host givenr   rO  r]   r`   r  Dr   aAr   r  r&  r  zContent-type: %s
zContent-length: %d
)ftplibr  r   r   r   FTP_PORTrm   r   r   r   r  r  r~   r   r   r  r   mapconnect_ftprQ   r   r   upperretrfiler  r   r  r  r   
all_errors)r   r
  r  r  r   r  rm  r  r5  rf   attrsdirsrY   fwr   attrr   rt   retrlenru   r  r  s                         rT   ftp_openzFTPHandler.ftp_open  s)   xx566%
d<??Dt9D  %
d'-LD&Ft}zr2	 ''-D !.ezz#C&'#2YRdQ8D	)!!$dD#++NB<C&3D ))$/e::<6):: ;;=D	)
 ++dD1KBG((6q9E/%77"w!|1G;;//8Gb'3<<881  	 3-	 2    	)3-S(	)s>   G 1AG/ G/ BG/ 	G,G''G,/H>H

Hc           	      &    t        ||||||d      S )NF)
persistent)
ftpwrapper)r   rm  r  r   r  r  rQ   s          rT   r  zFTPHandler.connect_ftp1  s    $dD'%*, 	,rU   N)r   r   r   r  r  r   rU   rT   r,   r,     s    2)h,rU   r,   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)r-   c                 J    i | _         i | _        d| _        d| _        d| _        y )Nr   <   r  )cacherQ   soonestdelay	max_connsr   s    rT   r   zCacheFTPHandler.__init__8  s%    

rU   c                     || _         y rW   )r  )r   ts     rT   
setTimeoutzCacheFTPHandler.setTimeout?  s	    
rU   c                     || _         y rW   )r  )r   rE  s     rT   setMaxConnszCacheFTPHandler.setMaxConnsB  s	    rU   c                 |   |||dj                  |      |f}|| j                  v r/t        j                         | j                  z   | j                  |<   nKt        ||||||      | j                  |<   t        j                         | j                  z   | j                  |<   | j                          | j                  |   S )NrO  )joinr  r   r  rQ   r  check_cache)r   rm  r  r   r  r  rQ   r   s           rT   r  zCacheFTPHandler.connect_ftpE  s    D$7$** $		djj 8DLL(vtT)-w8DJJsO $		djj 8DLLzz#rU   c                    t        j                          }| j                  |k  rht        | j                  j	                               D ]B  \  }}||k  s| j
                  |   j                          | j
                  |= | j                  |= D t        t        | j                  j                                     | _        t        | j
                        | j                  k(  rt        | j                  j	                               D ]0  \  }}|| j                  k(  s| j
                  |= | j                  |=  n t        t        | j                  j                                     | _        y y rW   )r   r  r   rQ   r   r  r   minvaluesro   r  )r   r  rG  rH  s       rT   r  zCacheFTPHandler.check_cacheP  s   IIK<<1T\\//12 (1q5JJqM'')

1Q	(
 4 3 3 567 tzz?dnn,T\\//12 1$

1Q	
 tDLL$7$7$9:;DL -rU   c                     | j                   j                         D ]  }|j                           | j                   j                          | j                  j                          y rW   )r  r  r   clearrQ   )r   conns     rT   clear_cachezCacheFTPHandler.clear_cached  sG    JJ%%' 	DJJL	

rU   N)	r   r   r   r   r  r  r  r  r  r   rU   rT   r-   r-   5  s     	<(rU   r-   c                       e Zd Zd Zy)r.   c                 h   |j                   }|j                  dd      \  }}|j                  dd      \  }}t        |      }|j                  d      rt	        j
                  |      }|d d }|sd}t        j                  d|t        |      fz        }t        t        j                  |      ||      S )Nry  r`   r  z;base64itext/plain;charset=US-ASCIIz$Content-type: %s
Content-length: %d
)r   r  r   endswithr~  decodebytesr  r  ro   r   ioBytesIO)r   r
  rO   rT  rP   	mediatyperu   s          rT   	data_openzDataHandler.data_openk  s     llyyQ'**S+	4  %i(%%d+D!#2I5I++,TD	"-# $ "**T*GS99rU   N)r   r   r   r  r   rU   rT   r.   r.   j  s    :rU   r.   r<  nt)r5   r4   c                     	 t        |       S rW   )r   pathnames    rT   r5   r5     s    	Cx  rU   c                     	 t        |       S rW   )r
   r  s    rT   r4   r4     s    	BXrU   c                       e Zd Z	 dZdez  ZddZd Zd Zd Z	d Z
ddZdd	Zdd
ZddZd ZddZddZd Zerd ZddZd Zd Zd ZddZy)r9   Nr   c                 v   dd| j                   j                  iz  }t        j                  |t        d       |
t               }|| _        |j                  d      | _        |j                  d      | _	        d| j                  fdg| _        g | _        t        j                  | _        d | _        t"        | _        y )	NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsclassr  )
stacklevelkey_file	cert_filez
User-Agent)Acceptz*/*)r  r   rB   rC   rD   r6   rv  r   r  r  versionr   _URLopener__tempfilesre   r}   _URLopener__unlink	tempcacheftpcache)r   rv  x509r5  s       rT   r   zURLopener.__init__  s    47>@W@W6XYc-!<? lG,+.($,,79JK		 !rU   c                 $    | j                          y rW   )r   r   s    rT   __del__zURLopener.__del__  s    

rU   c                 $    | j                          y rW   )cleanupr   s    rT   r   zURLopener.close  s    rU   c                     | j                   r2| j                   D ]  }	 | j                  |        | j                   d d = | j                  r| j                  j	                          y y # t        $ r Y Yw xY wrW   )r  r  r~   r  r  )r   rY   s     rT   r  zURLopener.cleanup  ss     (( MM$'
   #>>NN  "   s   A''	A32A3c                 <    	 | j                   j                  |       y rW   )r   rl   )r   r   s     rT   	addheaderzURLopener.addheader  s    	5t$rU   c                    	 t        t        |            }t        |d      }| j                  r9|| j                  v r+| j                  |   \  }}t	        |d      }t        |||      S t        |      \  }}|sd}|| j                  v r0| j                  |   }t        |      \  }}	t        |	      \  }
}|
|f}nd }d|z   }|| _	        |j                  dd      }t        | |      r|dk(  r'|r| j                  |||      S | j                  ||      S 	 | t        | |      |      S  t        | |      ||      S # t        t         f$ r  t"        $ r}t#        d	|      |d }~ww xY w)
Nz%/:=&?~#+!$,;'@()*[]|rQ  r  rY   open_-r   r  zsocket error)r	   r   r
   r  rN   r   r   rv  r   r   rC  r   open_unknown_proxyopen_unknownr   r   r   r~   )r   r	  rP   rq   ru   rt   urltyperO   rf  	proxyhostr   r   rj   r5  s                 rT   rN   zURLopener.open  s}   D7+,&=>>>g7 $w 7Hgh%Bb'733!'*Gdll"LL)E!+E!2GY'	2ND(/CE 	||C%tT"d.?&?..ugtDD(($77	8|*wtT*3//*wtT*3558$ 	 	8.#.C7	8s   D8 %D8 8E"EE"c                 :    	 t        |      \  }}t        dd|      )N	url errorzunknown url typer   r~   )r   r	  rP   r   rO   s        rT   r  zURLopener.open_unknown  s#    =w'	ck#5t<<rU   c                 @    	 t        |      \  }}t        dd|z  |      )Nr  zinvalid proxy for %sr  )r   rf  r	  rP   r   rO   s         rT   r  zURLopener.open_unknown_proxy	  s(    =w'	ck#9D#@%HHrU   c                 .   	 t        t        |            }| j                  r|| j                  v r| j                  |   S t        |      \  }}|R|r|dk(  rK	 | j	                  |      }|j                         }|j                          t        t        |      d         |fS | j                  ||      }	 |j                         }	|rt        |d      }
nt        |      \  }}t        |xs d      \  }}t        |xs d      \  }}t        |xs d      \  }}t        j                  j                  |      d   }t!        j"                  |      \  }}| j$                  j'                  |       t        j(                  |d      }
	 ||	f}| j                  || j                  |<   d}d}d}d}d|	v rt+        |	d	         }|r
 ||||       |j-                  |      x}rD|t/        |      z  }|
j1                  |       |dz  }|r
 ||||       |j-                  |      x}rD|
j                          	 |j                          |dk\  r||k  rt3        d
||fz  |      |S # t        $ r Y w xY w# |
j                          w xY w# |j                          w xY w)NrY   r`   rZ   r   r\   r]   r   r^   r_   ra   )r	   r   r  r   r  rd   r   r5   r   r~   rN   r   r   re   rf   splitextrh   mkstempr  rl   fdopenrm   rn   ro   rp   r   )r   rO   rq   rr   rP   r   url1rt   r   ru   rv   garbagerf   suffixfdrw   rx   ry   rn   rz   r{   s                        rT   retrievezURLopener.retrieve  s   	;Ys^$>>cT^^3>>#&&_
dTTV^))$/wwy
#Jt$4Q$78$>> YYsD!"	ggiG8T* *3 *4:2 6 +DJB 7g *4:2 6g))$/2!)!1!1&!9X  ''1iiD)!7*>>-*0DNN3'#w.w'789DxT2!wwr{*e*CJ&DIIe$MH!"8R6  "wwr{*e* 		HHJ 19&C, &( ( [  F 		HHJs9   A	I 4CJ BI- J 	I*)I*-I??J Jc                    	 d }d }t        |t              r,t        |      \  }}|rt        |      \  }}t	        |      }|}nq|\  }}t        |      \  }}t        |      \  }	}
|
}d }|	j                         dk7  rd }n6t        |
      \  }}
|rt        |      \  }}|r	|	d||
}t        |      r|}|st        dd      |r>t	        |      }t        j                  |j                               j                  d      }nd }|r>t	        |      }t        j                  |j                               j                  d      }nd } ||      }i }|rd|z  |d<   |rd|z  |d<   |r||d	<   d
|d<   | j                  D ]
  \  }}|||<    |d|d<   |j                  d|||       n|j                  d||       	 |j                         }d|j(                  cxk  rdk  r(n n%t+        ||j,                  d|z   |j(                        S | j/                  ||j0                  |j(                  |j2                  |j,                  |      S # t         j"                  j$                  $ r t'        d      w xY w)Nr  z://z
http errorr=  rz  zBasic %sr.  r  r   r   rG  r>  zContent-Typer   r   rH  z$http protocol error: bad status liner2  r3  http:)r  r  r   r   r   r   r   r}  r~   r~  r  r  r  r   r   rN  r  r  BadStatusLiner   statusr   r5  
http_errorrt   rP  )r   connection_factoryrO   rP   user_passwdproxy_passwdr   r   realhostr  r   
proxy_authr  	http_connru   r  r   r   s                     rT   _open_generic_httpzURLopener._open_generic_httpM  s   
	 c3'_ND($.t$4!Tt}H ND(!+D!1L$&x0MGTCK}}&(!+D!1$,6x,@)K.5xFH)#D7<AA"<0L)),*=*=*?@GGPJJ!+.K##K$6$6$89@@IDD&t,	-7*-DG)*(2T(9GO$&GFO
 !(!__ 	$MFE#GFO	$ &IGN#fhg>eXw?	C ,,.H (//'C'hgm&oo/ / ??X[[(,,F F {{(( 	CABB	Cs   9I )I-c                 Z    	 | j                  t        j                  j                  ||      S rW   )r  r  r  r3  r   rO   rP   s      rT   	open_httpzURLopener.open_http  s$     &&t{{'A'A3MMrU   c                     	 d|z  }t        | |      r,t        | |      }| ||||||      }	n |||||||      }	|	r|	S | j                  |||||      S )Nzhttp_error_%d)r   r   r  )
r   rO   rt   errcodeerrmsgru   rP   rj   r   rw   s
             rT   r  zURLopener.http_error  su    	E
 (4T4(F|R&'BR&'4Hf}&&sBIIrU   c                 B    	 |j                          t        ||||d       rW   )r   r   r   rO   rt   r  r  ru   s         rT   r  zURLopener.http_error_default  s!    L

Wfgt<<rU   c                 r   | j                   s| j                  r}t        j                  j                  j
                  }t        j                  j                  |      }|j                  | j                  | j                          |j                  
d|_        nd }t        j                  j	                  ||      S )NTrA   )	r  r  r  r  r  r\  r]  load_cert_chainpost_handshake_auth)r   r   r`  r?   s       rT   _https_connectionzURLopener._https_connection  s    }}#{{::DD++;;LI''F ..:26G/;;..tW.EErU   c                 >    	 | j                  | j                  ||      S rW   )r  r  r  s      rT   
open_httpszURLopener.open_https  s     %**4+A+A3MMrU   c                     	 t        |t              st        d      |d d dk(  r)|dd dk7  r!|dd j                         dk7  rt	        d      | j                  |      S )	NzEfile error: proxy support for file protocol currently not implementedr;   rd  r  rO     z
localhost/r}  )r  r  r   r   rE   r  r   s     rT   	open_filezURLopener.open_file  se    =#s#bccr7d?s1Qx33q9??3D3TLMM'',,rU   c                    	 dd l }dd l}t        |      \  }}t        |      }	 t	        j
                  |      }|j                  }	|j                  j                  |j                  d      }
|j                  |      d   } |j                  d|xs d|	|
fz        }|s&|}|d d dk(  rd|z   }t!        t#        |d	      ||      S t%        |      \  }}|sht'        j(                  |      t+               ft-               z   v r=|}|d d dk(  rd|z   }n|d d
 dk(  rt/        d|z        t!        t#        |d	      ||      S t        d      # t        $ r%}t        |j                  |j                        d }~ww xY w)Nr   Tr  z6Content-Type: %s
Content-Length: %d
Last-modified: %s
r  r`   rO  r  r  r;   z./zAlocal file url may start with / or file:. Unknown url of type: %sz#local file error: not on local host)r  r  r   r5   re   r  r~   r   strerrorrq   r  r  r  r  r  r  r   rN   r   r  r  r|  thishostrE   )r   rO   r  r  r   rY   	localnamer  ery   r  r  ru   urlfiler  s                  rT   r  zURLopener.open_local_file  s   _
d &		3GGI&E }};;))%..)F$$S)!,+%++G"lD(345 GBQx3#d*d9d3WgFF%
d##D)y{nxz.IJGBQx3#d*bqT! !dgj!jkkd9d3WgFF<==-  	31::qzz22	3s   E 	E5 E00E5c                 :   	 t        |t              st        d      dd l}t	        |      \  }}|st        d      t        |      \  }}t        |      \  }}|rt        |      \  }}nd }t        |      }t        |xs d      }t        |xs d      }t        j                  |      }|sdd l}|j                  }nt        |      }t        |      \  }}	t        |      }|j                  d      }
|
d d |
d   }}
|
r
|
d   s|
dd  }
|
r
|
d   sd|
d<   |||dj!                  |
      f}t#        | j$                        t&        kD  rLt)        | j$                        D ]4  }||k7  s	| j$                  |   }| j$                  |= |j+                          6 	 || j$                  vrt-        |||||
      | j$                  |<   |sd}nd	}|	D ]9  }t/        |      \  }}|j1                         d
k(  s%|dv s*|j3                         }; | j$                  |   j5                  ||      \  }}|j7                  d|z         d   }d}|r|d|z  z  }||dk\  r|d|z  z  }t9        j:                  |      }t=        ||d|z         S # t?               $ r}t        d|       |d }~ww xY w)NzCftp error: proxy support for ftp protocol currently not implementedr   r  r   rO  r]   r`   r  r  r   r  zftp:zContent-Type: %s
zContent-Length: %d
ftp error: ) r  r  r   r  r   r   r   r   r   r  r  r  r  rm   r   r  r  ro   r  MAXFTPCACHEr   r   r  r   r   r  r  r  r  r  r   	ftperrors)r   rO   r  r   rf   r  rm  r  r  r  r  rY   r   rG  rH  r   r  r   rt   r  r  ru   r  s                          rT   open_ftpzURLopener.open_ftp  s   #s#`aa_
d8$>??%
d%
dT 2vft}tzr"2&##D)??Dt9D &et}zz##2YRdQQRQ3aD$.t}}+$--( 8a(Aa(GGI	
	9$--'tVT4> c"$ ))$/e::<6):: ;;=D	)
 !MM#.77dCMR((#6q9EG/%77"w!|1G;;//8Gb'6C<88{ 	9[./S8	9s&   AI9 )I9 .B
I9 9JJJc           
      V   	 t        |t              st        d      	 |j                  dd      \  }}|sd}|j                  d      }|dk\  rd	||d  vr||dz   d  }|d | }nd
}g }|j                  dt        j                  dt        j                  t        j                                     z         |j                  d|z         |dk(  r4t        j                  |j                  d            j                  d      }nt        |      }|j                  dt!        |      z         |j                  d
       |j                  |       dj#                  |      }t%        j&                  |      }t)        j*                  |      }t-        |||      S # t        $ r t        dd      w xY w)NzEdata error: proxy support for data protocol currently not implementedr  r`   z
data errorzbad data URLr  ;r   rp  r   zDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %sr~  rz  zlatin-1zContent-Length: %d
)r  r  r   r  rE   r~   rfindrl   r   strftimegmtimer~  r  r  r  r   ro   r  r  r  r  StringIOr   )	r   rO   rP   r   semirP  r5  ru   fs	            rT   	open_datazURLopener.open_data7  s   #s#bcc	899S!,LT4 0Dzz#19DK/DFG}H;DH

:dmm,G,0KK		,DF F 	G

%,-x%%dkk'&:;BB9MD4=D

'#d)34

2

4iin++C0KK!Wc**5  	8,77	8s   F F(rW   rc  )r   r   r   r  r   r  r   r  r   r  r  rN   r  r  r  r  r  r  r  rF   r  r  r  r  r*  r4  r   rU   rT   r9   r9     s     K ;.G!4#%"8H=
I:|ZFxNJ =
 	F	N->@89t'+rU   r9   c                       e Zd Z	 d Zd ZddZd ZddZddZddZ	dd	Z
	 	 dd
Z	 	 ddZddZddZddZddZddZd Zy)r:   c                 `    t        j                  | g|i | i | _        d| _        d| _        y )Nr   r<  )r9   r   
auth_cachetriesmaxtries)r   r   r  s      rT   r   zFancyURLopener.__init__d  s/    41$1&1
rU   c                 &    	 t        ||d|z   |      S )Nr  )r   r  s         rT   r  z!FancyURLopener.http_error_defaultj  s    A"gw}g>>rU   Nc                 @   	 | xj                   dz  c_         	 | j                  rQ| j                   | j                  k\  r8t        | d      r| j                  }n| j                  } |||dd|      d| _         S | j                  ||||||      }|d| _         S # d| _         w xY w)Nr`   http_error_500r(  z)Internal Server Error: Redirect Recursionr   )r8  r9  r   r<  r  redirect_internal)	r   rO   rt   r  r  ru   rP   r   rw   s	            rT   r^  zFancyURLopener.http_error_302n  s    3

a
	}}t}}!<4!12..D22DCSG#% DJ	 ++CWf,3T;FDJDJs   AB 5B 	Bc                    d|v r|d   }nd|v r|d   }ny |j                          t        | j                  dz   |z   |      }t        |      }|j                  dvrt        |||d|z  z   ||      | j                  |      S )NrK  rL  ry  rM  z( Redirection to url '%s' is not allowed.)r   r   r   r   rT  r   rN   )	r   rO   rt   r  r  ru   rP   rD  r[  s	            rT   r=  z FancyURLopener.redirect_internal  s     Z(FgU^F

 S3.7F# ??">>FG"FOP#R) )
 yy  rU   c                 0    	 | j                  ||||||      S rW   r^  r   rO   rt   r  r  ru   rP   s          rT   r_  zFancyURLopener.http_error_301  s     8""3GVWdKKrU   c                 0    	 | j                  ||||||      S rW   r@  rA  s          rT   r`  zFancyURLopener.http_error_303  s     I""3GVWdKKrU   c                 ^    	 || j                  ||||||      S | j                  |||||      S rW   )r^  r  rA  s          rT   ra  zFancyURLopener.http_error_307  >    ?<&&sB$OO**3GVWMMrU   c                 ^    	 || j                  ||||||      S | j                  |||||      S rW   )r_  r  rA  s          rT   rb  zFancyURLopener.http_error_308  rD  rU   c                    	 d|vrt         j                  | |||||       |d   }t        j                  d|      }	|	st         j                  | |||||       |	j	                         \  }
}|
j                         dk7  rt         j                  | |||||       |st         j                  | |||||       d| j                  z   dz   }| t        | |      ||      S  t        | |      |||      S )Nr  ![ 	]*([^ 	]+)[ 	]+realm="([^"]*)"r  retry__basic_authr9   r  r  matchr  r   r   r   r   rO   rt   r  r  ru   rP   r,  stuffrK  rT  r  rj   s                rT   r  zFancyURLopener.http_error_401  s   	=W,((sB)0&'C*+?G((sB)0&'C<<>W$((sB)0&'C((sB$))#m3<%74%c511%74%c5$77rU   c                    	 d|vrt         j                  | |||||       |d   }t        j                  d|      }	|	st         j                  | |||||       |	j	                         \  }
}|
j                         dk7  rt         j                  | |||||       |st         j                  | |||||       d| j                  z   dz   }| t        | |      ||      S  t        | |      |||      S )Nr  rG  r  retry_proxy_rI  rJ  rL  s                rT   r  zFancyURLopener.http_error_407  s   	=w.((sB)0&'C,-?G((sB)0&'C<<>W$((sB)0&'C((sB		)M9<%74%c511%74%c5$77rU   c                    t        |      \  }}d|z   |z   }| j                  d   }t        |      \  }}	t        |	      \  }	}
|	j                  d      dz   }|	|d  }	| j	                  |	||      \  }}|s|sy t        |d      dt        |d      d|	}	d|	z   |
z   | j                  d<   || j                  |      S | j                  ||      S )Nhttp://r  re  r`   r   r  ry  r   rv  r   r   get_user_passwdr
   rN   r   rO   r  rP   r   r   rD  rf  r  r  proxyselectorr   rm  r  s                 rT   retry_proxy_http_basic_authz*FancyURLopener.retry_proxy_http_basic_auth  s    #ChT!H,V$'.#-i#8 	=NN3!#abM	++Iua@f"'2"6"'R"8)E	(94}DV<99V$$99VT**rU   c                    t        |      \  }}d|z   |z   }| j                  d   }t        |      \  }}	t        |	      \  }	}
|	j                  d      dz   }|	|d  }	| j	                  |	||      \  }}|s|sy t        |d      dt        |d      d|	}	d|	z   |
z   | j                  d<   || j                  |      S | j                  ||      S )Nhttps://r   re  r`   r   r  ry  rR  rT  s                 rT   retry_proxy_https_basic_authz+FancyURLopener.retry_proxy_https_basic_auth  s    #Chd"X-W%'.#-i#8 	=NN3!#abM	++Iua@f"'2"6"'R"8)E	 *Y 6 FW<99V$$99VT**rU   c                     t        |      \  }}|j                  d      dz   }||d  }| j                  |||      \  }}|s|sy t        |d      dt        |d      d|}d|z   |z   }	|| j	                  |	      S | j	                  |	|      S )Nre  r`   r   r  ry  rQ  r   r   rS  r
   rN   
r   rO   r  rP   r   r   r   rm  r  rD  s
             rT   r  z$FancyURLopener.retry_http_basic_auth	  s    #ChIIcNQABx++D%;f"4b1"63T;T!H,<99V$$99VT**rU   c                     t        |      \  }}|j                  d      dz   }||d  }| j                  |||      \  }}|s|sy t        |d      dt        |d      d|}d|z   |z   }	|| j	                  |	      S | j	                  |	|      S )Nre  r`   r   r  ry  rX  r[  r\  s
             rT   retry_https_basic_authz%FancyURLopener.retry_https_basic_auth	  s    #ChIIcNQABx++D%;f"4b1"63T;d"X-<99V$$99VT**rU   c                     |dz   |j                         z   }|| j                  v r|r| j                  |= n| j                  |   S | j                  ||      \  }}|s|r||f| j                  |<   ||fS )Nre  )r   r7  prompt_user_passwd)r   r   r  r  r   rm  r  s          rT   rS  zFancyURLopener.get_user_passwd$	  sv    ckDJJL($//!OOC(s++..tU;f64.4??3/V|rU   c           	          	 dd l }	 t        d|d|d      }|j                  d|d|d|d      }||fS # t        $ r t                Y yw xY w)Nr   zEnter username for z at z: zEnter password for z in r  )getpassinputKeyboardInterruptprint)r   r   r  rb  rm  r  s         rT   r`  z!FancyURLopener.prompt_user_passwd/	  sW    1	E4HID__ud&$ %F<  	G	s   08 AArW   )NF)r   )r   r   r   r   r  r^  r=  r_  r`  ra  rb  r  r  rV  rY  r  r^  rS  r`  r   rU   rT   r:   r:   a  sm    I?$!8LLNN FJ82 FJ82+$+$++	
rU   r:   c                  F    	 t         t        j                  d      a t         S )Nr|  )
_localhostr  r  r   rU   rT   r|  r|  ?	  s!    B))+6
rU   c                     	 t         :	 t        t        j                  t        j                               d         a t         S t         S # t        j
                  $ r) t        t        j                  d      d         a Y t         S w xY w)Nr;   r|  )	_thishostr  r  r  r  r  r   rU   rT   r"  r"  G	  sx    6	Gf55f6H6H6JKANOI 9  	Gf55kB1EFI	Gs   3A 4BBc                  <    	 t         dd l} | j                  a t         S r  )
_ftperrorsr  r  )r  s    rT   r)  r)  R	  s    ;&&
rU   c                  F    	 t         t        j                  d      a t         S r   )
_noheadersr  r  r   rU   rT   	noheadersrn  [	  s!    /..r2
rU   c                   >    e Zd Z	 	 	 d	dZd Zd Zd Zd Zd Zd Z	y)
r  Nc                     || _         || _        || _        || _        || _        || _        d| _        || _        	 | j                          y #  | j                           xY wr  )
rm  r  r   r  r  rQ   refcount	keepaliveinitr   )r   rm  r  r   r  r  rQ   r  s           rT   r   zftpwrapper.__init__h	  s[    				#	IIK	JJLs   A Ac                    dd l }d| _        |j                         | _        | j                  j	                  | j
                  | j                  | j                         | j                  j                  | j                  | j                         dj                  | j                        }| j                  j                  |       y )Nr   rO  )r  busyFTPrN  connectr   r  rQ   loginrm  r  r  r  cwd)r   r  _targets      rT   rs  zftpwrapper.initx	  sw    	::<DIIt||<tyy$++.((499%WrU   c                 8   dd l }| j                          |dv rd}d}nd|z   }d}	 | j                  j                  |       d }|r&|s$	 d|z   }| j                  j                  |      \  }}|s| j                  j                  d       |rY| j                  j                         }		 	 | j                  j                  |       	 | j                  j                  |	       d|z   }nd}| j                  j                  |      \  }}d| _        t        |j                  d      | j                        }
| xj                   dz  c_        |j#                          |
fS # |j                  $ r/ | j                          | j                  j                  |       Y Tw xY w# |j                  $ r+}t        |      d d dk7  rt        d	|       |Y d }~cd }~ww xY w# |j                  $ r}t        d
|z        |d }~ww xY w# | j                  j                  |	       w xY w)Nr   )r&  r  zTYPE Ar`   zTYPE zRETR r  550r'  zftp error: %rzLIST LISTr  )r  endtransferrN  voidcmdr  rs  ntransfercmd
error_permr  r   pwdry  ru  r   makefile
file_closerq  r   )r   rY   r   r  cmdisdirr  r  rP  r  ftpobjs              rT   r  zftpwrapper.retrfile	  s   :XsqudNcAE	"HHS! Gn $ 5 5c :g HHX&hhlln&MT* HHLL%n HH11#6MD'	dmmD14??C

  G    	"IIKHHS!	" $$ Gv;r?e+"[#9:F ,G ",, M&'?@fLM HHLL%sM   E #F &G :FFG( GGG9%G44G99G< <Hc                     | j                   sy d| _         	 | j                  j                          y # t               $ r Y y w xY wr  )ru  rN  voidrespr)  r   s    rT   r~  zftpwrapper.endtransfer	  s<    yy		HH{ 		s   1 A Ac                 R    d| _         | j                  dk  r| j                          y y )NFr   )rr  rq  
real_closer   s    rT   r   zftpwrapper.close	  s$    ==AOO rU   c                     | j                          | xj                  dz  c_        | j                  dk  r| j                  s| j                          y y y )Nr`   r   )r~  rq  rr  r  r   s    rT   r  zftpwrapper.file_close	  s@    ==AdnnOO '5rU   c                     | j                          	 | j                  j                          y # t               $ r Y y w xY wrW   )r~  rN  r   r)  r   s    rT   r  zftpwrapper.real_close	  s5    	HHNN{ 		s   - ==)NT)
r   r   r   r   rs  r  r~  r   r  r  r   rU   rT   r  r  e	  s/    E?C  *!X
rU   r  c                     	 i } g }t         j                  j                         D ]s  }t        |      dkD  s|d   dk(  s|dd  j	                         dk(  s2t         j                  |   }|d d j	                         }|j                  |||f       |so|| |<   u dt         j                  v r| j                  dd        |D ])  \  }}}|dd  dk(  s|r|| |<   | j                  |d        + | S )	Nr  ir   rf  REQUEST_METHODr  _proxy)re   environkeysro   r   rl   r   )rv  environmentrj   r   
proxy_names        rT   getproxies_environmentr  	  s     GK

! ,t9q=T"X_bc1Bg1MJJt$Ecr*JeZ89&+
#, 2::%FD!#. .eZ9 &+
#J-. NrU   c                    	 |
t               }	 |d   }|dk(  ry| j                         } t        |       \  }}|j	                  d      D ]k  }|j                         }|s|j                  d      }|j                         }||k(  s| |k(  r yd|z   }|j                  |      s| j                  |      sk y y# t        $ r Y yw xY w)NnoF*Tr  .)r  r  r   r   r  r  lstripr  )r   rv  no_proxyhostonlyr  rj   s         rT   proxy_bypass_environmentr  	  s     (*4= 3::<D%NHds# 	zz|;;s#D::<D444<:D  &$--*=	 )  s   B8 8	CCc                    	 ddl m } t        |       \  }}d }d| vr|d   ryd }|j                  dd      D ]  }|st        j                  d	|      }||	 t        j                  |      } ||      } ||j                  d
            }	|j                  d      }
|
'd|j                  d
      j                  d      d
z   z  }
nt        |
d
d        }
|
dk  s|
dkD  rd|
z
  }
||
z	  |	|
z	  k(  s y || |      s y y# t        $ r Y w xY w)Nr   )fnmatchc                     | j                  d      }t        t        t        |            }t	        |      dk7  r
|g dz   d d }|d   dz  |d   dz  z  |d   d	z  z  |d
   z  S )Nr  r;  )r   r   r   r   r      r`   r  r;   r  r  )r  r   r  rm   ro   )ipAddrr  s     rT   ip2numz,_proxy_bypass_macosx_sysconf.<locals>.ip2num#
  sm    S!Se_%u:?\)2A.EaB58r>2eAh!mDuQxOOrU   r  exclude_simpleT
exceptionsr   z(\d+(?:\.\d+)*)(/\d+)?r`   r;   r      F)r  r   r   r  rK  r  r  r~   groupcountrm   )r   proxy_settingsr  r  r  r  hostIPr   rE  r  masks              rT   _proxy_bypass_macosx_sysconfr  
  s>   
  %NHdP $*+F##L"5 hHH.6=~#11(;F#F^F !''!*%D771:D|AGGAJ,,S1A5648}ax4"99D$DDL1T5!=@ -  s   D  	DDdarwin)_get_proxy_settings_get_proxiesc                 .    t               }t        | |      S rW   )r  r  )r   r  s     rT   proxy_bypass_macosx_sysconfr  W
  s    ,.+D.AArU   c                      	 t               S rW   )r  r   rU   rT   getproxies_macosx_sysconfr  [
  s    	
 ~rU   c                 J    	 t               }|rt        | |      S t        |       S rW   )r  r  r  r   rv  s     rT   r}  r}  e
  s,    	 )*+D'::.t44rU   c                  .    t               xs
 t               S rW   )r  r  r   rU   rT   r6   r6   r
  s    %'F+D+FFrU   c                     	 i } 	 dd l }	 |j                  |j                  d      }|j	                  |d      d   }|rt        |j	                  |d      d         }d|vrd|vrdj                  |      }|j                  d      D ]F  }|j                  dd      \  }}t        j                  d	|      s|d
v rd|z   }n
|dk(  rd|z   }|| |<   H | j                  d      rJt        j                  dd| d         }| j                  d      xs || d<   | j                  d      xs || d<   |j                          | S # t        $ r | cY S w xY w# t        t        t        f$ r Y | S w xY w)Nr   ;Software\Microsoft\Windows\CurrentVersion\Internet SettingsProxyEnableProxyServerrp  r,  zhttp={0};https={0};ftp={0}r`   z(?:[^/:]+)://)r  r   rN  rQ  sockszsocks://z	^socks://z	socks4://r  r   )winregImportErrorOpenKeyHKEY_CURRENT_USERQueryValueExr  r   r  r  rK  r   r   Closer~   rE   r   )rv  r  internetSettingsproxyEnableproxyServerpr   addresss           rT   getproxies_registryr  w
  s   	
 	"	%~~f.F.FN P --.>/<>>?AK!&"5"56F7D#FFG#I Jk)c.D">"E"Ek"RK$**3/ 
0A()Q%Hg88OW=#'??&/'&9G%0&07&:G(/GH%
0 ;;w' ff\;@PQG&-kk&&9&DWGFO'.{{7';'FwGG$""$ M  	N	B Y/ 	 	s#   D; D/E ;E	E	E$#E$c                  0    	 t               xs
 t               S rW   )r  r  r   rU   rT   r6   r6   
  s    	 &'@+>+@@rU   c                    	 dd l }	 |j                  |j                  d      }|j	                  |d      d   }t        |j	                  |d      d         }|r|syt        |       \  }}|g} 	 t        j                  |      }||k7  r| j                  |       	 t        j                  |      }||k7  r| j                  |       |j                  d      }|D ]r  }	|	dk(  rd|vr y|	j                  dd	      }	|	j                  d
d      }	|	j                  dd      }	| D ]*  }
t        j                  |	|
t        j                         s)  y t y# t        $ r Y yw xY w# t        $ r Y yw xY w# t        $ r Y w xY w# t        $ r Y w xY w)Nr   r  r  ProxyOverrider,  z<local>r  r`   z\.r  z.*?)r  r  r  r  r  r  r~   r   r  r  rl   getfqdnr  rC  r  rK  r  )r   r  r  r  proxyOverriderawHostr  addrfqdnr  r   s              rT   proxy_bypass_registryr  
  s   			%~~f.F.FN P --.>/<>>?AK 3 34D5D!FFG!I JM
 -"4(y	''0DwD!	>>'*DwD! &++C0! 		Dy g%<<U+D<<U+D<<T*D 88D#rtt,		 [  		  		  		  		sG   E AE -+E+ +E: 	EE	E('E(+	E76E7:	FFc                 J    	 t               }|rt        | |      S t        |       S rW   )r  r  r  r  s     rT   r}  r}  
  s,    	 )*+D'::(..rU   rc  rW   )|r~  r   r  r  http.clientr  r  re   r  r  rV  r  r   rh   rb   rB   urllib.errorr   r   r   urllib.parser   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   urllib.responser   r   rG   rF   r  __all__version_infor   rM   r  r1   r2   rk   r7   r8   r  ASCIIr   r   r   r   r3   r   r0   r   r   ro  r    r!   r"   r#   r$   r%   r&   urandomr  r'   r(   r)   r1  r*   r   r  rL   rl   r   r/   r  r  r+   r  r,   r-   r.   r(  rj   
nturl2pathr5   r4   r  r9   r:   rg  r|  ri  r"  rk  r)  rm  rn  r  r  r  r  platform_scproxyr  r  r  r  r}  r6   r  r  r   rU   rT   <module>r     s  Cf      	 	 	   
     C B" " " " "
 5 I$ ((!,,
F$B$B M+45$M+^ :x rzz(BHH- k" k"ZI+ I+^"H8 8&# #";k ;n2+ n2b,B)>; )>V=* =*@Go G3#B 3>k# k#^3[ 4k   zzO OdK)B $
[*C 
s+ sl3% 3 4;;)*8* 8$ NN>"#+ #$6[ 6
)*V11+ 11f7, 7,r3j 3j:+ :B  77d?55!
 + +DXY Xz 
 	 
 
a aH#J J>B <<8:B5G WW_/bA0d/ (J+LGT  Is   9K KK