a XC?h���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*z ddl+Z+Wne,�ydZ-Yn0dZ-gd�Z.de j/dd �Z0da1de j2fddddd �d d �Z3d d�Z4gZ5d�dd�Z6dd�Z7e �8de j9�Z:dd�Z;Gdd�d�ZGdd�d�Z?Gdd�de?�Z@Gd d!�d!e?�ZAGd"d#�d#e?�ZBd$d%�ZCGd&d'�d'e?�ZDGd(d)�d)�ZEGd*d+�d+eE�ZFGd,d-�d-eF�ZGGd.d/�d/�ZHGd0d1�d1eHe?�ZIGd2d3�d3eHe?�ZJejKZLGd4d5�d5�ZMGd6d7�d7e?eM�ZNGd8d9�d9e?eM�ZOGd:d;�d;e?�ZPGd��r�Gd?d@�d@eP�ZTe.�Ud@�GdAdB�dBe?�ZVGdCdD�dDe?�ZWdEdF�ZXdGdH�ZYGdIdJ�dJe?�ZZdKdL�Z[GdMdN�dNe?�Z\GdOdP�dPe\�Z]GdQdR�dRe?�Z^dSZ_ej`dTk�r�ddUlambZbmcZcndVdW�ZbdXdY�ZciZdGdZd[�d[�ZeGd\d]�d]ee�Zfdagd^d_�Zhdaid`da�Zjdakdbdc�Zldamddde�ZnGdfdg�dg�Zodhdi�Zpd�djdk�Zqdldm�Zrdndo�Zse jtdpk�rPddqlumvZvmwZwdrds�Zxdtdu�Zydvdw�Zzdxdy�Z{n6ej`dTk�r~dzd{�Z|d|dy�Z{d}d~�Z}ddw�ZznepZ{eqZzdS)��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� addclosehookFT)!�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 Cs�|s |s |rfddl}|�dtd�|dur2td��ts>td��tjtjj||d�}t |d�}t |�} n0|r~t |d�}t |�} nt dur�t �a } nt } | � |||�S)NrzJcafile, capath and cadefault are deprecated, use a custom context instead.r:zDYou can't pass both context and any of cafile, capath, and cadefaultzSSL support not available)r;r<)r>) �warnings�warn�DeprecationWarning� ValueError� _have_ssl�sslZcreate_default_contextZPurposeZ SERVER_AUTH� HTTPSHandlerr2�_opener�open) �url�data�timeoutr;r<r=r>r?Z https_handler�opener�rL�3/opt/alt/python39/lib64/python3.9/urllib/request.pyr0�s04 �� �     r0cCs|adS�N)rF)rKrLrLrMr1�sr1c Cslt|�\}}t�t||����}|��}|dkrR|sRtj�|�|fWd�S|rbt|d�}nt j dd�}|j }t � |�|��||f} d} d} d} d} d|vr�t|d �} |r�|| | | �|�| �}|s�q| t|�7} |�|�| d 7} |r�|| | | �q�Wd�n1�s0YWd�n1�s80Y| dk�rh| | k�rhtd | | f| ��| S) N�file�wbF)�delete� �����r�content-length�Content-Length��1retrieval incomplete: got only %i out of %i bytes)r � contextlib�closingr0�info�os�path�normpathrG�tempfileZNamedTemporaryFile�name�_url_tempfiles�append�int�read�len�writer)rH�filename� reporthookrIZurl_typer\�fp�headers�tfp�result�bs�sizerc�blocknum�blockrLrLrMr6�sH          N��r6c CsBtD]&}zt�|�Wqty(Yq0qtdd�=tr>dadSrN)r`r[�unlink�OSErrorrF)Z temp_filerLrLrMr7s  r7z:\d+$cCs<|j}t|�d}|dkr&|�dd�}t�d|d�}|��S)NrV��Host)�full_urlr� get_header� _cut_port_re�sub�lower)�requestrH�hostrLrLrM� request_host+s   r{c@s�eZdZdidddfdd�Zedd��Zejdd��Zejdd��Zed d ��Zejd d ��Zejd d ��Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zd#dd�Zdd �Zd!d"�ZdS)$rNFc Csl||_i|_i|_d|_||_d|_|��D]\}}|�||�q,|durRt|�}||_ ||_ |rh||_ dSrN) rtri�unredirected_hdrs�_datarI� _tunnel_host�items� add_headerr{�origin_req_host� unverifiable�method) �selfrHrIrir�r�r��key�valuerLrLrM�__init__=szRequest.__init__cCs|jrd�|j|j�S|jS)Nz{}#{})�fragment�format� _full_url�r�rLrLrMrtOszRequest.full_urlcCs(t|�|_t|j�\|_|_|��dSrN)rr�rr��_parse�r�rHrLrLrMrtUs cCsd|_d|_d|_dS�Nrr)r�r��selectorr�rLrLrMrt\scCs|jSrN)r}r�rLrLrMrIbsz Request.datacCs(||jkr$||_|�d�r$|�d�dS)N�Content-length)r}� has_header� remove_header)r�rIrLrLrMrIfs  cCs d|_dSrN)rIr�rLrLrMrIpscCsNt|j�\|_}|jdur(td|j��t|�\|_|_|jrJt|j�|_dS)Nzunknown url type: %r) r r��typerBrtr rzr�r )r��restrLrLrMr�ts  zRequest._parsecCs|jdurdnd}t|d|�S)N�POST�GETr�)rI�getattr)r�Zdefault_methodrLrLrM� get_method|szRequest.get_methodcCs|jSrN)rtr�rLrLrM� get_full_url�szRequest.get_full_urlcCs2|jdkr|js|j|_n||_|j|_||_dS)N�https)r�r~rzrtr�)r�rzr�rLrLrM� set_proxy�s  zRequest.set_proxycCs |j|jkSrN)r�rtr�rLrLrM� has_proxy�szRequest.has_proxycCs||j|��<dSrN)ri� capitalize�r�r��valrLrLrMr��szRequest.add_headercCs||j|��<dSrN)r|r�r�rLrLrM�add_unredirected_header�szRequest.add_unredirected_headercCs||jvp||jvSrN)rir|�r�� header_namerLrLrMr��s �zRequest.has_headercCs|j�||j�||��SrN)ri�getr|)r�r��defaultrLrLrMru�s �zRequest.get_headercCs |j�|d�|j�|d�dSrN)ri�popr|r�rLrLrMr��szRequest.remove_headercCsi|j�|j�}t|���SrN)r|ri�listr)r��hdrsrLrLrM� header_items�szRequest.header_items)N)�__name__� __module__� __qualname__r��propertyrt�setter�deleterrIr�r�r�r�r�r�r�r�rur�r�rLrLrLrMr;s6�        rc@sNeZdZdd�Zdd�Zdd�Zdd�Zd ejfd d �Z dd d �Z dd�Z d S)rcCs6dt}d|fg|_g|_i|_i|_i|_i|_dS)N�Python-urllib/%sz User-agent)� __version__� addheaders�handlers� handle_open� handle_error�process_response�process_request)r�Zclient_versionrLrLrMr��s zOpenerDirector.__init__c CsRt|d�stdt|���d}t|�D�]}|dvr6q&|�d�}|d|�}||dd�}|�d�r�|�d�|d}||dd�}z t|�}Wnty�Yn0|j� |i�} | |j|<n>|dkr�|}|j } n*|d kr�|}|j } n|d kr&|}|j } nq&| � |g�} | �r t�| |�n | �|�d }q&|�rNt�|j|�|�|�dS) N� add_parentz%expected BaseHandler instance, got %rF)�redirect_request�do_open� proxy_open�_rV�errorrG�responseryT)�hasattr� TypeErrorr��dir�find� startswithrbrBr�r�r�r�r�� setdefault�bisectZinsortrar�r�) r��handlerZadded�meth�i�protocolZ condition�j�kind�lookupr�rLrLrM� add_handler�sL �        zOpenerDirector.add_handlercCsdSrNrLr�rLrLrM�close�szOpenerDirector.closec Gs<|�|d�}|D]&}t||�}||�}|dur|SqdS)NrL)r�r�) r��chainr�� meth_name�argsr�r��funcrkrLrLrM� _call_chain�s   zOpenerDirector._call_chainNc Cs�t|t�rt||�}n|}|dur(||_||_|j}|d}|j�|g�D]}t||�}||�}qJt � d|j |j|j |� ��|�||�} |d}|j�|g�D]}t||�}||| �} q�| S)NZ_requestzurllib.RequestZ _response)� isinstance�strrrIrJr�r�r�r��sys�auditrtrir��_openr�) r��fullurlrIrJ�reqr�r�Z processorr�r�rLrLrMrG�s$       zOpenerDirector.opencCsP|�|jdd|�}|r|S|j}|�|j||d|�}|r>|S|�|jdd|�S)Nr�Z default_openr��unknown� unknown_open)r�r�r�)r�r�rIrkr�rLrLrMr�s  � �� �zOpenerDirector._opencGs~|dvr,|jd}|d}d|}d}|}n|j}|d}d}|||f|}|j|�}|r^|S|rz|dd f|}|j|�SdS) N��httpr�r�r:z http_error_%srVZ_errorrr��http_error_default)r�r�)r��protor��dictr�Zhttp_errZ orig_argsrkrLrLrMr�s   zOpenerDirector.error)N) r�r�r�r�r�r�r��socket�_GLOBAL_DEFAULT_TIMEOUTrGr�r�rLrLrLrMr�s /  rc Gs�t�}ttttttttt g }t t j d�r2|� t�t�}|D]B}|D]8}t|t�rht||�r||�|�qDt||�rD|�|�qDq<|D]}|�|�q�|D]}|�|��q�|D]}t|t�r�|�}|�|�q�|S)N�HTTPSConnection)rrr.r)rrr+r*r/r-r�r��clientrarE�setr�r�� issubclass�add�remover�)r�rKZdefault_classes�skip�klassZcheck�hrLrLrMr27s2 �         r2c@s(eZdZdZdd�Zdd�Zdd�ZdS) r��cCs ||_dSrN)�parent)r�r�rLrLrMr�^szBaseHandler.add_parentcCsdSrNrLr�rLrLrMr�aszBaseHandler.closecCst|d�sdS|j|jkS)N� handler_orderT)r�r�)r��otherrLrLrM�__lt__es zBaseHandler.__lt__N)r�r�r�r�r�r�r�rLrLrLrMr[src@seZdZdZdd�ZeZdS)r/i�cCsH|j|j|��}}}d|kr,dksDn|j�d|||||�}|S)N���,r�)�code�msgrZr�r�)r�ryr�r�r�r�rLrLrM� http_responsers  �z HTTPErrorProcessor.http_responseN)r�r�r�r�r��https_responserLrLrLrMr/ns r/c@seZdZdd�ZdS)rcCst|j||||��dSrN)rrt)r�r�rhr�r�r�rLrLrMr��sz*HTTPDefaultErrorHandler.http_error_defaultN)r�r�r�r�rLrLrLrMrsrc@s4eZdZdZdZdd�Zdd�ZeZZZ dZ dS) r�� c st|��}|dvr|dvs:|dvr(|dks:t|j||||��|�dd�}d��fdd �|j��D�}t|||jd d �S) N)�-�.�/i3)r�ZHEAD)r�r�r�r�� z%20)rTz content-typecs"i|]\}}|���vr||�qSrL)rx��.0�k�v�ZCONTENT_HEADERSrLrM� �s  �z8HTTPRedirectHandler.redirect_request..T)rir�r�)r�rrt�replacerirrr�) r�r�rhr�r�ri�newurl�mZ newheadersrLrrMr��s �� �z$HTTPRedirectHandler.redirect_requestc CsLd|vr|d}nd|vr$|d}ndSt|�}|jdvrRt||d||f||��|jsn|jrnt|�}d|d<t|�}t|dtj d�}t |j |�}|� ||||||�}|dur�dSt |d ��r|j} |_| �|d �|jks�t| �|jk�rt|j ||j|||��ni} |_|_| �|d �d | |<|��|��|jj||jd �S) N�location�uri�r�r��ftprrz+%s - Redirection to url '%s' is not allowed�/r:z iso-8859-1)�encoding�safe� redirect_dictrrV�rJ)r�schemerr\Znetlocr�rr �stringZ punctuationrrtr�r�r r�� max_repeatsrd�max_redirections�inf_msgrcr�r�rGrJ) r�r�rhr�r�rir�urlparts�newZvisitedrLrLrM�http_error_302�sH    � �    � �z"HTTPRedirectHandler.http_error_302zoThe HTTP server returned a redirect error that would lead to an infinite loop. The last 30x error message was: N) r�r�r�rrr�r�http_error_301�http_error_303�http_error_307rrLrLrLrMr�s &< rc Cs�t|�\}}|�d�s d}|}nZ|�d�s6td|��d|vrV|�d�}|�d|�}n |�dd�}|dkrnd}|d|�}t|�\}}|dur�t|�\}} nd}} ||| |fS)Nr �//zproxy URL with no authority: %r�@r:rS)r r�rBr�rr) �proxyrZr_scheme� authorityZhost_separator�endZuserinfo�hostport�user�passwordrLrLrM� _parse_proxy�s$        r"c@s"eZdZdZddd�Zdd�ZdS)r�dNcCsP|durt�}||_|��D].\}}|��}t|d||||jfdd��qdS)Nz%s_opencSs ||||�SrNrL)�rrr�r�rLrLrM�!sz'ProxyHandler.__init__..)r5�proxiesrrx�setattrr�)r�r&r�rHrLrLrMr�s �zProxyHandler.__init__c Cs�|j}t|�\}}}}|dur"|}|jr6t|j�r6dS|rv|rvdt|�t|�f} t�| ����d�} |� dd| �t|�}|� ||�||ks�|dkr�dS|j j ||j d�SdS)N�%s:%s�ascii�Proxy-authorization�Basic r�r)r�r"rz� proxy_bypassr �base64� b64encode�encode�decoder�r�r�rGrJ) r�r�rr�Z orig_typeZ proxy_typer r!rZ user_passZcredsrLrLrMr�$s"� zProxyHandler.proxy_open)N)r�r�r�r�r�r�rLrLrLrMrs rc@s6eZdZdd�Zdd�Zdd�Zd dd �Zd d �Zd S)r cCs i|_dSrN)�passwdr�rLrLrMr�BszHTTPPasswordMgr.__init__cs\t|t�r|g}|�jvr$i�j|<dD].�t��fdd�|D��}||f�j||<q(dS)N�TFc3s|]}��|��VqdSrN)� reduce_uri)r��u�� default_portr�rLrM� Lsz/HTTPPasswordMgr.add_password..)r�r�r1�tuple)r��realmrr r1� reduced_urirLr5rM� add_passwordEs   �zHTTPPasswordMgr.add_passwordc Cs`|j�|i�}dD]H}|�||�}|��D].\}}|D] }|�||�r6|Sq6q*qdS)Nr2�NN)r1r�r3r� is_suburi) r�r9�authuriZdomainsr6�reduced_authuriZurisZauthinforrLrLrM�find_user_passwordPs  z"HTTPPasswordMgr.find_user_passwordTc Cs�t|�}|dr.|d}|d}|dp*d}n d}|}d}t|�\}}|r~|dur~|dur~ddd��|�} | dur~d|| f}||fS) NrVrr:r �Pi�r�z%s:%d)rr r�) r�rr6�partsrrr\rz�portZdportrLrLrMr3Zs$ �� zHTTPPasswordMgr.reduce_uricCsN||kr dS|d|dkr dS|d}|dd�dkr@|d7}|d�|�S)NTrFrVrSr )r�)r��base�test�prefixrLrLrMr=qszHTTPPasswordMgr.is_suburiN)T)r�r�r�r�r;r@r3r=rLrLrLrMr @s   r c@seZdZdd�ZdS)r!cCs0t�|||�\}}|dur"||fSt�|d|�SrN)r r@)r�r9r>r r!rLrLrMr@�s �z2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN)r�r�r�r@rLrLrLrMr!�sr!cs<eZdZ�fdd�Zd �fdd� Zd dd�Zdd �Z�ZS) r"csi|_t�j|i|��dSrN)� authenticated�superr��r�r��kwargs�� __class__rLrMr��sz%HTTPPasswordMgrWithPriorAuth.__init__Fcs<|�||�|dur&t��d|||�t��||||�dSrN)�update_authenticatedrHr;)r�r9rr r1�is_authenticatedrKrLrMr;�s z)HTTPPasswordMgrWithPriorAuth.add_passwordcCs>t|t�r|g}dD]$}|D]}|�||�}||j|<qqdS�Nr2)r�r�r3rG)r�rrNr6r4r:rLrLrMrM�s   z1HTTPPasswordMgrWithPriorAuth.update_authenticatedcCsDdD]:}|�||�}|jD]"}|�||�r|j|SqqdSrO)r3rGr=)r�r>r6r?rrLrLrMrN�s    z-HTTPPasswordMgrWithPriorAuth.is_authenticated)F)F)r�r�r�r�r;rMrN� __classcell__rLrLrKrMr"�s  r"c@sTeZdZe�dej�Zddd�Zdd�Zdd�Z d d �Z d d �Z d d�Z e Z e ZdS)r#z1(?:^|,)[ ]*([^ ,]+)[ ]+realm=(["']?)([^"']*)\2NcCs"|durt�}||_|jj|_dSrN)r r1r;)r�Z password_mgrrLrLrMr��sz!AbstractBasicAuthHandler.__init__ccspd}tj�|�D]6}|��\}}}|dvr8t�dtd�||fVd}q|sl|r^|��d}nd}|dfVdS)NF)�"�'zBasic Auth Realm was unquoted�Trrr)r#�rx�finditer�groupsr?r@� UserWarning�split)r��headerZfound_challengeZmorr r9rLrLrM� _parse_realm�s� z%AbstractBasicAuthHandler._parse_realmc Cs~|�|�}|sdSd}|D]H}|�|�D]8\}}|��dkrB|}q(|dur(|�|||�Sq(q|durztd|f��dS)N�basiczBAbstractBasicAuthHandler does not support the following scheme: %r)Zget_allrZrx�retry_http_basic_authrB) r��authreqrzr�riZ unsupportedrYrr9rLrLrM�http_error_auth_reqed�s  �z.AbstractBasicAuthHandler.http_error_auth_reqedcCs||j�||�\}}|durtd||f}dt�|����d�}|�|jd�|krTdS|�|j|�|j j ||j d�SdSdS)Nr(r+r)r) r1r@r-r.r/r0ru� auth_headerr�r�rGrJ)r�rzr�r9r �pw�raw�authrLrLrMr\�s z.AbstractBasicAuthHandler.retry_http_basic_authcCstt|jd�r|j�|j�s|S|�d�sp|j�d|j�\}}d�||���}t� |�� �}|� dd�|� ���|S)NrN� Authorizationz{0}:{1}zBasic {}) r�r1rNrtr�r@r�r/r-Zstandard_b64encoder0r��strip)r�r�r r1Z credentialsZauth_strrLrLrM� http_request�s  �  �z%AbstractBasicAuthHandler.http_requestcCsLt|jd�rHd|jkr"dkr8nn|j�|jd�n|j�|jd�|S)NrNr�r�TF)r�r1r�rMrt)r�r�r�rLrLrMr� s  z&AbstractBasicAuthHandler.http_response)N)r�r�r��re�compile�IrTr�rZr^r\rer�� https_requestr�rLrLrLrMr#�s�   r#c@seZdZdZdd�ZdS)r$rccCs|j}|�d|||�}|S)N�www-authenticate)rtr^)r�r�rhr�r�rirHr�rLrLrM�http_error_401s �z#HTTPBasicAuthHandler.http_error_401N)r�r�r�r_rkrLrLrLrMr$sr$c@seZdZdZdd�ZdS)r%r*cCs|j}|�d|||�}|S�N�proxy-authenticate)rzr^)r�r�rhr�r�rirr�rLrLrM�http_error_407's �z$ProxyBasicAuthHandler.http_error_407N)r�r�r�r_rnrLrLrLrMr%#sr%c@sNeZdZddd�Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dS)r&NcCs4|durt�}||_|jj|_d|_d|_d|_dS�Nr)r r1r;�retried� nonce_count� last_nonce)r�r1rLrLrMr�As z"AbstractDigestAuthHandler.__init__cCs d|_dSro)rpr�rLrLrM�reset_retry_countJsz+AbstractDigestAuthHandler.reset_retry_countcCs||�|d�}|jdkr*t|jdd|d��n|jd7_|rx|��d}|��dkr`|�||�S|��dkrxtd|��dS) N�i�zdigest auth failedrVrZdigestr[zEAbstractDigestAuthHandler does not support the following scheme: '%s')r�rprrtrXrx�retry_http_digest_authrB)r�r_rzr�rir]rrLrLrMr^Ms   �    �z/AbstractDigestAuthHandler.http_error_auth_reqedcCsz|�dd�\}}ttdt|���}|�||�}|rvd|}|j�|jd�|krRdS|�|j|�|j j ||j d�}|SdS)Nr�rVz Digest %sr) rX�parse_keqv_list�filter�parse_http_list�get_authorizationrir�r_r�r�rGrJ)r�r�rb�tokenZ challenge�chalZauth_valZresprLrLrMruas z0AbstractDigestAuthHandler.retry_http_digest_authcCs@d|j|t��f}|�d�td�}t�|���}|dd�S)Nz %s:%s:%s:r)��)rq�time�ctimer/� _randombytes�hashlib�sha1� hexdigest)r��nonce�s�b�digrLrLrM� get_cnoncemsz$AbstractDigestAuthHandler.get_cnoncecCs�z6|d}|d}|�d�}|�dd�}|�dd�}WntyJYdS0|�|�\}} |durfdS|j�||j�\} } | dur�dS|jdur�|�|j|�} nd} d| || f} d|��|j f}|dur�| || �d|||�f�}n~d |� d �v�rZ||j k�r|j d 7_ n d |_ ||_ d |j }|� |�}d |||d ||�f}| || �|�}n td|��d| |||j |f}|�r�|d|7}| �r�|d| 7}|d|7}|�r�|d||f7}|S)Nr9r��qop� algorithm�MD5�opaquez%s:%s:%sr(rb�,rVz%08xz%s:%s:%s:%s:%szqop '%s' is not supported.z>username="%s", realm="%s", nonce="%s", uri="%s", response="%s"z , opaque="%s"z , digest="%s"z, algorithm="%s"z, qop=auth, nc=%s, cnonce="%s")r��KeyError�get_algorithm_implsr1r@rtrI�get_entity_digestr�r�rXrrrqr�r)r�r�r{r9r�r�r�r��H�KDr r`ZentdigZA1ZA2ZrespdigZncvalueZcnonceZnoncebitrDrLrLrMryxs\    �     ��   z+AbstractDigestAuthHandler.get_authorizationcsD|dkrdd��n|dkr$dd��n td|���fdd�}�|fS)Nr�cSst�|�d����S�Nr))r�Zmd5r/r���xrLrLrMr%��z?AbstractDigestAuthHandler.get_algorithm_impls..ZSHAcSst�|�d����Sr�)r�r�r/r�r�rLrLrMr%�r�z.Unsupported digest authentication algorithm %rcs�d||f�S)Nr(rL)r��d�r�rLrMr%�r�)rB)r�r�r�rLr�rMr��s  � z-AbstractDigestAuthHandler.get_algorithm_implscCsdSrNrL)r�rIr{rLrLrMr��sz+AbstractDigestAuthHandler.get_entity_digest)N) r�r�r�r�rsr^rur�ryr�r�rLrLrLrMr&6s   > r&c@seZdZdZdZdd�ZdS)r'rc��cCs*t|j�d}|�d|||�}|��|S)NrVrj)rrtr^rs�r�r�rhr�r�rirz�retryrLrLrMrk�s �z$HTTPDigestAuthHandler.http_error_401N)r�r�r�r_r�rkrLrLrLrMr'�sr'c@seZdZdZdZdd�ZdS)r(�Proxy-Authorizationr�cCs"|j}|�d|||�}|��|Srl)rzr^rsr�rLrLrMrn�s �z%ProxyDigestAuthHandler.http_error_407N)r�r�r�r_r�rnrLrLrLrMr(�sr(c@s6eZdZd dd�Zdd�Zdd�Zdd �Zd d �Zd S)�AbstractHTTPHandlerrcCs ||_dSrN�� _debuglevel)r�� debuglevelrLrLrMr��szAbstractHTTPHandler.__init__cCs ||_dSrNr�)r��levelrLrLrM�set_http_debuglevel�sz'AbstractHTTPHandler.set_http_debuglevelcCstjj�|j|���SrN)r�r��HTTPConnection�_get_content_lengthrIr��r�ryrLrLrMr��s�z'AbstractHTTPHandler._get_content_lengthc Cs|j}|std��|jdur�|j}t|t�r8d}t|��|�d�sN|�dd�|�d�s�|�d�s�|�|�}|dur�|�dt|��n |�dd�|}|� �r�t |j �\}}t |�\}} |�d�s�|�d|�|j jD]&\} } | ��} |�| �s�|�| | �q�|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-encodingZchunkedrs)rzrrIr�r�r�r�r�r�r�r r�r r�r�r�) r�ryrzrIr�Zcontent_lengthZsel_hostrZselZsel_pathr_r�rLrLrM� do_request_�sF   � � ��    zAbstractHTTPHandler.do_request_c sV|j}|std��||fd|ji|��}|�|j�t|j�����fdd�|j� �D��d�d<dd��� �D��|j r�i}d}|�vr��|||<�|=|j |j |d �zbz&|j |� �|j|j�|�d �d �Wn.t�y}zt|��WYd}~n d}~00|��} Wn|���Yn0|j�r@|j��d|_|��| _| j| _| S) Nr�rJcsi|]\}}|�vr||�qSrLrLr��rirLrMr's �z/AbstractHTTPHandler.do_open..r�� ConnectioncSsi|]\}}|��|�qSrL)�title)r�r_r�rLrLrMr4r�r�r�r�)Zencode_chunked)rzrrJZset_debuglevelr�r�r|�updaterirr~Z set_tunnelryr�r�rIr�rq� getresponser�Zsockr�rH�reasonr�) r�Z http_classr�Zhttp_conn_argsrzr�Ztunnel_headersZproxy_auth_hdr�errr$rLr�rMr�sB    �    zAbstractHTTPHandler.do_openN)r)r�r�r�r�r�r�r�r�rLrLrLrMr��s  &r�c@seZdZdd�ZejZdS)r)cCs|�tjj|�SrN)r�r�r�r��r�r�rLrLrM� http_open^szHTTPHandler.http_openN)r�r�r�r�r�r�rerLrLrLrMr)\sr)r�c@s$eZdZddd�Zdd�ZejZdS)rErNcCst�||�||_||_dSrN)r�r��_context�_check_hostname)r�r�r>�check_hostnamerLrLrMr�gs zHTTPSHandler.__init__cCs|jtjj||j|jd�S)N)r>r�)r�r�r�r�r�r�r�rLrLrM� https_openls �zHTTPSHandler.https_open)rNN)r�r�r�r�r�r�r�rirLrLrLrMrEes rEc@s.eZdZddd�Zdd�Zdd�ZeZeZdS) rNcCs$ddl}|dur|j��}||_dSro)Zhttp.cookiejar� cookiejarZ CookieJar)r�r�r�rLrLrMr�us zHTTPCookieProcessor.__init__cCs|j�|�|SrN)r�Zadd_cookie_headerr�rLrLrMre{s z HTTPCookieProcessor.http_requestcCs|j�||�|SrN)r�Zextract_cookies)r�ryr�rLrLrMr�sz!HTTPCookieProcessor.http_response)N)r�r�r�r�rer�rir�rLrLrLrMrts  rc@seZdZdd�ZdS)r.cCs|j}td|��dS)Nzunknown url type: %s)r�r)r�r�r�rLrLrMr��szUnknownHandler.unknown_openN)r�r�r�r�rLrLrLrMr.�sr.cCsNi}|D]@}|�dd�\}}|ddkr@|ddkr@|dd�}|||<q|S)N�=rVrrQrS)rX)�lZparsed�eltr�rrLrLrMrv�s  rvcCs�g}d}d}}|D]l}|r*||7}d}q|rT|dkr>d}qn |dkrJd}||7}q|dkrl|�|�d}q|dkrxd}||7}q|r�|�|�dd�|D�S) NrrF�\TrQr�cSsg|] }|���qSrL)rd)r��partrLrLrM� �r�z#parse_http_list..)ra)r��resr��escaper ZcurrLrLrMrx�s4    rxc@s(eZdZdd�ZdZdd�Zdd�ZdS)r*cCs\|j}|dd�dkrN|dd�dkrN|jrN|jdkrN|j|��vrXtd��n |�|�SdS)Nr:rrSr � localhost�-file:// scheme is supported only on localhost)r�rz� get_namesr�open_local_file)r�r�rHrLrLrM� file_open�s&� zFileHandler.file_openNcCs^tjdurXz*tt�d�dt�t���d�t_Wn"tjyVt�d�ft_Yn0tjS)Nr�r:)r*�namesr8r��gethostbyname_ex� gethostname�gaierror� gethostbynamer�rLrLrMr��s  �� zFileHandler.get_namesc Csddl}ddl}|j}|j}t|�}z�t�|�}|j}|jj |j dd�} |� |�d} |� d| pbd|| f�} |r~t |�\}} |r�| s�t|�|��vr�|r�d||} nd|} tt|d�| | �WSWn,ty�}zt|��WYd}~n d}~00td��dS) NrT�Zusegmtz6Content-type: %s Content-length: %d Last-modified: %s � text/plain�file://�rbzfile not on local host)� email.utils� mimetypesrzr�r4r[�stat�st_size�utils� formatdate�st_mtime� guess_type�message_from_stringr �_safe_gethostbynamer�rrGrqr)r�r��emailr�rzrfZ localfile�statsrm�modified�mtyperirCZorigurl�exprLrLrMr��s:  �� ��zFileHandler.open_local_file)r�r�r�r�r�r�r�rLrLrLrMr*�s  r*cCs(z t�|�WStjy"YdS0dSrN)r�r�r�)rzrLrLrMr��s r�c@seZdZdd�Zdd�ZdS)r+c Cs.ddl}ddl}|j}|s"td��t|�\}}|dur>|j}nt|�}t|�\}}|rdt|�\}}nd}t |�}|pvd}|p~d}zt � |�}Wn,t y�}zt|��WYd}~n d}~00t |j�\} } | �d�} ttt | ��} | dd�| d} } | �r| d�s| dd�} z�|�||||| |j�} | �r8d�p:d}| D]2}t|�\}}|��d k�r@|d v�r@|��}�q@| �| |�\}}d}|�|j�d}|�r�|d |7}|du�r�|dk�r�|d |7}t�|�}t|||j�WS|j�y(}z*td |�}|�t� �d��WYd}~n d}~00dS)Nr�ftp error: no host givenrrr rSrVrh�Dr���a�Ar�rhr�r�zContent-type: %s zContent-length: %d � ftp error: %rr:)!�ftplibr�rzrr �FTP_PORTrbrrr r�r�rqrr�rXr��map� connect_ftprJrrx�upper�retrfiler�rtr�r�r� all_errors�with_tracebackr��exc_info)r�r�r�r�rzrCr r1r�r\�attrs�dirsrO�fwr��attrr�rh�retrlenrir�r��excrLrLrM�ftp_open�s^     �     zFTPHandler.ftp_openc Cst||||||dd�S)NF)� persistent)� ftpwrapper)r�r r1rzrCr�rJrLrLrMr�/s�zFTPHandler.connect_ftpN)r�r�r�r�r�rLrLrLrMr+�s5r+c@s<eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd S)r,cCs"i|_i|_d|_d|_d|_dS)Nr�<r})�cacherJ�soonest�delay� max_connsr�rLrLrMr�6s zCacheFTPHandler.__init__cCs ||_dSrN)r�)r��trLrLrM� setTimeout=szCacheFTPHandler.setTimeoutcCs ||_dSrN)r�)r�rrLrLrM� setMaxConns@szCacheFTPHandler.setMaxConnscCsr|||d�|�|f}||jvr4t��|j|j|<n,t||||||�|j|<t��|j|j|<|��|j|S)Nr )�joinr�r~r�rJr�� check_cache)r�r r1rzrCr�rJr�rLrLrMr�Cs  � zCacheFTPHandler.connect_ftpcCs�t��}|j|krPt|j���D].\}}||kr |j|��|j|=|j|=q tt|j����|_t |j�|j kr�t|j���D]&\}}||jkr�|j|=|j|=q�q�tt|j����|_dSrN) r~r�r�rJrr�r��min�valuesrdr�)r�r�r�rrLrLrMr�Ns   zCacheFTPHandler.check_cachecCs0|j��D] }|��q |j��|j��dSrN)r�rr��clearrJ)r��connrLrLrM� clear_cachebs  zCacheFTPHandler.clear_cacheN) r�r�r�r�r�r�r�r�rrLrLrLrMr,3s  r,c@seZdZdd�ZdS)r-cCs~|j}|�dd�\}}|�dd�\}}t|�}|�d�rNt�|�}|dd�}|sVd}t�d|t|�f�}t t � |�||�S)N�:rVr�z;base64i�����text/plain;charset=US-ASCIIz$Content-type: %s Content-length: %d ) rtrXr�endswithr-� decodebytesr�r�rdr�io�BytesIO)r�r�rHrrIZ mediatyperirLrLrM� data_openis     �zDataHandler.data_openN)r�r�r�r rLrLrLrMr-hsr-r��nt)r4r3cCst|�SrN)r ��pathnamerLrLrMr4�sr4cCst|�SrN)r r rLrLrMr3�sr3c@s�eZdZdZdeZd)dd�Zdd�Zdd�Zd d �Z d d �Z d*d d�Z d+dd�Z d,dd�Z d-dd�Zdd�Zd.dd�Zd/dd�Zdd�Zer�dd�Zd0dd �Zd!d"�Zd#d$�Zd%d&�Zd1d'd(�ZdS)2r8Nr�cKszdd|jji}tj|tdd�|dur.t�}||_|�d�|_|�d�|_ d|j fdg|_ g|_ t j|_d|_t|_dS) NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methods�classrS)� stacklevel�key_file� cert_filez User-Agent)ZAcceptz*/*)rLr�r?r@rAr5r&r�rr�versionr��_URLopener__tempfilesr[rp�_URLopener__unlink� tempcache�ftpcache)r�r&Zx509r�rLrLrMr��s �  zURLopener.__init__cCs |��dSrN)r�r�rLrLrM�__del__�szURLopener.__del__cCs |��dSrN)�cleanupr�rLrLrMr��szURLopener.closec CsT|jr@|jD]&}z|�|�Wq ty0Yq 0q |jdd�=|jrP|j��dSrN)rrrqrr)r�rOrLrLrMr�s   zURLopener.cleanupcGs|j�|�dSrN)r�ra)r�r�rLrLrM� addheader�szURLopener.addheaderc Csptt|��}t|dd�}|jrL||jvrL|j|\}}t|d�}t|||�St|�\}}|s`d}||jvr�|j|}t|�\}} t| �\} } | |f}nd}d|} ||_ | � dd�} t || �r�| dkr�|r�|� |||�S|� ||�Sz0|du�rt|| �|�WSt|| �||�WSWnVttf�y.�Yn>t�yj} z$td | ��t��d ��WYd} ~ n d} ~ 00dS) Nz%/:=&?~#+!$,;'@()*[]|�r r�rOZopen_�-r�r�z socket errorr:)rrr rrGrr r&r r�rr��open_unknown_proxy� open_unknownr�rrrqr�r�r�)r�r�rIrfrirh�urltyperHr� proxyhostrzr�r_r�rLrLrMrG�s<             zURLopener.opencCst|�\}}tdd|��dS)N� url errorzunknown url type�r rq)r�r�rIr�rHrLrLrMrs zURLopener.open_unknowncCs t|�\}}tdd||��dS)Nr zinvalid proxy for %sr!)r�rr�rIr�rHrLrLrMrs zURLopener.open_unknown_proxycCstt|��}|jr&||jvr&|j|St|�\}}|dur�|rF|dkr�z0|�|�}|��}|��tt|�d�|fWSt y�Yn0|� ||�}�zL|��} |r�t |d�} nrt|�\} } t| p�d�\} } t | p�d�\} } t | p�d�\} } t j�| �d} t�| �\}}|j�|�t �|d�} z�|| f}|jdu�rD||j|<d}d}d}d}d| v�rjt| d �}|�r|||||�|�|�}|�s��q�|t|�7}| �|�|d7}|�r|||||��q|W| ��n | ��0W|��n |��0|dk�r||k�rtd ||f|��|S) NrOrVrPrrrRrSrrTrUrW)rrrr r�rZr�r4r rqrGrrr[r\�splitextr^Zmkstemprra�fdopenrbrcrdrer)r�rHrfrgrIr�Zurl1rhr�rirjZgarbager\�suffix�fdrkrlrmrcrnrorLrLrM�retrieve sn                  ��zURLopener.retrievecCs"d}d}t|t�r|dd>B|dd >B|d BS) Nrqr�)rrrrr�rVr}r:r|rS)rXr�r�rbrd)ZipAddrrBrLrLrM�ip2num s   z,_proxy_bypass_macosx_sysconf..ip2numrqZexclude_simpleT� exceptionsrLz(\d+(?:\.\d+)*)(/\d+)?rVr:r|� F) rvZ ipaddressrwrxr rbr�rfrK�group�count) rz�proxy_settingsrvrwrxrsrCrzZhostIPr�rrD�maskrLrLrM�_proxy_bypass_macosx_sysconf� s:      r�cCs`ddlm}t|�\}}|�d�}|D]4}|��}|dkrJd|vrZdSq&|||�r&dSq&dS)Nrrur9zrqTF)rvr rXrd)rz�overridervr�Zproxy_overriderErLrLrM�_proxy_bypass_winreg_override: s    r��darwin)�_get_proxy_settings� _get_proxiescCst�}t||�SrN)r�r�)rzrrLrLrM�proxy_bypass_macosx_sysconfU sr�cCst�SrN)r�rLrLrLrM�getproxies_macosx_sysconfY sr�cCs t�}|rt||�St|�SdSrN)rortr��rzr&rLrLrMr,c s r,cCs t�p t�SrN)ror�rLrLrLrMr5p sr5c CsBi}z ddl}Wnty&|YS0z�|�|jd�}|�|d�d}|�rt|�|d�d�}d|vr|d|vr|d�|�}|�d�D]J}|�dd�\}}t� d |�s�|d vr�d |}n|d kr�d |}|||<q�|� d ��rt� dd|d �}|� d��p�||d<|� d��p||d<|� �Wnt ttf�y<Yn0|S)Nr�;Software\Microsoft\Windows\CurrentVersion\Internet Settings� ProxyEnableZ ProxyServerr�r9zhttp={0};https={0};ftp={0}rVz (?:[^/:]+)://)r�r�r rMZsockszsocks://z ^socks://z socks4://r�r�)�winreg� ImportError�OpenKey�HKEY_CURRENT_USER� QueryValueExr�r�rXrfrKr�rwZCloserqrBr�)r&r��internetSettings� proxyEnableZ proxyServer�pr�ZaddressrLrLrM�getproxies_registryu sL   �����      r�cCs t�p t�SrN)ror�rLrLrLrMr5� scCs�z ddl}Wnty YdS0z6|�|jd�}|�|d�d}t|�|d�d�}WntylYdS0|rv|szdSt||�S)NrFr�r�Z ProxyOverride)r�r�r�r�r�r�rqr�)rzr�r�r�Z proxyOverriderLrLrM�proxy_bypass_registry� s.  �����  r�cCs t�}|rt||�St|�SdSrN)rortr�r�rLrLrMr,� s )NNN)N)~r-r�r�r�Z http.clientr�rr[� posixpathrfr�rr�r~r^rXr?Z urllib.errorrrrZ urllib.parserrrrr r r r r rrrrrrrrrZurllib.responserrrDr�rC�__all__� version_infor�rFr�r0r1r`r6r7rg�ASCIIrvr{rrr2rr/rrr"rr r!r"r#r$r%�urandomr�r&r'r(r�r)r�r�rErarr.rvrxr*r�r+r,r-r6r_Z nturl2pathr4r3rr8r9r]r�r^r4r_r7r`rar�rortr�r��platformZ_scproxyr�r�r�r�r,r5r�r�rLrLrLrM�Ts�P  � M ?m$q!+@ o  v  +3:5! @W  _ %@    1