
    4\hw                    <   	 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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,n# e-$ r dZ,Y nw xY wg dZ.dej/        dd	         z  Z0da1de
j2        fddddd
dZ3d Z4g Z5dfdZ6d Z7 e	j8        de	j9                  Z:d Z; G d d          Z< G d d          Z=d Z> G d d          Z? G d de?          Z@ G d de?          ZA G d de?          ZBd ZC G d d e?          ZD G d! d"          ZE G d# d$eE          ZF G d% d&eF          ZG G d' d(          ZH G d) d*eHe?          ZI G d+ d,eHe?          ZJejK        ZL G d- d.          ZM G d/ d0e?eM          ZN G d1 d2e?eM          ZO G d3 d4e?          ZP G d5 d6eP          ZQ eRejS        d7          r# G d8 d9eP          ZTe.U                    d9            G d: d;e?          ZV G d< d=e?          ZWd> ZXd? ZY G d@ dAe?          ZZdB Z[ G dC dDe?          Z\ G dE dFe\          Z] G dG dHe?          Z^dIZ_ej`        dJk    r	d dKlambZbmcZc ndL ZbdM Zci Zd G dN dO          Ze G dP dQee          ZfdagdR ZhdaidS ZjdakdT ZldamdU Zn G dV dW          ZodX ZpdgdYZqdZ Zrd[ Zsejt        d\k    rd d]lumvZvmwZw d^ Zxd_ Zyd` Zzda Z{dS ej`        dJk    rdb Z|dc Z{dd Z}de ZzdS epZ{eqZzdS )h    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        ||          }|	                    dg           t          |          }t          |          }	nA|r t          |          }t          |          }	nt          t                      xa}	nt          }	|	                    | ||          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?   rA   https_handleropeners
             8/opt/python-3.11.14/usr/lib/python3.11/urllib/request.pyr1   r1      s4   0d   9  01CQ	H 	H 	H    	:8999,S[-D4:4:< < < 	""J<000$W555m,,	 $W555m,,	'>>)&&;;sD'***    c                 
    | a d S N)rL   )rR   s    rS   r2   r2      s    GGGrT   c                 N   	 t          |           \  }}t          j        t          | |                    5 }|                                }|dk    r/|s-t
          j                            |          |fcd d d            S |rt          |d          }n6t          j
        d          }|j        }t                              |           |5  ||f}	d}
d}d}d}d|v rt          |d	                   }|r |||
|           	 |                    |
          }|sn<|t!          |          z  }|                    |           |dz  }|r |||
|           T	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |dk    r||k     rt%          d||fz  |	          |	S )NfilewbF)delete    r   content-lengthContent-LengthT   1retrieval incomplete: got only %i out of %i bytes)r   
contextlibclosingr1   infoospathnormpathrM   tempfileNamedTemporaryFilename_url_tempfilesappendintreadlenwriter   )rN   filename
reporthookrO   url_typere   fpheaderstfpresultbssizerm   blocknumblocks                  rS   r7   r7      s     __NHd		GC..	/	/ $32'')) vh7##D))72$3 $3 $3 $3 $3 $3 $3 $3  	,x&&CC-U;;;CxH!!(+++ 	3 	3w&FBDDH7**7#3455 /
8R...3 E

"		%   A 3JxT2223 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3!$3 $3 $3 $3 $3 $3 $3 $3 $3 $3 $3 $3 $3 $3 $3L qyyTD[["?Tl"$ $ 	$ Ms=   =E9 AE9B
E"E9"E&	&E9)E&	*E99E= E=c                      	 t           D ]'} 	 t          j        |            # t          $ r Y $w xY wt           d d = t          rd ad S d S rV   )rj   rd   unlinkOSErrorrL   )	temp_files    rS   r8   r8     su    :#  		Ii     	 	 	D	 	qqq  s   !
..z:\d+$c                     	 | j         }t          |          d         }|dk    r|                     dd          }t                              d|d          }|                                S )Nr_    Host)full_urlr   
get_header_cut_port_resublower)requestrN   hosts      rS   request_hostr   -  sf     
CC==Drzz!!&"-- Ba((D::<<rT   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dS )r   NFc                    || _         i | _        i | _        d | _        || _        d | _        |                                D ]\  }}|                     ||           |t          |           }|| _	        || _
        |r	|| _        d S d S rV   )r   rt   unredirected_hdrs_datarO   _tunnel_hostitems
add_headerr   origin_req_hostunverifiablemethod)	selfrN   rO   rt   r   r   r   keyvalues	            rS   __init__zRequest.__init__?  s     !#
	 !--// 	( 	(JCOOC''''"*400O.( 	! DKKK	! 	!rT   c                 ^    | j         r d                    | j        | j                   S | j        S )Nz{}#{})fragmentformat	_full_urlr   s    rS   r   zRequest.full_urlQ  s-    = 	A>>$.$-@@@~rT   c                     t          |          | _        t          | j                  \  | _        | _        |                                  d S rV   )r	   r   r   r   _parser   rN   s     rS   r   zRequest.full_urlW  s:      (1$.(A(A%rT   c                 0    d | _         d | _        d| _        d S Nr   )r   r   selectorr   s    rS   r   zRequest.full_url^  s    rT   c                     | j         S rV   )r   r   s    rS   rO   zRequest.datad  s
    zrT   c                     || j         k    r3|| _         |                     d          r|                     d           d S d S d S )NContent-length)r   
has_headerremove_header)r   rO   s     rS   rO   zRequest.datah  sZ    4:DJ /00 5""#344444 
5 5rT   c                     d | _         d S rV   )rO   r   s    rS   rO   zRequest.datar  s    			rT   c                     t          | j                  \  | _        }| j        t          d| j        z            t          |          \  | _        | _        | j        rt          | j                  | _        d S d S )Nzunknown url type: %r)	r   r   typerD   r   r   r   r   r   )r   rests     rS   r   zRequest._parsev  st    $T^44	493dmCDDD#-d#3#3 	4=9 	+	**DIII	+ 	+rT   c                 <    	 | j         dnd}t          | d|          S )NPOSTGETr   )rO   getattr)r   default_methods     rS   
get_methodzRequest.get_method~  s'    A#'9#8etX~666rT   c                     | j         S rV   )r   r   s    rS   get_full_urlzRequest.get_full_url  s
    }rT   c                 x    | j         dk    r| j        s| j        | _        n|| _         | j        | _        || _        d S )Nhttps)r   r   r   r   r   )r   r   r   s      rS   	set_proxyzRequest.set_proxy  s?    9(9 $	DDI MDM			rT   c                 "    | j         | j        k    S rV   )r   r   r   s    rS   	has_proxyzRequest.has_proxy  s    }--rT   c                 >    || j         |                                <   d S rV   )rt   
capitalizer   r   vals      rS   r   zRequest.add_header  s    ),S^^%%&&&rT   c                 >    || j         |                                <   d S rV   )r   r   r   s      rS   add_unredirected_headerzRequest.add_unredirected_header  s    36s~~//000rT   c                 &    || j         v p|| j        v S rV   )rt   r   r   header_names     rS   r   zRequest.has_header  s!    t|+ 6t55	7rT   c                 j    | j                             || j                            ||                    S rV   )rt   getr   )r   r   defaults      rS   r   zRequest.get_header  s5    |"&&{G<<> > 	>rT   c                 r    | j                             |d            | j                            |d            d S rV   )rt   popr   r   s     rS   r   zRequest.remove_header  s9    d+++"";55555rT   c                 d    i | j         | j        }t          |                                          S rV   )r   rt   listr   )r   hdrss     rS   header_itemszRequest.header_items  s,    9$(9DL9DJJLL!!!rT   rV   )__name__
__module____qualname__r   propertyr   setterdeleterrO   r   r   r   r   r   r   r   r   r   r   r    rT   rS   r   r   =  s       !%r!%E! ! ! !$   X
 _  _   
   X 
[5 5 [5 
\  \+ + +7 7 7
    . . .- - -7 7 77 7 7> > > >
6 6 6" " " " "rT   r   c                   J    e Zd Zd Zd Zd Zd Zdej        fdZ	d	dZ
d ZdS )
r   c                 t    dt           z  }d|fg| _        g | _        i | _        i | _        i | _        i | _        d S )NPython-urllib/%sz
User-agent)__version__
addheadershandlershandle_openhandle_errorprocess_responseprocess_request)r   client_versions     rS   r   zOpenerDirector.__init__  sH    +k9(.9: "!rT   c                 L   t          |d          st          dt          |          z            d}t          |          D ].}|dv r|                    d          }|d |         }||dz   d          }|                    d          ro|                    d          |z   dz   }||dz   d          }	 t          |          }n# t          $ r Y nw xY w| j        	                    |i           }	|	| j        |<   n1|dk    r
|}| j
        }	n!|d	k    r
|}| j        }	n|d
k    r
|}| j        }	n|	                    |g           }
|
rt          j        |
|           n|
                    |           d}0|r1t          j        | j        |           |                    |            d S d S )N
add_parentz%expected BaseHandler instance, got %rF)redirect_requestdo_open
proxy_open_r_   errorrM   responser   T)hasattr	TypeErrorr   dirfind
startswithrl   rD   r   r   r   r   r   
setdefaultbisectinsortrk   r   r   )r   handleraddedmethiprotocol	conditionjkindlookupr   s              rS   add_handlerzOpenerDirector.add_handler  s   w-- 	+C MM* + + + LL #	 #	DDDD		#ABQBxHQqSTT
I##G,, NN3''!+a/AaCDDzt99DD!   D*..x<<.4!(++f$$)j((.i''-((r22H )h0000(((EE 	%M$-111t$$$$$	% 	%s   3C
CCc                     d S rV   r   r   s    rS   closezOpenerDirector.close      rT   c                 r    |                     |d          }|D ]}t          ||          } || }||c S d S )Nr   )r   r   )	r   chainr   	meth_nameargsr   r   funcrv   s	            rS   _call_chainzOpenerDirector._call_chain  s^     99T2&& 	 	G7I..DT4[F! "	 	rT   Nc                    t          |t                    rt          ||          }n|}|||_        ||_        |j        }|dz   }| j                            |g           D ]}t          ||          } ||          }t          j
        d|j        |j        |j        |                                           |                     ||          }	|dz   }| j                            |g           D ]}t          ||          } |||	          }	|	S )N_requestzurllib.Request	_response)
isinstancestrr   rO   rP   r   r   r   r   sysauditr   rt   r   _openr   )
r   fullurlrO   rP   reqr   r   	processorr   r   s
             rS   rM   zOpenerDirector.open  s"   gs## 	 '4((CCC8 Z'	-11(B?? 	 	I9i00D$s))CC	"CL#(CKIYIYZZZ::c4(( [(	.228R@@ 	+ 	+I9i00DtC**HHrT   c                     |                      | j        dd|          }|r|S |j        }|                      | j        ||dz   |          }|r|S |                      | j        dd|          S )Nr   default_openr  unknownunknown_open)r   r   r   )r   r	  rO   rv   r   s        rS   r  zOpenerDirector._open  s    !!$"2I"0#7 7 	M8!!$"2Hh")?*+.0 0 	M 0) .5 5 	5rT   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 d S )
Nhttpr   r  r;   zhttp_error_%sr_   _errorr   r   http_error_default)r   r   )r   protor   dictr   http_err	orig_argsrv   s           rS   r   zOpenerDirector.error   s    %%%$V,DGE'%/IHII$D(IHeY'$.!!4( 	M 	+)%9:YFD#4#T**	+ 	+rT   rV   )r   r   r   r   r   r   r   socket_GLOBAL_DEFAULT_TIMEOUTrM   r  r   r   rT   rS   r   r     s        	" 	" 	"-% -% -%^  	 	 	 "&v/M    :5 5 5 5+ + + + +rT   r   c            	         	 t                      }t          t          t          t          t
          t          t          t          t          g	}t          t          j        d          r|                    t                     t                      }|D ]g}| D ]b}t!          |t"                    r&t%          ||          r|                    |           =t!          ||          r|                    |           ch|D ]}|                    |           |D ]}|                     |                        | D ]6}t!          |t"                    r
 |            }|                    |           7|S )NHTTPSConnection)r   r    r/   r*   r   r   r,   r+   r0   r.   r   r  clientrk   rK   setr  r   
issubclassaddremover   )r   rR   default_classesskipklasscheckhs          rS   r3   r3   9  s|    F#^[.0C!;0B"$O t{-.. -|,,,55D      	  	 E%&&  eU++ $HHUOOOE5))  	   & &u%%%%  $ $5577####  a 	A1MrT   c                   $    e Zd ZdZd Zd Zd ZdS )r     c                     || _         d S rV   )parent)r   r)  s     rS   r   zBaseHandler.add_parent`  s    rT   c                     d S rV   r   r   s    rS   r   zBaseHandler.closec  r   rT   c                 F    t          |d          sdS | j        |j        k     S )Nhandler_orderT)r   r,  )r   others     rS   __lt__zBaseHandler.__lt__g  s,    uo.. 	 4!E$777rT   N)r   r   r   r,  r   r   r.  r   rT   rS   r   r   ]  sF        M    8 8 8 8 8rT   r   c                       e Zd Z	 dZd ZeZdS )r0   i  c                     |j         |j        |                                }}}d|cxk    rdk     s!n | j                            d|||||          }|S )N   ,  r  )codemsgrc   r)  r   )r   r   r   r3  r4  r   s         rS   http_responsez HTTPErrorProcessor.http_responset  sg    "-x}}4c t!!!!c!!!!{((4d< <H rT   N)r   r   r   r,  r5  https_responser   rT   rS   r0   r0   p  s,        'M	 	 	 #NNNrT   r0   c                       e Zd Zd ZdS )r   c                 2    t          |j        ||||          rV   )r   r   )r   r	  rs   r3  r4  r   s         rS   r  z*HTTPDefaultErrorHandler.http_error_default  s    dCr:::rT   N)r   r   r   r  r   rT   rS   r   r     s#        ; ; ; ; ;rT   r   c                   6    e Zd ZdZdZd Zd ZexZxZxZ	Z
dZdS )r      
   c                 ,  	 	 |                                 }|dv r|dv s"|dv r|dk    st          |j        ||||          |                    dd          }d		fd|j                                        D             }t          |||j        d	
          S )N)-  .  /  i3  i4  )r   HEAD)r=  r>  r?  r    z%20)r]   zcontent-typec                 H    i | ]\  }}|                                 v||S r   )r   ).0kvCONTENT_HEADERSs      rS   
<dictcomp>z8HTTPRedirectHandler.redirect_request.<locals>.<dictcomp>  s;     ; ; ;tq!/99 999rT   T)rt   r   r   )r   r   r   replacert   r   r   r   )
r   r	  rs   r3  r4  rt   newurlm
newheadersrF  s
            @rS   r   z$HTTPRedirectHandler.redirect_request  s    	 NN222qO7K7K&&1;;CL$WbAAA U++<; ; ; ;s{'8'8':': ; ; ;
v)'*':$(* * * 	*rT   c                 r   d|v r	|d         }nd|v r	|d         }nd S t          |          }|j        dvrt          |||d|d||          |j        s|j        rt          |          }d|d<   t          |          }t          |dt          j	        	          }t          |j        |          }|                     ||||||          }|d S t          |d
          rf|j        x}	|_        |	                    |d          | j        k    st#          |	          | j        k    r t          |j        || j        |z   ||          ni x}	x|_        |_        |	                    |d          dz   |	|<   |                                 |                                 | j                            ||j                  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_   rP   )r   schemer   re   netlocr   r   r
   stringpunctuationr   r   r   r   rT  r   max_repeatsrn   max_redirectionsinf_msgrm   r   r)  rM   rP   )
r   r	  rs   r3  r4  rt   rI  urlpartsnewvisiteds
             rS   http_error_302z"HTTPRedirectHandler.http_error_302  s      Z(FFgU^FFF F##
 ?">>>ADfffM  
 } 	 	H~~HHQKH%%
 \0BD D Dv..
 ##CT3HH;F 3(( 	A*-*;;Gc'FA&&$*:::G 555d $s 2GRA A A 6 ?A@G@c'#*;!++fa0014 				



{S[999rT   zoThe HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
N)r   r   r   rZ  r[  r   r`  http_error_301http_error_303http_error_307http_error_308r\  r   rT   rS   r   r     s\         K  *  *  *L:: :: ::x IWVNV^Vn~2GGGrT   r   c                    	 t          |           \  }}|                    d          sd }| }n|                    d          st          d| z            d|v r,|                    d          }|                    d|          }n|                    dd          }|dk    rd }|d|         }t	          |          \  }}|t          |          \  }}	nd x}}	|||	|fS )NrQ  //zproxy URL with no authority: %r@r;   r\   )r   r   rD   r   r   r   )
proxyrV  r_scheme	authorityhost_separatorenduserinfohostportuserpasswords
             rS   _parse_proxyrq    s    "%((FHs## $		 ""4(( 	H>FGGG (??%]]3//N--^44CC--Q''C"99CQsUO	#I..Hh%h//hhx48++rT   c                        e Zd ZdZddZd ZdS )r    d   Nc                     |t                      }|| _        |                                D ]7\  }}|                                }t	          | d|z  ||| j        fd           8d S )Nz%s_openc                      || ||          S rV   r   )rrh  r   r   s       rS   <lambda>z'ProxyHandler.__init__.<locals>.<lambda>#  s    Qt,, rT   )r6   proxiesr   r   setattrr   )r   rx  r   rN   s       rS   r   zProxyHandler.__init__  s    ? llG  	. 	.ID#::<<DD)d*$'d - - -. . . .	. 	.rT   c                    |j         }t          |          \  }}}}||}|j        rt          |j                  rd S |ru|rst	          |          dt	          |          }	t          j        |	                                                              d          }
|	                    dd|
z              t	          |          }|
                    ||           ||k    s|dk    rd S | j                            ||j                  S )N:asciiProxy-authorizationBasic r   rU  )r   rq  r   proxy_bypassr   base64	b64encodeencodedecoder   r   r)  rM   rP   )r   r	  rh  r   	orig_type
proxy_typero  rp  rn  	user_passcredss              rS   r   zProxyHandler.proxy_open&  s   H	/;E/B/B,
D(H"J8 	SX.. 	4 	DH 	D#*4====#*8#4#4#46I$Y%5%5%7%788??HHENN0(U2BCCC8$$h
+++
""i7&:&:4 ;##C#===rT   rV   )r   r   r   r,  r   r   r   rT   rS   r    r      s<        M	. 	. 	. 	.> > > > >rT   r    c                   .    e Zd Zd Zd Zd ZddZd ZdS )	r!   c                     i | _         d S rV   )passwdr   s    rS   r   zHTTPPasswordMgr.__init__D  s    rT   c                      t          |t                    r|g}| j        vr
i  j        |<   dD ]0t           fd|D                       }||f j        |         |<   1d S )NTFc              3   D   K   | ]}                     |          V  d S rV   )
reduce_uri)rC  udefault_portr   s     rS   	<genexpr>z/HTTPPasswordMgr.add_password.<locals>.<genexpr>N  sB        ?  ?56<00 ?  ?  ?  ?  ?  ?rT   )r  r  r  tuple)r   realmrN  ro  r  reduced_urir  s   `     @rS   add_passwordzHTTPPasswordMgr.add_passwordG  s    c3 	%C##!#DK' 	= 	=L  ?  ?  ?  ?  ?:= ?  ?  ? ? ?K/3VnDK{++	= 	=rT   c                     | j                             |i           }dD ]U}|                     ||          }|                                D ](\  }}|D ] }|                     ||          r|c c c S !)VdS )Nr  NN)r  r   r  r   	is_suburi)	r   r  authuridomainsr  reduced_authuriurisauthinforN  s	            rS   find_user_passwordz"HTTPPasswordMgr.find_user_passwordR  s    +//%,,' 	( 	(L"oog|DDO")--// ( (h ( (C~~c?;; ('((( zrT   Tc                     	 t          |          }|d         r|d         }|d         }|d         pd}nd }|}d}t          |          \  }}|r%|#|!ddd                    |          }	|	d||	fz  }||fS )	Nr_   r   r;   rQ  P   i  r  z%s:%d)r   r   r   )
r   rN  r  partsrV  rj  re   r   portdports
             rS   r  zHTTPPasswordMgr.reduce_uri\  s    N8 		1XFaI8?sDD FID	**
d 	4DLV-?! s6{{   #tUm3	$rT   c                     	 ||k    rdS |d         |d         k    rdS |d         }|dd          dk    r|dz  }|d                              |          S )NTr   Fr_   r\   rQ  )r   )r   basetestprefixs       rS   r  zHTTPPasswordMgr.is_suburis  sl    	 4<<47d1g5a"##;#cMFAw!!&)))rT   N)T)r   r   r   r   r  r  r  r  r   rT   rS   r!   r!   B  sd          	= 	= 	=     .* * * * *rT   r!   c                       e Zd Zd ZdS )r"   c                     t                               | ||          \  }}|||fS t                               | d |          S rV   )r!   r  )r   r  r  ro  rp  s        rS   r  z2HTTPPasswordMgrWithDefaultRealm.find_user_password  sL    (;;D%<CE Eh>!11$gFFFrT   N)r   r   r   r  r   rT   rS   r"   r"     s(        G G G G GrT   r"   c                   8     e Zd Z fdZd fd	ZddZd Z xZS )r#   c                 H    i | _          t                      j        |i | d S rV   )authenticatedsuperr   )r   r   kwargs	__class__s      rS   r   z%HTTPPasswordMgrWithPriorAuth.__init__  s-    $)&)))))rT   Fc                     |                      ||           |$t                                          d |||           t                                          ||||           d S rV   )update_authenticatedr  r  )r   r  rN  ro  r  is_authenticatedr  s         rS   r  z)HTTPPasswordMgrWithPriorAuth.add_password  sb    !!#'7888GG  sD&999UCv66666rT   c                     t          |t                    r|g}dD ]'}|D ]"}|                     ||          }|| j        |<   #(d S Nr  )r  r  r  r  )r   rN  r  r  r  r  s         rS   r  z1HTTPPasswordMgrWithPriorAuth.update_authenticated  sr    c3 	%C' 	C 	CL C C"ooa>>2B";//C	C 	CrT   c                     dD ]I}|                      ||          }| j        D ])}|                     ||          r| j        |         c c S *Jd S r  )r  r  r  )r   r  r  r  rN  s        rS   r  z-HTTPPasswordMgrWithPriorAuth.is_authenticated  sz    ' 	3 	3L"oog|DDO) 3 3>>#77 3-c22222233	3 	3rT   )F)r   r   r   r   r  r  r  __classcell__)r  s   @rS   r#   r#     s}        * * * * *7 7 7 7 7 7C C C C3 3 3 3 3 3 3rT   r#   c                   h    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dS )
r$   z1(?:^|,)[ 	]*([^ 	,]+)[ 	]+realm=(["']?)([^"']*)\2Nc                 V    |t                      }|| _        | j        j        | _        d S rV   )r!   r  r  )r   password_mgrs     rS   r   z!AbstractBasicAuthHandler.__init__  s-    *,,L" K4rT   c              #   "  K   d}t           j                            |          D ]A}|                                \  }}}|dvrt	          j        dt          d           ||fV  d}B|s'|r|                                d         }nd}|d fV  d S d S )NF)"'zBasic Auth Realm was unquoted   Tr   r   )r$   rxfinditergroupsrA   rB   UserWarningsplit)r   headerfound_challengemorV  r
   r  s          rS   _parse_realmz%AbstractBasicAuthHandler._parse_realm  s      *-66v>> 	# 	#B#%99;; FE5J&&=)1. . . 5/!!!"OO 	! *4.     	! 	!rT   c                    |                     |          }|sd S d }|D ]U}|                     |          D ]=\  }}|                                dk    r|} ||                     |||          c c S >V|t	          d|          d S )Nbasicz@AbstractBasicAuthHandler does not support the following scheme: )get_allr  r   retry_http_basic_authrD   )	r   authreqr   r	  rt   unsupportedr  rV  r  s	            rS   http_error_auth_reqedz.AbstractBasicAuthHandler.http_error_auth_reqed  s     //'** 	F 
	H 
	HF!%!2!26!:!: 	H 	H<<>>W,,"(K$  55dCGGGGGGG	 %	H "* &) * * * #"rT   c                    | j                             ||          \  }}||d|}dt          j        |                                                              d          z   }|                    | j        d           |k    rd S |                    | j        |           | j	        
                    ||j                  S d S )Nr{  r~  r|  rU  )r  r  r  r  r  r  r   auth_headerr   r)  rM   rP   )r   r   r	  r  ro  pwrawauths           rS   r  z.AbstractBasicAuthHandler.retry_http_basic_auth  s    ;11%>>b>!TT22&Cf.szz||<<CCGLLLD~~d.55==t''(8$???;##C#===4rT   c                    t          | j        d          r| j                            |j                  s|S |                    d          s| j                            d |j                  \  }}d                    ||                                          }t          j	        |          
                                }|                    dd                    |                                                     |S )Nr  Authorizationz{0}:{1}zBasic {})r   r  r  r   r   r  r   r  r  standard_b64encoder  r   strip)r   r	  ro  r  credentialsauth_strs         rS   http_requestz%AbstractBasicAuthHandler.http_request   s    %788 	{++CL99	J~~o.. 	M;99$MMLD&#**488??AAK0==DDFFH''(2(9(9(..:J:J(K(KM M M
rT   c                     t          | j        d          rVd|j        cxk    rdk     r$n n!| j                            |j        d           n | j                            |j        d           |S )Nr  r1  r2  TF)r   r  r3  r  r   )r   r	  r   s      rS   r5  z&AbstractBasicAuthHandler.http_response  sx    4; 233 	Fhm))))c)))))00tDDDD00uEEErT   rV   )r   r   r   recompileIr  r   r  r  r  r  r5  https_requestr6  r   rT   rS   r$   r$     s         
 1 D
 
B5 5 5 5! ! !(* * *4
 
 
     !M"NNNrT   r$   c                       e Zd ZdZd ZdS )r%   r  c                 D    |j         }|                     d|||          }|S )Nwww-authenticate)r   r  )r   r	  rs   r3  r4  rt   rN   r   s           rS   http_error_401z#HTTPBasicAuthHandler.http_error_401  s-    l--.@*-sG= =rT   N)r   r   r   r  r  r   rT   rS   r%   r%     s(        !K    rT   r%   c                       e Zd ZdZd ZdS )r&   r}  c                 D    |j         }|                     d|||          }|S Nproxy-authenticate)r   r  )r   r	  rs   r3  r4  rt   rj  r   s           rS   http_error_407z$ProxyBasicAuthHandler.http_error_407)  s1    
 H	--.B*3S'C CrT   N)r   r   r   r  r  r   rT   rS   r&   r&   %  s(        'K    rT   r&   c                   @    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	 Z
dS )r'   Nc                     |t                      }|| _        | j        j        | _        d| _        d| _        d | _        d S Nr   )r!   r  r  retriednonce_count
last_nonce)r   r  s     rS   r   z"AbstractDigestAuthHandler.__init__C  s@    >$&&F K4rT   c                     d| _         d S r  )r  r   s    rS   reset_retry_countz+AbstractDigestAuthHandler.reset_retry_countL  s    rT   c                    |                     |d           }| j        dk    rt          |j        dd|d           | xj        dz  c_        |rr|                                d         }|                                dk    r|                     ||          S |                                dk    rt          d|z            d S d S )	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_authrD   )r   r  r   r	  rt   r  rV  s          rS   r  z/AbstractDigestAuthHandler.http_error_auth_reqedO  s    ++k400<! CL#/C#T+ + + LLALL 	I]]__Q'F||~~))223@@@7**  "?AG"H I I I	I 	I +*rT   c                    |                     dd          \  }}t          t          d t          |                              }|                     ||          }|rid|z  }|j                            | j        d           |k    rd S |                    | j        |           | j	        
                    ||j                  }|S d S )NrA  r_   z	Digest %srU  )r  parse_keqv_listfilterparse_http_listget_authorizationrt   r   r  r   r)  rM   rP   )r   r	  r  token	challengechalauth_valresps           rS   r  z0AbstractDigestAuthHandler.retry_http_digest_authc  s    ::c1--yvdOI,F,FGGHH%%c400 	"T)H{t/66(BBt''(8(CCC;##C#==DK	 	rT   c                     | j         d|dt          j                    d}|                    d          t	          d          z   }t          j        |                                          }|d d         S )Nr{  r|        )r  timectimer  _randombyteshashlibsha1	hexdigest)r   noncesbdigs        rS   
get_cnoncez$AbstractDigestAuthHandler.get_cnonceo  si      +++UUUDJLLLLAHHWQ/l1oo''))3B3xrT   c                    	 |d         }|d         }|                     d          }|                     dd          }|                     dd           }n# t          $ r Y d S w xY w|                     |          \  }}	|d S | j                            ||j                  \  }
}|
d S |j        |                     |j        |          }nd }|
d|d|}|                                d|j	        }|$ |	 ||          |d ||                    }nd|
                    d	          v rx|| j        k    r| xj        d
z  c_        nd
| _        || _        d| j        z  }|                     |          }|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 )Nr  r  qop	algorithmMD5opaquer{  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   rO   get_entity_digestr   r   r  r  r  r  r   )r   r	  r  r  r  r  r  r  HKDro  r  entdigA1A2respdigncvaluecnoncenoncebitr  s                       rS   r  z+AbstractDigestAuthHandler.get_authorizationz  s   		MEME((5//Ce44I XXh--FF 	 	 	44	 ((33294;11%FFb<4 8++CHd;;FFF44+((((&
 ;b2555!!B%%% 899GGsyy~~%%''  A%   #$ "'t//G__U++F+055'''66666611R555QHb2))GG 7#=>>>
 #'$$uuuclll")''+  	-Of,,D 	-Of,,D"Y.. 	IDHHDs   AA 
A"!A"c                 b    |dk    rd n|dk    rd nt          d|z            fd}|fS )Nr  c                 t    t          j        |                     d                                                    S Nr|  )r  md5r  r  xs    rS   rw  z?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s(    '+ahhw&7&788BBDD rT   SHAc                 t    t          j        |                     d                                                    S r   )r  r  r  r  r"  s    rS   rw  z?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s(    ',qxx'8'899CCEE rT   z.Unsupported digest authentication algorithm %rc                 $     | d|          S )Nr{  r   )r  dr  s     rS   rw  z?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s    !!qqq!!,-- rT   )rD   )r   r  r  r  s      @rS   r  z-AbstractDigestAuthHandler.get_algorithm_impls  se    DDAA%EEAA  ,.78 9 9 9----"urT   c                     d S rV   r   )r   rO   r  s      rS   r  z+AbstractDigestAuthHandler.get_entity_digest  s    trT   rV   )r   r   r   r   r  r  r  r  r  r  r  r   rT   rS   r'   r'   8  s             I I I(
 
 
	 	 	< < <|      rT   r'   c                       e Zd Z	 dZdZd ZdS )r(   r    c                     t          |j                  d         }|                     d|||          }|                                  |S )Nr_   r  )r   r   r  r  r   r	  rs   r3  r4  rt   r   retrys           rS   r  z$HTTPDigestAuthHandler.http_error_401  sL    %%a(**+=+/g? ?   rT   N)r   r   r   r  r,  r  r   rT   rS   r(   r(     s4         "KM    rT   r(   c                       e Zd ZdZdZd ZdS )r)   Proxy-Authorizationr*  c                 l    |j         }|                     d|||          }|                                  |S r  )r   r  r  r,  s           rS   r  z%ProxyDigestAuthHandler.http_error_407  s?    x**+?+/g? ?   rT   N)r   r   r   r  r,  r  r   rT   rS   r)   r)     s-        'KM    rT   r)   c                   .    e Zd ZddZd Zd Zd Zd ZdS )	AbstractHTTPHandlerr   c                     || _         d S rV   _debuglevel)r   
debuglevels     rS   r   zAbstractHTTPHandler.__init__  s    %rT   c                     || _         d S rV   r4  )r   levels     rS   set_http_debuglevelz'AbstractHTTPHandler.set_http_debuglevel  s     rT   c                 z    t           j        j                            |j        |                                          S rV   )r  r  HTTPConnection_get_content_lengthrO   r   r   r   s     rS   r<  z'AbstractHTTPHandler._get_content_length  s3    {)==L  " " 	"rT   c                 `   |j         }|st          d          |j        |j        }t          |t                    rd}t          |          |                    d          s|                    dd           |                    d          sf|                    d          sQ|                     |          }|$|                    dt	          |                     n|                    dd           |}|	                                r)t          |j                  \  }}t          |          \  }}	|                    d          s|                    d|           | j        j        D ]D\  }
}|
                                }
|                    |
          s|                    |
|           E|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   rO   r  r  r   r   r   r<  r   r   r   r   r)  r   r   )r   r   r   rO   r4  content_lengthsel_hostrV  selsel_pathri   r   s               rS   do_request_zAbstractHTTPHandler.do_request_  s   | 	,?+++<#<D$$$ %Dnn$%%n55 9//"79 9 9 &&'788 <#../BCC<!%!9!9'!B!B!-33,c..A.AC C C C 33/< < <  	1$W%566KFC!+CHh!!&)) 	>++FH===;1 	= 	=KD%??$$D%%d++ =//e<<<rT   c           	        
 	 |j         }|st          d           ||fd|j        i|}|                    | j                   t          |j                  

                    
fd|j        	                                D                        d
d<   d 
	                                D             
|j
        r2i }d}|
v r
|         ||<   
|= |                    |j
        |           	 	 |                    |                                |j        |j        
|                    d	          
           n!# t"          $ r}t          |          d }~ww xY w|                                }	n#  |                                  xY w|j        r |j                                         d |_        |                                |	_        |	j        |	_        |	S )Nr?  rP   c                 $    i | ]\  }}|v	||S r   r   )rC  rD  rE  rt   s      rS   rG  z/AbstractHTTPHandler.do_open.<locals>.<dictcomp>)  s3     - - -AG++ 1+++rT   r   
Connectionc                 >    i | ]\  }}|                                 |S r   )title)rC  ri   r   s      rS   rG  z/AbstractHTTPHandler.do_open.<locals>.<dictcomp>6  s&    FFFs4::<<FFFrT   r/  rt   rA  )encode_chunked)r   r   rP   set_debuglevelr5  r  r   updatert   r   r   
set_tunnelr   r   r   rO   r   r}   getresponser   sockr   rN   reasonr4  )r   
http_classr	  http_conn_argsr   r%  tunnel_headersproxy_auth_hdrerrrv  rt   s             @rS   r   zAbstractHTTPHandler.do_open  s   	 x 	,?+++ JtCCS[CNCC	)***s,-- - - - -):):)<)< - - - 	. 	. 	. !(FFgmmooFFF 	CN2N((181H~. N+LL)>LBBB		$		#..**CL#(G),8K)L)L  N N N N $ $ $smm#$AA	GGIII
 6 	FLLNNNAF  "" s+   /A	D9 8E/ 9
EEEE/ /FNr   )r   r   r   r   r9  r<  rG  r   r   rT   rS   r2  r2    sj        & & & &! ! !" " "
$ $ $L@ @ @ @ @rT   r2  c                   "    e Zd Zd Zej        ZdS )r*   c                 L    |                      t          j        j        |          S rV   )r   r  r  r;  r   r	  s     rS   	http_openzHTTPHandler.http_open`  s    ||DK6<<<rT   N)r   r   r   r^  r2  rG  r  r   rT   rS   r*   r*   ^  s'        = = = '2LLLrT   r*   r  c                   *    e Zd ZddZd Zej        ZdS )rK   r   Nc                 X    t                               | |           || _        || _        d S rV   )r2  r   _context_check_hostname)r   r6  r?   check_hostnames       rS   r   zHTTPSHandler.__init__i  s-    ((z:::#DM#1D   rT   c                 f    |                      t          j        j        || j        | j                  S )N)r?   rc  )r   r  r  r  ra  rb  r]  s     rS   
https_openzHTTPSHandler.https_openn  s3    << ;Sd6J   L L LrT   )r   NN)r   r   r   r   re  r2  rG  r  r   rT   rS   rK   rK   g  s>        	2 	2 	2 	2
	L 	L 	L ,7rT   rK   c                   *    e Zd ZddZd Zd ZeZeZdS )r   Nc                 R    dd l }||j                                        }|| _        d S r  )http.cookiejar	cookiejar	CookieJar)r   ri  r  s      rS   r   zHTTPCookieProcessor.__init__w  s2    0022I"rT   c                 :    | j                             |           |S rV   )ri  add_cookie_headerr=  s     rS   r  z HTTPCookieProcessor.http_request}  s    ((111rT   c                 <    | j                             ||           |S rV   )ri  extract_cookies)r   r   r   s      rS   r5  z!HTTPCookieProcessor.http_response  s    &&x999rT   rV   )r   r   r   r   r  r5  r  r6  r   rT   rS   r   r   v  sL        # # # #     !M"NNNrT   r   c                       e Zd Zd ZdS )r/   c                 4    |j         }t          d|z            )Nzunknown url type: %s)r   r   )r   r	  r   s      rS   r  zUnknownHandler.unknown_open  s    x-4555rT   N)r   r   r   r  r   rT   rS   r/   r/     s#        6 6 6 6 6rT   r/   c                     	 i }| D ]B}|                     dd          \  }}|d         dk    r|d         dk    r
|dd         }|||<   C|S )N=r_   r   r  r\   )r  )lparsedeltrD  rE  s        rS   r  r    sf    HF  yya  1Q43;;1R5C<<!B$Aq		MrT   c                     	 g }d}dx}}| D ]P}|r||z  }d}|r|dk    rd}|dk    rd}||z  }%|dk    r|                     |           d}C|dk    rd}||z  }Q|r|                     |           d |D             S )Nr   F\Tr  r  c                 6    g | ]}|                                 S r   )r  )rC  parts     rS   
<listcomp>z#parse_http_list.<locals>.<listcomp>  s     )))TDJJLL)))rT   )rk   )r  resry  escaper
   curs         rS   r  r    s     CDFU   	CKDF 	d{{CKD#::JJtD#::E  

4))S))))rT   c                   $    e Zd Zd ZdZd Zd ZdS )r+   c                     |j         }|d d         dk    rL|dd         dk    r>|j        r7|j        dk    r,|j        |                                 vrt          d          d S |                     |          S )Nr;   rf  r  rQ  	localhost-file:// scheme is supported only on localhost)r   r   	get_namesr   open_local_file)r   r	  rN   s      rS   	file_openzFileHandler.file_open  s    lrr7d??s1Q3x3CHK''8t~~////NOOO 0/ '',,,rT   Nc                 X   t           j        	 t          t          j        d          d         t          j        t          j                              d         z             t           _        n4# t          j        $ r" t          j        d          ft           _        Y nw xY wt           j        S )Nr  r;   )r+   namesr  r  gethostbyname_exgethostnamegaierrorgethostbynamer   s    rS   r  zFileHandler.get_names  s    $I$)+K88;+F,>,@,@AA!DE%F %F!! ? I I I%+%9+%F%F$H!!!I  s   AA, ,.BBc                 b   dd l }dd l}|j        }|j        }t	          |          }	 t          j        |          }|j        }|j        	                    |j
        d          }	|                    |          d         }
 |j        d|
pd||	fz            }|rt          |          \  }}|r%|sRt          |          |                                 v r/|r	d|z   |z   }nd|z   }t!          t#          |d          ||          S n!# t$          $ r}t'          |          d }~ww xY wt'          d          )	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   rd   statst_sizeutils
formatdatest_mtime
guess_typemessage_from_stringr   _safe_gethostbynamer  r   rM   r}   r   )r   r	  emailr  r   rp   	localfilestatsrx   modifiedmtypert   r  origurlexps                  rS   r  zFileHandler.open_local_file  ss   x< **		 GI&&E=D{--enT-JJH((2215E/e/K&,h789 9G  .'--
d KK1$774>>;K;KKK 3'$.9GG'(2G!$y$"7"7'JJJ 	  	  	 3--	 /000s   CD 
DDD)r   r   r   r  r  r  r  r   rT   rS   r+   r+     sH        - - - E! ! !1 1 1 1 1rT   r+   c                 X    	 t          j        |           S # t           j        $ r Y d S w xY wrV   )r  r  r  )r   s    rS   r  r    s<    #D)))?   tts    ))c                       e Zd Zd Zd ZdS )r,   c                    dd l }dd l}|j        }|st          d          t	          |          \  }}||j        }nt          |          }t          |          \  }}|rt          |          \  }}nd }t          |          }|pd}|pd}	 t          j        |          }n!# t          $ r}t          |          d }~ww xY wt          |j                  \  }	}
|	                    d          }t!          t#          t          |                    }|d d         |d         }}|r|d         s
|dd          }	 |                     ||||||j                  }|rdpd}|
D ]D}t)          |          \  }}|                                d	k    r|d
v r|                                }E|                    ||          \  }}d}|                    |j                  d         }|r|d|z  z  }||dk    r|d|z  z  }t5          j        |          }t9          |||j                  S # |j        $ r}t          |          |d }~ww xY w)Nr   ftp error: no host givenr   rQ  r\   r_   r  Dr   aAr   r  r'  r  zContent-type: %s
zContent-length: %d
)ftplibr  r   r   r   FTP_PORTrl   r   r   r   r  r  r}   r   r   r  r   mapconnect_ftprP   r   r   upperretrfiler  r   r  r  r   
all_errors)r   r	  r  r  r   r  ro  r  r4  re   attrsdirsrX   fwr   attrr   rs   retrlenrt   r  r  s                         rS   ftp_openzFTPHandler.ftp_open  s   x 	75666%%
d<?DDt99D  %%
d 	'--LD&&Ft}}zr2	 '--DD 	  	  	 3--	  ..ezz#C&&''#2#YRd 	Q 	8D	)!!$dD#+NNB<C&3D ) ))$//e::<<6))::: ;;==D++dD11KBG((66q9E 8/%77"w!||1G;;/88Gb'3<888  	) 	) 	)3--S(	)s1   B" "
C ,B;;C 8C*H# #
I-H==Ic           	      .    t          ||||||d          S )NF)
persistent)
ftpwrapper)r   ro  r  r   r  r  rP   s          rS   r  zFTPHandler.connect_ftp0  s(    $dD'%*, , , 	,rT   N)r   r   r   r  r  r   rT   rS   r,   r,     s3        2) 2) 2)h, , , , ,rT   r,   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )r-   c                 L    i | _         i | _        d| _        d| _        d| _        d S )Nr   <   r   )cacherP   soonestdelay	max_connsr   s    rS   r   zCacheFTPHandler.__init__7  s)    

rT   c                     || _         d S rV   )r  )r   ts     rS   
setTimeoutzCacheFTPHandler.setTimeout>  s    


rT   c                     || _         d S rV   )r  )r   rJ  s     rS   setMaxConnszCacheFTPHandler.setMaxConnsA  s    rT   c                 P   |||d                     |          |f}|| j        v r$t          j                    | j        z   | j        |<   n?t          ||||||          | j        |<   t          j                    | j        z   | j        |<   |                                  | j        |         S )NrQ  )joinr  r  r  rP   r  check_cache)r   ro  r  r   r  r  rP   r   s           rS   r  zCacheFTPHandler.connect_ftpD  s    D$7$* $	dj 8DL(vtT)-w8 8DJsO $	dj 8DLz#rT   c                    t          j                     }| j        |k    rat          | j                                                  D ]:\  }}||k     r/| j        |                                          | j        |= | j        |= ;t          t          | j                                                            | _        t          | j                  | j
        k    rt          | j                                                  D ]"\  }}|| j        k    r| j        |= | j        |=  n#t          t          | j                                                            | _        d S d S rV   )r  r  r   rP   r   r  r   minvaluesrn   r  )r   r  rD  rE  s       rS   r  zCacheFTPHandler.check_cacheO  s8   IKK<1T\//1122 ( (1q55JqM'')))
1Q4 3 3 5 56677 tz??dn,,T\//1122  1$$
1QE % tDL$7$7$9$9::;;DLLL -,rT   c                     | j                                         D ]}|                                 | j                                          | j                                         d S rV   )r  r  r   clearrP   )r   conns     rS   clear_cachezCacheFTPHandler.clear_cachec  s\    J%%'' 	 	DJJLLLL
rT   N)	r   r   r   r   r  r  r  r  r  r   rT   rS   r-   r-   4  sn              	 	 	< < <(    rT   r-   c                       e Zd Zd ZdS )r.   c                    |j         }|                    dd          \  }}|                    dd          \  }}t          |          }|                    d          rt	          j        |          }|d d         }|sd}t          j        d|t          |          fz            }t          t          j        |          ||          S )Nr{  r_   r  z;base64itext/plain;charset=US-ASCIIz$Content-type: %s
Content-length: %d
)r   r  r   endswithr  decodebytesr  r  rn   r   ioBytesIO)r   r	  rN   rV  rO   	mediatypert   s          rS   	data_openzDataHandler.data_openj  s     lyyQ''**S++	4  %%i(( 	'%d++D!#2#I 	65I+,TD		"-# $ $ "*T**GS999rT   N)r   r   r   r  r   rT   rS   r.   r.   i  s#        : : : : :rT   r.   r;  nt)r5   r4   c                 "    	 t          |           S rV   )r   pathnames    rS   r5   r5     s    	Cx   rT   c                 "    	 t          |           S rV   )r
   r  s    rS   r4   r4     s    	BXrT   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dS )r9   Nr   c                 l   dd| j         j        iz  }t          j        |t          d           |t                      }|| _        |                    d          | _        |                    d          | _	        d| j
        fdg| _        g | _        t          j        | _        d | _        t"          | _        d S )	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   rA   rB   rC   r6   rx  r   r  r  versionr   _URLopener__tempfilesrd   r|   _URLopener__unlink	tempcacheftpcache)r   rx  x509r4  s       rS   r   zURLopener.__init__  s    47>@W6XYc-!<<<<? llG,,+..($,79JK	 !rT   c                 .    |                                   d S rV   )r   r   s    rS   __del__zURLopener.__del__  s    

rT   c                 .    |                                   d S rV   )cleanupr   s    rS   r   zURLopener.close  s    rT   c                     | j         r:| j         D ](}	 |                     |           # t          $ r Y %w xY w| j         d d = | j        r| j                                         d S d S rV   )r  r  r}   r  r  )r   rX   s     rS   r  zURLopener.cleanup  s      	$(  MM$''''   D #> 	#N  """""	# 	#s   (
55c                 <    	 | j                             |           d S rV   )r   rk   )r   r   s     rS   	addheaderzURLopener.addheader  s#    	5t$$$$$rT   c                 0   	 t          t          |                    }t          |d          }| j        r:|| j        v r1| j        |         \  }}t	          |d          }t          |||          S t          |          \  }}|sd}|| j        v r6| j        |         }t          |          \  }}	t          |	          \  }
}|
|f}nd }d|z   }|| _	        |
                    dd          }t          | |          r|dk    r/|r|                     |||          S |                     ||          S 	 | t          | |          |          S  t          | |          ||          S # t          t           f$ r  t"          $ r}t#          d	|          |d }~ww xY w)
Nz%/:=&?~#+!$,;'@()*[]|rS  r  rX   open_-r   r  zsocket error)r	   r   r
   r  rM   r   r   rx  r   r   rH  r   open_unknown_proxyopen_unknownr   r   r   r}   )r   r  rO   rp   rt   rs   urltyperN   rh  	proxyhostr   r   ri   r4  s                 rS   rM   zURLopener.open  s   D7++,,&=>>>> 	4g77 $w 7Hgh%%Bb'7333!'** 	Gdl""L)E!+E!2!2GY'	22ND(/CCE 	||C%%tT"" 	8d.?&?&? 8..ugtDDD(($777	8|*wtT**3///*wtT**35558$ 	 	 	 	8 	8 	8.#..C7	8s   /E$ 
E$ $F?FFc                 J    	 t          |          \  }}t          dd|          )N	url errorzunknown url typer   r}   )r   r  rO   r   rN   s        rS   r  zURLopener.open_unknown  s)    =w''	ck#5t<<<rT   c                 P    	 t          |          \  }}t          dd|z  |          )Nr  zinvalid proxy for %sr  )r   rh  r  rO   r   rN   s         rS   r  zURLopener.open_unknown_proxy  s.    =w''	ck#9D#@%HHHrT   c                    	 t          t          |                    }| j        r|| j        v r| j        |         S t          |          \  }}|z|r|dk    rr	 |                     |          }|                                }|                                 t          t          |          d                   |fS # t          $ r Y nw xY w| 
                    ||          }	 |                                }	|rt          |d          }
nt          |          \  }}t          |pd          \  }}t          |pd          \  }}t          |pd          \  }}t          j                            |          d         }t!          j        |          \  }}| j                            |           t          j        |d          }
	 ||	f}| j        
|| j        |<   d}d}d}d}d|	v rt+          |	d	                   }|r ||||           	 |                    |          }|sn<|t/          |          z  }|
                    |           |dz  }|r ||||           T	 |
                                 n# |
                                 w xY w	 |                                 n# |                                 w xY w|dk    r||k     rt3          d
||fz  |          |S )NrX   r_   rY   r   r[   r\   r   r]   r^   r`   )r	   r   r  r   r  rc   r   r5   r   r}   rM   r   r   rd   re   splitextrg   mkstempr  rk   fdopenrl   rm   rn   ro   r   )r   rN   rp   rq   rO   r   url1rs   r   rt   ru   garbagere   suffixfdrv   rw   rx   rm   ry   rz   s                        rS   retrievezURLopener.retrieve  s   	;Ys^^$$> 	'cT^33>#&&__
dTTV^^))$//wwyy


#Jt$4$4Q$788$>>   YYsD!!%	ggiiG 
*8T** *3 *4:2 6 6 +DJB 7 7g *4:2 6 6g))$//2!)!1&!9!9X ''111iD))!7*>-*0DN3'#w..w'7899D 3JxT2227GGBKKE  CJJ&DIIe$$$MH! 7"
8R6667  				HHJJJJBHHJJJJ 199&C, &( ( ( s9   A B9 9
CC C J  BI1 J  1JJ   J6c                 >   	 d }d }t          |t                    r8t          |          \  }}|r!t          |          \  }}t	          |          }|}n|\  }}t          |          \  }}t          |          \  }	}
|
}d }|	                                dk    rd }nBt          |
          \  }}
|rt          |          \  }}|r	|	d||
}t          |          r|}|st          dd          |rIt	          |          }t          j
        |                                                              d          }nd }|rIt	          |          }t          j
        |                                                              d          }nd } ||          }i }|rd|z  |d<   |rd|z  |d<   |r||d	<   d
|d<   | j        D ]
\  }}|||<   |d|d<   |                    d|||           n|                    d||           	 |                                }n'# t           j        j        $ r t'          d          w xY wd|j        cxk    rdk     r"n nt+          ||j        d|z   |j                  S |                     ||j        |j        |j        |j        |          S )Nr  z://z
http errorr?  r|  zBasic %sr/  r  r   r   rJ  r@  zContent-Typer   r   rM  z$http protocol error: bad status liner1  r2  http:)r  r  r   r   r   r   r   r  r}   r  r  r  r  r   r   rR  r  r  BadStatusLiner   statusr   r4  
http_errorrs   rT  )r   connection_factoryrN   rO   user_passwdproxy_passwdr   r   realhostr  r   
proxy_authr  	http_connrt   r  r   r   s                     rS   _open_generic_httpzURLopener._open_generic_httpO  s?   
	 c3 	$'__ND( %$.t$4$4!Tt}}HH ND(!+D!1!1L$&x00MGTCK}}&((!+D!1!1$ A,6x,@,@)K G.5ggxxFH)) $#DA7<AAA 	"<00L),*=*=*?*?@@GGPPJJJ 	!+..K#K$6$6$8$899@@IIDDD&&t,,	 	E-7*-DG)* 	:(2T(9GO$ 	'&GFO
 !(!_ 	$ 	$MFE#GFOO&IGN#fhg>>>>eXw???	C ,,..HH{( 	C 	C 	CABBB	C (/''''C'''''hgm&o/ / / ??X[(,F F Fs   H $H:c                 P    	 |                      t          j        j        ||          S rV   )r  r  r  r;  r   rN   rO   s      rS   	open_httpzURLopener.open_http  s"     &&t{'A3MMMrT   c                     	 d|z  }t          | |          r6t          | |          }| ||||||          }	n |||||||          }	|	r|	S |                     |||||          S )Nzhttp_error_%d)r   r   r  )
r   rN   rs   errcodeerrmsgrt   rO   ri   r   rv   s
             rS   r  zURLopener.http_error  s    	E
 (4 	%T4((F|R&'BBR&'4HH$f}&&sBIIIrT   c                 R    	 |                                  t          ||||d           rV   )r   r   r   rN   rs   r  r  rt   s         rS   r  zURLopener.http_error_default  s(    L



Wfgt<<<rT   c                 Z    t           j                            || j        | j                  S )N)r  r  )r  r  r  r  r  )r   r   s     rS   _https_connectionzURLopener._https_connection  s0    ;..t48M59^ / E E ErT   c                 <    	 |                      | j        ||          S rV   )r  r  r  s      rS   
open_httpszURLopener.open_https  s     %**4+A3MMMrT   c                    	 t          |t                    st          d          |d d         dk    r=|dd         dk    r/|dd                                         dk    rt	          d          |                     |          S )	NzEfile error: proxy support for file protocol currently not implementedr;   rf  r  rQ     z
localhost/r  )r  r  r   r   rD   r  r   s     rS   	open_filezURLopener.open_file  s    =#s## 	dbcccrr7d??s1Q3x33qt9??3D3D3T3TLMMM'',,,rT   c                 P   	 dd l }dd l}t          |          \  }}t          |          }	 t	          j        |          }n,# t          $ r}t          |j        |j	                  d }~ww xY w|j
        }	|j                            |j        d          }
|                    |          d         } |j        d|pd|	|
fz            }|s4|}|d d         dk    rd|z   }t!          t#          |d	          ||          S t%          |          \  }}|st'          j        |          t+                      ft-                      z   v rU|}|d d         dk    rd|z   }n |d d
         dk    rt/          d|z            t!          t#          |d	          ||          S t          d          )Nr   Tr  z6Content-Type: %s
Content-Length: %d
Last-modified: %s
r  r_   rQ  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   rd   r  r}   r   strerrorrp   r  r  r  r  r  r  r   rM   r   r  r  r  thishostrD   )r   rN   r  r  r   rX   	localnamer  erx   r  r  rt   urlfiler  s                  rS   r  zURLopener.open_local_file  s   __
d &&		3GI&&EE 	3 	3 	31:qz222	3};))%.)FF$$S))!,+%+G"lD(345 5  	GGBQBx3#d*d9d33WgFFF%%
d 	G#D))y{{nxzz.IJJGBQBx3#d*bqbT!! !dgj!jkkkd9d33WgFFF<===s   A 
A*A%%A*c                    	 t          |t                    st          d          dd l}t	          |          \  }}|st          d          t          |          \  }}t          |          \  }}|rt          |          \  }}nd }t          |          }t          |pd          }t          |pd          }t          j
        |          }|sdd l}|j        }nt          |          }t          |          \  }}	t          |          }|                    d          }
|
d d         |
d         }}
|
r|
d         s
|
dd          }
|
r|
d         sd|
d<   |||d                    |
          f}t#          | j                  t&          k    rFt)          | j                  D ]1}||k    r)| j        |         }| j        |= |                                 2	 || j        vrt-          |||||
          | j        |<   |sd}nd	}|	D ]D}t/          |          \  }}|                                d
k    r|dv r|                                }E| j        |                             ||          \  }}|                    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   rQ  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  rl   r   r  r  rn   r  MAXFTPCACHEr   r   r  r   r   r  r  r  r  r  r   	ftperrors)r   rN   r  r   re   r  ro  r  r  r  r  rX   r   rD  rE  r   r  r   rs   r  r  rt   r  s                          rS   open_ftpzURLopener.open_ftp  sH   #s## 	b`aaa__
d?8$>???%%
d%%
d 	T 2 2vvft}}tzr""2&&#D)) 	MMM?DDt99D &&et}}zz##2#YRd0Q0QRR.Q.3aD$.t}++$-((  88a(Aa(GGIII	9$-''tVT4>> c" $ ) ))$//e::<<6))::: ;;==D M#.77dCCMR((#66q9EG 8/%77"w!||1G;;/88Gb'6C<888{{ 	9 	9 	9...//S8	9s   C7K
 
K3K..K3c           
         	 t          |t                    st          d          	 |                    dd          \  }}n# t          $ r t          dd          w xY w|sd}|                    d          }|dk    r$d	||d          vr||dz   d          }|d |         }nd
}g }|                    dt          j	        dt          j
        t          j                                        z             |                    d|z             |dk    r;t          j        |                    d                                        d          }nt          |          }|                    dt!          |          z             |                    d
           |                    |           d                    |          }t%          j        |          }t)          j        |          }t-          |||          S )NzEdata error: proxy support for data protocol currently not implementedr  r_   z
data errorzbad data URLr  ;r   rr  r   zDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %sr  r|  zlatin-1zContent-Length: %d
)r  r  r   r  rD   r}   rfindrk   r  strftimegmtimer  r  r  r  r   rn   r  r  r  r  StringIOr   )	r   rN   rO   r   semirR  r4  rt   fs	            rS   	open_datazURLopener.open_data1  s   #s## 	dbccc	899S!,,LT44 	8 	8 	8,777	8 	10Dzz#199DK//DFGG}H;DDH

:dm,G,0K	,D,DF F F 	G 	G 	G

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

'#d))3444

2

4iinn+C00K!Wc***s   A ArV   NNN)r   r   r   r  r   r  r   r  r   r  r  rM   r  r  r  r  r  r  r  rE   r  r  r!  r  r,  r6  r   rT   rS   r9   r9     s        K ;.G! ! ! !4    # # #% % %"8 "8 "8 "8H= = = =
I I I I= = = =BZF ZF ZFxN N N NJ J J J = = =
  N	E 	E 	E
	N 	N 	N 	N- - -> > >@89 89 89t'+ '+ '+ '+ '+ '+rT   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dS )r:   c                 Z    t          j        | g|R i | i | _        d| _        d| _        d S )Nr   r;  )r9   r   
auth_cachetriesmaxtries)r   r   r  s      rS   r   zFancyURLopener.__init__^  s<    41$111&111
rT   c                 .    	 t          ||d|z   |          S )Nr  )r   r  s         rS   r  z!FancyURLopener.http_error_defaultd  s    A"gw}g>>>rT   Nc                    	 | xj         dz  c_         	 | j        rE| j         | j        k    r5t          | d          r| j        }n| j        } |||dd|          d| _         S |                     ||||||          }|d| _         S # d| _         w xY w)Nr_   http_error_500r'  z)Internal Server Error: Redirect Recursionr   )r;  r<  r   r?  r  redirect_internal)	r   rN   rs   r  r  rt   rO   r   rv   s	            rS   r`  zFancyURLopener.http_error_302h  s    3

a

	} %t}!<!<4!122 3.DD2DtCSG#% % DJJ	 ++CWf,3T; ;FDJJDJNNNNs   AB B 	Bc                 $   d|v r	|d         }nd|v r	|d         }nd S |                                  t          | j        dz   |z   |          }t          |          }|j        dvrt          |||d|z  z   ||          |                     |          S )NrM  rN  r{  rO  z( Redirection to url '%s' is not allowed.)r   r   r   r   rV  r   rM   )	r   rN   rs   r  r  rt   rO   rI  r]  s	            rS   r@  z FancyURLopener.redirect_internalz  s      Z(FFgU^FFF



 S3.77F## ?">>>FG"FOP#R) ) )
 yy   rT   c                 8    	 |                      ||||||          S rV   r`  r   rN   rs   r  r  rt   rO   s          rS   ra  zFancyURLopener.http_error_301  s#    8""3GVWdKKKrT   c                 8    	 |                      ||||||          S rV   rC  rD  s          rS   rb  zFancyURLopener.http_error_303  s#    I""3GVWdKKKrT   c                 n    	 ||                      ||||||          S |                     |||||          S rV   )r`  r  rD  s          rS   rc  zFancyURLopener.http_error_307  D    ?<&&sB$OOO**3GVWMMMrT   c                 n    	 ||                      ||||||          S |                     |||||          S rV   )ra  r  rD  s          rS   rd  zFancyURLopener.http_error_308  rG  rT   Fc                 ,   	 d|vrt                               | |||||           |d         }t          j        d|          }	|	st                               | |||||           |	                                \  }
}|
                                dk    rt                               | |||||           |st                               | |||||           d| j        z   dz   }| t          | |          ||          S  t          | |          |||          S )Nr  ![ 	]*([^ 	]+)[ 	]+realm="([^"]*)"r  retry__basic_authr9   r  r  matchr  r   r   r   r   rN   rs   r  r  rt   rO   r-  stuffrN  rV  r  ri   s                rS   r  zFancyURLopener.http_error_401  sQ   	=W,,((sB)0&'C C C*+?GG 	C((sB)0&'C C C<<>>W$$((sB)0&'C C C 	((sB  $)#m3<%74%%c5111%74%%c5$777rT   c                 ,   	 d|vrt                               | |||||           |d         }t          j        d|          }	|	st                               | |||||           |	                                \  }
}|
                                dk    rt                               | |||||           |st                               | |||||           d| j        z   dz   }| t          | |          ||          S  t          | |          |||          S )Nr  rJ  r  retry_proxy_rL  rM  rO  s                rS   r  zFancyURLopener.http_error_407  sQ   	=w..((sB)0&'C C C,-?GG 	C((sB)0&'C C C<<>>W$$((sB)0&'C C C 	((sB  	)M9<%74%%c5111%74%%c5$777rT   c                    t          |          \  }}d|z   |z   }| j        d         }t          |          \  }}	t          |	          \  }	}
|	                    d          dz   }|	|d          }	|                     |	||          \  }}|s|sd S t          |d          dt          |d          d|	}	d|	z   |
z   | j        d<   ||                     |          S |                     ||          S )Nhttp://r  rg  r_   r   r  r{  r   rx  r   r   get_user_passwdr
   rM   r   rN   r  rO   r   r   rI  rh  r  r  proxyselectorr   ro  r  s                 rS   retry_proxy_http_basic_authz*FancyURLopener.retry_proxy_http_basic_auth  s   #ChT!H,V$'..#-i#8#8 	=NN3!#abbM	++Iua@@f,,"'2"6"6"6"6"6"'R"8"8"8"8"8))E	(94}DV<99V$$$99VT***rT   c                    t          |          \  }}d|z   |z   }| j        d         }t          |          \  }}	t          |	          \  }	}
|	                    d          dz   }|	|d          }	|                     |	||          \  }}|s|sd S t          |d          dt          |d          d|	}	d|	z   |
z   | j        d<   ||                     |          S |                     ||          S )Nhttps://r   rg  r_   r   r  r{  rU  rW  s                 rS   retry_proxy_https_basic_authz+FancyURLopener.retry_proxy_https_basic_auth  s   #Chd"X-W%'..#-i#8#8 	=NN3!#abbM	++Iua@@f,,"'2"6"6"6"6"6"'R"8"8"8"8"8))E	 *Y 6 FW<99V$$$99VT***rT   c                 d   t          |          \  }}|                    d          dz   }||d          }|                     |||          \  }}|s|sd S t          |d          dt          |d          d|}d|z   |z   }	||                     |	          S |                     |	|          S )Nrg  r_   r   r  r{  rT  r   r   rV  r
   rM   
r   rN   r  rO   r   r   r   ro  r  rI  s
             rS   r  z$FancyURLopener.retry_http_basic_auth	  s    #ChIIcNNQABBx++D%;;f,,"4b11111"633333TT;T!H,<99V$$$99VT***rT   c                 d   t          |          \  }}|                    d          dz   }||d          }|                     |||          \  }}|s|sd S t          |d          dt          |d          d|}d|z   |z   }	||                     |	          S |                     |	|          S )Nrg  r_   r   r  r{  r[  r^  r_  s
             rS   retry_https_basic_authz%FancyURLopener.retry_https_basic_auth	  s    #ChIIcNNQABBx++D%;;f,,"4b11111"633333TT;d"X-<99V$$$99VT***rT   r   c                     |dz   |                                 z   }|| j        v r|r	| j        |= n| j        |         S |                     ||          \  }}|s|r||f| j        |<   ||fS )Nrg  )r   r:  prompt_user_passwd)r   r   r  r  r   ro  r  s          rS   rV  zFancyURLopener.get_user_passwd	  s    ckDJJLL($/!! ,OC((s++..tU;;f@6@4.4?3/V|rT   c           	          	 dd l }	 t          d|d|d          }|                     d|d|d|d          }||fS # t          $ r t                       Y dS 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  re  ro  r  s         rS   rc  z!FancyURLopener.prompt_user_passwd)	  s    1	5EEE444HIID___uuuddd&$ % %F<  	 	 	GGG::	s   8A   AArV   )NFrZ  )r   r   r   r   r  r`  r@  ra  rb  rc  rd  r  r  rY  r\  r  ra  rV  rc  r   rT   rS   r:   r:   [  sg       I  ? ? ?   $! ! !8L L L LL L L LN N N NN N N N FJ8 8 8 82 FJ8 8 8 82+ + + +$+ + + +$+ + + ++ + + +	 	 	 	
 
 
 
 
rT   r:   c                  H    	 t           t          j        d          a t           S )Nr  )
_localhostr  r  r   rT   rS   r  r  9	  s!    B)+66
rT   c                     	 t           v	 t          t          j        t          j                              d                   a n<# t          j        $ r* t          t          j        d          d                   a Y nw xY wt           S )Nr;   r  )	_thishostr  r  r  r  r  r   rT   rS   r$  r$  A	  s    6	Gf5f6H6J6JKKANOOII 	G 	G 	Gf5kBB1EFFIII	Gs   8A 6A<;A<c                  6    	 t           dd l} | j        a t           S r  )
_ftperrorsr  r  )r  s    rS   r+  r+  L	  s"    ;&
rT   c                  H    	 t           t          j        d          a t           S r   )
_noheadersr  r  r   rT   rS   	noheadersrq  U	  s!    /.r22
rT   c                   @    e Zd Z	 	 	 d
dZd Zd Zd Zd Zd Zd	 Z	dS )r  NTc                     || _         || _        || _        || _        || _        || _        d| _        || _        	 |                                  d S #  | 	                                  xY wr  )
ro  r  r   r  r  rP   refcount	keepaliveinitr   )r   ro  r  r   r  r  rP   r  s           rS   r   zftpwrapper.__init__b	  si    				#	IIKKKKK	JJLLLs   A A'c                 V   dd l }d| _        |                                | _        | j                            | j        | j        | j                   | j                            | j	        | j
                   d                    | j                  }| j                            |           d S )Nr   rQ  )r  busyFTPrP  connectr   r  rP   loginro  r  r  r  cwd)r   r  _targets      rS   rv  zftpwrapper.initr	  s    	::<<DIt|<<<ty$+...((49%%WrT   c                 D   dd l }|                                  |dv rd}d}nd|z   }d}	 | j                            |           n># |j        $ r1 |                                  | j                            |           Y nw xY wd }|rk|si	 d|z   }| j                            |          \  }}nE# |j        $ r8}t          |          d d         dk    rt          d	|           |Y d }~nd }~ww xY w|s| j                            d           |r| j        
                                }		 	 | j                            |           n%# |j        $ r}t          d
|z            |d }~ww xY w	 | j                            |	           n# | j                            |	           w xY wd|z   }nd}| j                            |          \  }}d| _        t          |                    d          | j                  }
| xj        dz  c_        |                                 |
|fS )Nr   )r'  r  zTYPE Ar_   zTYPE zRETR r  550r)  zftp error: %rzLIST LISTr  )r  endtransferrP  voidcmdr  rv  ntransfercmd
error_permr  r   pwdr|  rx  r   makefile
file_closert  r   )r   rX   r   r  cmdisdirr  r  rT  r  ftpobjs              rS   r  zftpwrapper.retrfile{	  s   :XsquudNcAE	"HS!!!!  	" 	" 	"IIKKKHS!!!!!	"  	G 	GGn $ 5 5c : :gg$ G G Gv;;rr?e++"#9#9#9::F ,++++G  	7HX&&& hllnn&MT****!, M M M&'?@@fLM + HLL%%%%DHLL%%%%n H11#66MD'	dmmD114?CC

  sS   A 8B ?B 
"B- -
C/7.C**C/+E F 
E(E##E((F F#c                     | j         sd S d| _         	 | j                                         d S # t                      $ r Y d S w xY wr  )rx  rP  voidrespr+  r   s    rS   r  zftpwrapper.endtransfer	  s]    y 	F		H{{ 	 	 	DD	s   - AAc                 V    d| _         | j        dk    r|                                  d S d S )NFr   )ru  rt  
real_closer   s    rS   r   zftpwrapper.close	  s4    =AOO rT   c                     |                                   | xj        dz  c_        | j        dk    r| j        s|                                  d S d S d S )Nr_   r   )r  rt  ru  r  r   s    rS   r  zftpwrapper.file_close	  s\    =AdnOO rT   c                     |                                   	 | j                                         d S # t                      $ r Y d S w xY wrV   )r  rP  r   r+  r   s    rS   r  zftpwrapper.real_close	  sW    	HNN{{ 	 	 	DD	s   1 AA)NT)
r   r   r   r   rv  r  r  r   r  r  r   rT   rS   r  r  _	  s        E?C       *! *! *!X    
      rT   r  c                     	 i } t           j                                        D ]6\  }}|                                }|r|dd          dk    r|| |d d         <   7dt           j        v r|                     dd            t           j                                        D ]U\  }}|dd          dk    rB|                                }|r|| |d d         <   7|                     |d d         d            V| S )Ni_proxyREQUEST_METHODr  )rd   environr   r   r   )rx  ri   r   s      rS   getproxies_environmentr  	  s    G z'')) ' 'ezz|| 	'T"##Y(**!&GD"I
 2:%%FD!!!z'')) - -e9  ::<<D -%*SbS	""D"It,,,NrT   c                    	 |t                      }	 |d         }n# t          $ r Y dS w xY w|dk    rdS |                                 } t          |           \  }}|                    d          D ]}|                                }|rj|                    d          }|                                }||k    s| |k    r dS d|z   }|                    |          s|                     |          r dS dS )NnoF*Tr  .)r  r  r   r   r  r  lstripr  )r   rx  no_proxyhostonlyr  ri   s         rS   proxy_bypass_environmentr  	  s     (**4=   uu 3t::<<D%%NHds## 	 	zz|| 	;;s##D::<<D444<<tt:D  && $--*=*= tt5s    
**c                 z   	 ddl m } ddlm}m} t	          |           \  }}d }d| vr
|d         rdS d }	 t           ||                    }n# |$ r Y nw xY w|                    dd	          D ]}	|	st          j        d
|	          }
|
| ||
	                    d                    }|
	                    d          }|/d|
	                    d          
                    d          dz   z  }nt          |dd                    }|dk     s|dk    rd|z
  }||z	  ||z	  k    r dS  || |	          r dS dS )Nr   fnmatch)AddressValueErrorIPv4Addressc                    |                      d          }t          t          t          |                    }t	          |          dk    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  rl   rn   )ipAddrr  s     rS   ip2numz,_proxy_bypass_macosx_sysconf.<locals>.ip2num
  s    S!!Se__%%u::??\\\)2A2.EaB58r>2eAh!mDuQxOOrT   r  exclude_simpleT
exceptionsr   z(\d+(?:\.\d+)*)(/\d+)?r_   r;   r      F)r  	ipaddressr  r  r   rl   r   r  rN  groupcount)r   proxy_settingsr  r  r  r  r  r  hostIPr   rJ  r  masks                rS   _proxy_bypass_macosx_sysconfr  
  s   
  88888888%%NHdP P P $*+ 	4F[[**++     ##L"55  hH.66=V/6!''!**%%D771::D|AGGAJJ,,S11A5648}}axx4"999D$DDL11tt 2 WT5!! 	44	 5s   A AAc                     	 ddl m } t          |           \  } }|                    d          }|D ]3}|                                }|dk    rd| vr dS $ || |          r dS 4dS )Nr   r  r.  z<local>r  TF)r  r   r  r  )r   overrider  r   proxy_overrider  s         rS   _proxy_bypass_winreg_overrider  G
  s      GD!^^C((N  zz||9$tt WT4   	44	5rT   darwin)_get_proxy_settings_get_proxiesc                 >    t                      }t          | |          S rV   )r  r  )r   r  s     rS   proxy_bypass_macosx_sysconfr  b
  s    ,..+D.AAArT   c                       	 t                      S rV   )r  r   rT   rS   getproxies_macosx_sysconfr  f
  s    	
 ~~rT   c                 b    	 t                      }|rt          | |          S t          |           S rV   )r  r  r  r   rx  s     rS   r  r  p
  s:    	 )** 	5+D':::.t444rT   c                  :    t                      pt                      S rV   )r  r  r   rT   rS   r6   r6   }
  s    %''F+D+F+FFrT   c                  ,   	 i } 	 dd l }n# t          $ r | cY S w xY w	 |                    |j        d          }|                    |d          d         }|rt          |                    |d          d                   }d|vrd|vrd                    |          }|                    d          D ]J}|                    dd          \  }}t          j	        d	|          s|d
v rd|z   }n|dk    rd|z   }|| |<   K| 
                    d          rPt          j        dd| d                   }| 
                    d          p|| d<   | 
                    d          p|| d<   |                                 n# t          t          t          f$ r Y nw xY w| S )Nr   ;Software\Microsoft\Windows\CurrentVersion\Internet SettingsProxyEnableProxyServerrr  r.  zhttp={0};https={0};ftp={0}r_   z(?:[^/:]+)://)r  r   rP  rT  sockszsocks://z	^socks://z	socks4://r  r   )winregImportErrorOpenKeyHKEY_CURRENT_USERQueryValueExr  r   r  r  rN  r   r   Closer}   rD   r   )rx  r  internetSettingsproxyEnableproxyServerpr   addresss           rS   getproxies_registryr  
  s   	
 	MMMM 	 	 	NNN	"	%~~f.FN P  P --.>/<> >>?AK G!&"5"56F7D#F #FFG#I J Jk))c.D.D">"E"Ek"R"RK$**3// 
0 
0A()Q%Hg8OW== ;#'???&/'&9GG%00&07&:G(/GH%%;;w'' G f\;@PQQG&-kk&&9&9&DWGFO'.{{7';';'FwGG$""$$$$Y/ 	 	 	 D		
 s   
 EE7 7FFc                  <    	 t                      pt                      S rV   )r  r  r   rT   rS   r6   r6   
  s!    	 &''@+>+@+@@rT   c                 B   	 dd l }n# t          $ r Y dS w xY w	 |                    |j        d          }|                    |d          d         }t          |                    |d          d                   }n# t          $ r Y dS w xY w|r|sdS t          | |          S )Nr   Fr  r  ProxyOverride)r  r  r  r  r  r  r}   r  )r   r  r  r  proxyOverrides        rS   proxy_bypass_registryr  
  s    	MMMM 	 	 	55			%~~f.FN P  P --.>/<> >>?AK 3 34D5D!F !FFG!I J JMM  	 	 	55	 	- 	5,T=AAAs    
A A: :
BBc                 b    	 t                      }|rt          | |          S t          |           S rV   )r  r  r  r  s     rS   r  r  
  s:    	 )** 	/+D':::(...rT   r7  rV   )~r  r   r  r  http.clientr  r  rd   	posixpathr  r  rX  r  r  rg   ra   rA   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   rF   rE   r  __all__version_infor   rL   r  r1   r2   rj   r7   r8   r  ASCIIr   r   r   r   r3   r   r0   r   r   rq  r    r!   r"   r#   r$   r%   r&   urandomr  r'   r(   r)   r2  r*   r   r  rK   rk   r   r/   r  r  r+   r  r,   r-   r.   r*  ri   
nturl2pathr5   r4   r  r9   r:   rj  r  rl  r$  rn  r+  rp  rq  r  r  r  r  r  platform_scproxyr  r  r  r  r  r6   r  r  r   rT   rS   <module>r     s	  Cf         				 				     				   



        C B B B B B B B B B" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
 5 4 4 4 4 4 4 4JJJ II    III
  $ (!,,
F$B M+45$M+ M+ M+ M+ M+^   = = = =~   rz(BH--   k" k" k" k" k" k" k" k"ZI+ I+ I+ I+ I+ I+ I+ I+^" " "H8 8 8 8 8 8 8 8&# # # # # # # #"; ; ; ; ;k ; ; ;n2 n2 n2 n2 n2+ n2 n2 n2b, , ,B)> )> )> )> )>; )> )> )>V=* =* =* =* =* =* =* =*@G G G G Go G G G3 3 3 3 3#B 3 3 3>k# k# k# k# k# k# k# k#^    3[       4k     zO O O O O O O Od    K)B   $
 
 
 
 
[*C 
 
 
s s s s s+ s s sl3 3 3 3 3% 3 3 3 74;)** #8 8 8 8 8* 8 8 8 NN>"""# # # # #+ # # #$6 6 6 6 6[ 6 6 6
  )* )* )*V11 11 11 11 11+ 11 11 11f  7, 7, 7, 7, 7, 7, 7, 7,r3 3 3 3 3j 3 3 3j: : : : :+ : : :B  7d??555555555! ! !
   z+ z+ z+ z+ z+ z+ z+ z+zX X X X XY X X Xz 
   	   
   
  a a a a a a a aH  >       J< < <@  0 <8::::::::B B B  5 5 5G G G G G W__/ / /bA A AB B B(/ / / / / (J+LLLs   =B BB