3 Õì2a~Šã)@sÊddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+y ddl,Z,Wne-k �r"dZ.YnXdZ.ddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'g!Z/d(e j0dd)…Z1da2de j3fddddd*œd+d„Z4d,d„Z5gZ6d}d-d$„Z7d.d%„Z8e j9d/e j:ƒZ;d0d1„Zd4d „Z?Gd5d „d ƒZ@Gd6d„de@ƒZAGd7d „d e@ƒZBGd8d „d e@ƒZCd9d:„ZDGd;d „d e@ƒZEGdd„deGƒZHGd?d„dƒZIGd@d„deIe@ƒZJGdAd„deIe@ƒZKejLZMGdBd„dƒZNGdCd„de@eNƒZOGdDd„de@eNƒZPGdEdF„dFe@ƒZQGdGd„deQƒZReSejTdHƒ�r.GdIdJ„dJeQƒZUe/jVdJƒGdKd „d e@ƒZWGdLd„de@ƒZXdMdN„ZYdOdP„ZZGdQd„de@ƒZ[dRdS„Z\GdTd„de@ƒZ]GdUd„de]ƒZ^GdVd„de@ƒZ_dWZ`ejadXk�rÈddYlbmcZcmdZdndZd"„Zcd[d!„ZdiZeGd\d&„d&ƒZfGd]d'„d'efƒZgdahd^d_„Zidajd`da„Zkdaldbdc„Zmdanddde„ZoGdfdg„dgƒZpdhdi„Zqd~djdk„Zrdldm„Zse jtdnk�r�ddolumvZvmwZwdpdq„Zxdrds„Zydtdu„Zzdvd#„Z{n6ejadXk�r¾dwdx„Z|dyd#„Z{dzd{„Z}d|du„ZzneqZ{erZzdS)é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}|jdtdƒ|dk r2tdƒ‚ts>tdƒ‚tjtjj||d�}t |d�}t |ƒ} n0|r~t |d�}t |ƒ} nt dkr’t ƒa } nt } | j |||ƒ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ú,/opt/alt/python36/lib64/python3.6/request.pyr0Œs*<       cCs|adS)N)rF)rKrLrLrMr1áscCs4t|ƒ\}}tjt||ƒƒ�è}|jƒ}|dkrD| rDtjj|ƒ|fS|rTt|dƒ}nt j dd�}|j }t j |ƒ|�†||f} d } d } d} d} d |kr¢t|d ƒ} |r²|| | | ƒxB|j| ƒ}|sÄP| t|ƒ7} |j|ƒ| d7} |r´|| | | ƒq´WWdQRXWdQRX| dk�r0| | k�r0td | | f| ƒ‚| S)NÚfileÚwbF)Údeleteiéérzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi éÿÿÿÿ)r Ú contextlibÚclosingr0ÚinfoÚosÚpathÚnormpathrGÚtempfileZNamedTemporaryFileÚnameÚ_url_tempfilesÚappendÚintÚreadÚlenÚwriter)rHÚfilenameÚ reporthookrIZurl_typerXÚfpÚheadersÚtfpÚresultÚbsÚsizer_ÚblocknumÚblockrLrLrMr6æsD         $c CsHx0tD](}ytj|ƒWqtk r,YqXqWtdd…=trDdadS)N)r\rWÚunlinkÚOSErrorrF)Z temp_filerLrLrMr7%s   z:\d+$cCs<|j}t|ƒd}|dkr&|jddƒ}tjd|dƒ}|jƒS)NrRÚÚHost)Úfull_urlrÚ get_headerÚ _cut_port_reÚsubÚlower)ÚrequestrHÚhostrLrLrMÚ request_host4s   rwc@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 Csp||_i|_i|_d|_||_d|_x |jƒD]\}}|j||ƒq.W|dkrVt|ƒ}||_ ||_ |rl||_ dS)N) rpreÚunredirected_hdrsÚ_datarIÚ _tunnel_hostÚitemsÚ add_headerrwÚorigin_req_hostÚ unverifiableÚmethod) ÚselfrHrIrer}r~rÚkeyÚvaluerLrLrMÚ__init__FszRequest.__init__cCs|jrdj|j|jƒS|jS)Nz{}#{})ÚfragmentÚformatÚ _full_url)r€rLrLrMrpXszRequest.full_urlcCs(t|ƒ|_t|jƒ\|_|_|jƒdS)N)rr†rr„Ú_parse)r€rHrLrLrMrp^s cCsd|_d|_d|_dS)Nrn)r†r„Úselector)r€rLrLrMrpescCs|jS)N)ry)r€rLrLrMrIksz Request.datacCs(||jkr$||_|jdƒr$|jdƒdS)NzContent-length)ryÚ has_headerÚ remove_header)r€rIrLrLrMrIos  cCs d|_dS)N)rI)r€rLrLrMrIyscCsNt|jƒ\|_}|jdkr(td|jƒ‚t|ƒ\|_|_|jrJt|jƒ|_dS)Nzunknown url type: %r) r r†ÚtyperBrpr rvrˆr )r€ÚrestrLrLrMr‡}s  zRequest._parsecCs|jdk rdnd}t|d|ƒS)NÚPOSTÚGETr)rIÚgetattr)r€Zdefault_methodrLrLrMÚ get_method…szRequest.get_methodcCs|jS)N)rp)r€rLrLrMÚ get_full_urlŠszRequest.get_full_urlcCs4|jdkr|j r|j|_n||_|j|_||_dS)NÚhttps)r‹rzrvrprˆ)r€rvr‹rLrLrMÚ set_proxy�s  zRequest.set_proxycCs |j|jkS)N)rˆrp)r€rLrLrMÚ has_proxy•szRequest.has_proxycCs||j|jƒ<dS)N)reÚ capitalize)r€r�ÚvalrLrLrMr|˜szRequest.add_headercCs||j|jƒ<dS)N)rxr•)r€r�r–rLrLrMÚadd_unredirected_headerœszRequest.add_unredirected_headercCs||jkp||jkS)N)rerx)r€Ú header_namerLrLrMr‰ s zRequest.has_headercCs|jj||jj||ƒƒS)N)reÚgetrx)r€r˜ÚdefaultrLrLrMrq¤szRequest.get_headercCs |jj|dƒ|jj|dƒdS)N)reÚpoprx)r€r˜rLrLrMrŠ©szRequest.remove_headercCs"|jjƒ}|j|jƒt|jƒƒS)N)rxÚcopyÚupdatereÚlistr{)r€ÚhdrsrLrLrMÚ header_items­s  zRequest.header_items)N)Ú__name__Ú __module__Ú __qualname__rƒÚpropertyrpÚsetterÚdeleterrIr‡r�r‘r“r”r|r—r‰rqrŠr rLrLrLrMrDs(     c@sNeZdZdd„Zdd„Zdd„Zdd„Zd ejfd d „Z dd d „Z dd„Z d S)rcCs6dt}d|fg|_g|_i|_i|_i|_i|_dS)NzPython-urllib/%sz User-agent)Ú __version__Ú addheadersÚhandlersÚ handle_openÚ handle_errorÚprocess_responseÚprocess_request)r€Zclient_versionrLrLrMrƒ³s zOpenerDirector.__init__c CsZt|dƒstdt|ƒƒ‚d}�xt|ƒD�]}|dkr:q*|jdƒ}|d|…}||dd…}|jd ƒrÈ|jdƒ|d}||dd…}y t|ƒ}Wntk r¬YnX|jj |iƒ} | |j|<n>|d krÜ|}|j } n*|d krð|}|j } n|d kr*|}|j } nq*| j |gƒ} | �r&tj| |ƒn | j|ƒd }q*W|�rVtj|j|ƒ|j|ƒdS)NÚ add_parentz%expected BaseHandler instance, got %rFÚredirect_requestÚdo_openÚ proxy_openÚ_rRÚerrorrGÚresponseruT)r¯r°r±)ÚhasattrÚ TypeErrorr‹ÚdirÚfindÚ startswithr^rBr«r™rªr¬r­Ú setdefaultÚbisectZinsortr]r©r®) r€ÚhandlerZaddedÚmethÚiÚprotocolZ conditionÚjÚkindÚlookupr©rLrLrMÚ add_handler¾sJ         zOpenerDirector.add_handlercCsdS)NrL)r€rLrLrMÚcloseíszOpenerDirector.closec Gs<|j|fƒ}x*|D]"}t||ƒ}||Ž}|dk r|SqWdS)N)r™r�) r€ÚchainrÁÚ meth_nameÚargsr©r¼ÚfuncrgrLrLrMÚ _call_chainñs    zOpenerDirector._call_chainNc Csªt|tƒrt||ƒ}n|}|dk r(||_||_|j}|d}x(|jj|gƒD]}t||ƒ}||ƒ}qLW|j ||ƒ} |d}x*|j j|gƒD]}t||ƒ}||| ƒ} qŠW| S)NZ_requestZ _response) Ú isinstanceÚstrrrIrJr‹r­r™r�Ú_openr¬) r€ÚfullurlrIrJÚreqr¿rÆZ processorr½r´rLrLrMrGüs"      zOpenerDirector.opencCsP|j|jdd|ƒ}|r|S|j}|j|j||d|ƒ}|r>|S|j|jdd|ƒS)NršZ default_openrÌÚunknownÚ unknown_open)rÉrªr‹)r€rÎrIrgr¿rLrLrMrÌs    zOpenerDirector._opencGs~|d kr,|jd}|d}d|}d}|}n|j}|d}d}|||f|}|j|Ž}|r^|S|rz|dd f|}|j|ŽSdS) NÚhttpr’r:z http_error_%srRÚ_errorrršÚhttp_error_default)rÑr’)r«rÉ)r€ÚprotorÇÚdictrÆZhttp_errZ orig_argsrgrLrLrMr³'s   zOpenerDirector.error)N) r¡r¢r£rƒrÃrÄrÉÚsocketÚ_GLOBAL_DEFAULT_TIMEOUTrGrÌr³rLrLrLrMr²s /  c Gsætƒ}ttttttttt g }t t j dƒr2|j tƒtƒ}xN|D]F}x@|D]8}t|tƒrlt||ƒr€|j|ƒqHt||ƒrH|j|ƒqHWq>Wx|D]}|j|ƒqŽWx|D]}|j|ƒƒq¦Wx&|D]}t|tƒrÔ|ƒ}|j|ƒqÀW|S)NÚHTTPSConnection)rrr.r)rrr+r*r/r-rµrÑÚclientr]rEÚsetrÊr‹Ú issubclassÚaddÚremoverÃ)r©rKZdefault_classesÚskipÚklassZcheckÚhrLrLrMr2@s0             c@s(eZdZdZdd„Zdd„Zdd„ZdS) riôcCs ||_dS)N)Úparent)r€rárLrLrMr®gszBaseHandler.add_parentcCsdS)NrL)r€rLrLrMrÄjszBaseHandler.closecCst|dƒsdS|j|jkS)NÚ handler_orderT)rµrâ)r€ÚotherrLrLrMÚ__lt__ns zBaseHandler.__lt__N)r¡r¢r£râr®rÄrärLrLrLrMrdsc@seZdZdZdd„ZeZdS)r/iècCsJ|j|j|jƒ}}}d|ko*dknsF|jjd|||||ƒ}|S)NéÈi,rÑ)ÚcodeÚmsgrVrár³)r€rur´rærçrŸrLrLrMÚ http_response{s z HTTPErrorProcessor.http_responseN)r¡r¢r£rârèÚhttps_responserLrLrLrMr/ws c@seZdZdd„ZdS)rcCst|j||||ƒ‚dS)N)rrp)r€rÎrdrærçrŸrLrLrMrÓ‰sz*HTTPDefaultErrorHandler.http_error_defaultN)r¡r¢r£rÓrLrLrLrMrˆsc@s4eZdZdZdZdd„Zdd„ZeZZZ dZ dS) réé c sx|jƒ}|dkr|dkp&|dko&|dks:t|j||||ƒ‚|jdd ƒ}d‰t‡fd d „|jjƒDƒƒ}t|||jdd�S)Né-é.é/é3rŽÚHEADr�ú z%20úcontent-lengthú content-typec3s&|]\}}|jƒˆkr||fVqdS)N)rt)Ú.0ÚkÚv)ÚCONTENT_HEADERSrLrMú ¯sz7HTTPRedirectHandler.redirect_request..T)rer}r~)rìrírîrï)rŽrð)rìrírî)ròró) r�rrpÚreplacerÕrer{rr}) r€rÎrdrærçreÚnewurlÚmZ newheadersrL)r÷rMr¯”s  z$HTTPRedirectHandler.redirect_requestc CsNd|kr|d}nd|kr$|d}ndSt|ƒ}|jdkrRt||d||f||ƒ‚|j rp|jrpt|ƒ}d|d <t|ƒ}t|d tj d �}t |j |ƒ}|j ||||||ƒ}|dkr´dSt |d ƒ�r|j} |_| j|d ƒ|jksît| ƒ|jk�rt|j ||j|||ƒ‚ni} |_|_| j|d ƒd| |<|jƒ|jƒ|jj||jd�S)NÚlocationÚurirÑr’Úftprnz+%s - Redirection to url '%s' is not allowedú/r:z iso-8859-1)ÚencodingÚsafeÚ redirect_dictrrR)rJ)rÑr’rþrn)rÚschemerrXZnetlocržrr ÚstringZ punctuationrrpr¯rµrr™Ú max_repeatsr`Úmax_redirectionsÚinf_msgr_rÄrárGrJ) r€rÎrdrærçrerúÚurlpartsÚnewZvisitedrLrLrMÚhttp_error_302ºs@       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 &< c Cs�t|ƒ\}}|jdƒs d}|}n:|jdƒs6td|ƒ‚|jddƒ}|dkrNd}|d|…}t|ƒ\}}|dk r|t|ƒ\}}nd}}||||fS)Nrÿz//zproxy URL with no authority: %rr:rRrS)r r¹rBr¸rr) ÚproxyrZr_schemeÚ authorityÚendZuserinfoÚhostportÚuserÚpasswordrLrLrMÚ _parse_proxyýs       rc@s"eZdZdZddd„Zdd„ZdS)rédNcCsL|dkrtƒ}||_x2|jƒD]&\}}t|d||||jfdd„ƒqWdS)Nz%s_opencSs ||||ƒS)NrL)Úrrr‹r½rLrLrMÚ%sz'ProxyHandler.__init__..)r5Úproxiesr{Úsetattrr±)r€rr‹rHrLrLrMrƒs  zProxyHandler.__init__c Cs´|j}t|ƒ\}}}}|dkr"|}|jr6t|jƒr6dS|rv|rvdt|ƒt|ƒf} tj| jƒƒjdƒ} |j dd| ƒt|ƒ}|j ||ƒ||ksš|dkrždS|j j ||j d�SdS)Nz%s:%sÚasciizProxy-authorizationzBasic r’)rJ)r‹rrvÚ proxy_bypassr Úbase64Ú b64encodeÚencodeÚdecoder|r“rárGrJ) r€rÎrr‹Z orig_typeZ proxy_typerrrZ user_passZcredsrLrLrMr±(s   zProxyHandler.proxy_open)N)r¡r¢r£rârƒr±rLrLrLrMrs c@s6eZdZdd„Zdd„Zdd„Zd dd „Zd d „Zd S)r cCs i|_dS)N)Úpasswd)r€rLrLrMrƒFszHTTPPasswordMgr.__init__cs`t|tƒr|g}|ˆjkr$iˆj|<x6dD].‰t‡‡fdd„|Dƒƒ}||fˆj||<q*WdS)NTFcsg|]}ˆj|ˆƒ‘qSrL)Ú reduce_uri)rôÚu)Ú default_portr€rLrMú Qsz0HTTPPasswordMgr.add_password..)TF)rÊrËr Útuple)r€Úrealmrýrr Ú reduced_urirL)r#r€rMÚ add_passwordIs    zHTTPPasswordMgr.add_passwordc Cs`|jj|iƒ}xLdD]D}|j||ƒ}x2|jƒD]&\}}x|D]}|j||ƒr<|SqdD]6}|j||ƒ}x$|jD]}|j||ƒr|j|SqWqWdS)NTF)TF)r!r5r))r€r*r#r+rýrLrLrMr:¥s     z-HTTPPasswordMgrWithPriorAuth.is_authenticated)F)F)r¡r¢r£rƒr(r9r:Ú __classcell__rLrL)r8rMr"Žs  c@sTeZdZejdejƒZddd„Zdd„Zdd„Z d d „Z d d „Z d d„Z e Z e ZdS)r#z1(?:^|,)[ ]*([^ ,]+)[ ]+realm=(["']?)([^"']*)\2NcCs"|dkrtƒ}||_|jj|_dS)N)r r r()r€Z password_mgrrLrLrMrƒÂsz!AbstractBasicAuthHandler.__init__ccstd}xFtjj|ƒD]6}|jƒ\}}}|d kr:tjdtdƒ||fVd}qW|sp|rb|jƒd}nd}|dfVdS) NFú"ú'zBasic Auth Realm was unquotedéTrrn)r<r=)r#ÚrxÚfinditerÚgroupsr?r@Ú UserWarningÚsplit)r€ÚheaderZfound_challengeÚmorr r&rLrLrMÚ _parse_realmÈs z%AbstractBasicAuthHandler._parse_realmc Cs~|j|ƒ}|sdSd}xL|D]D}x>|j|ƒD]0\}}|jƒdkrF|}q,|dk r,|j|||ƒSq,WqW|dk rztd|fƒ‚dS)NÚbasiczBAbstractBasicAuthHandler does not support the following scheme: %r)Zget_allrFrtÚretry_http_basic_authrB) r€ÚauthreqrvrÎreZ unsupportedrDrr&rLrLrMÚhttp_error_auth_reqedÜs   z.AbstractBasicAuthHandler.http_error_auth_reqedcCs||jj||ƒ\}}|dk rtd||f}dtj|jƒƒjdƒ}|j|jdƒ|krTdS|j|j|ƒ|j j ||j d�SdSdS)Nz%s:%szBasic r)rJ) r r,rrrrrqÚ auth_headerr—rárGrJ)r€rvrÎr&rÚpwÚrawÚauthrLrLrMrHös z.AbstractBasicAuthHandler.retry_http_basic_authcCsxt|jdƒ s|jj|jƒ r"|S|jdƒst|jjd|jƒ\}}dj||ƒjƒ}tj |ƒj ƒ}|j ddj|j ƒƒƒ|S)Nr:Ú Authorizationz{0}:{1}zBasic {}) rµr r:rpr‰r,r…rrZstandard_b64encoderr—Ústrip)r€rÎrr Z credentialsZauth_strrLrLrMÚ http_requests z%AbstractBasicAuthHandler.http_requestcCsLt|jdƒrHd|jko dknr8|jj|jdƒn|jj|jdƒ|S)Nr:råi,TF)rµr rær9rp)r€rÎr´rLrLrMrès  z&AbstractBasicAuthHandler.http_response)N)r¡r¢r£ÚreÚcompileÚIr?rƒrFrJrHrQrèÚ https_requestrérLrLrLrMr#­s   c@seZdZdZdd„ZdS)r$rOcCs|j}|jd|||ƒ}|S)Nzwww-authenticate)rprJ)r€rÎrdrærçrerHr´rLrLrMÚhttp_error_401 s z#HTTPBasicAuthHandler.http_error_401N)r¡r¢r£rKrVrLrLrLrMr$sc@seZdZdZdd„ZdS)r%zProxy-authorizationcCs|j}|jd|||ƒ}|S)Nzproxy-authenticate)rvrJ)r€rÎrdrærçrerr´rLrLrMÚhttp_error_407+s z$ProxyBasicAuthHandler.http_error_407N)r¡r¢r£rKrWrLrLrLrMr%'sc@sNeZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dS)r&NcCs4|dkrtƒ}||_|jj|_d|_d|_d|_dS)Nr)r r r(ÚretriedÚ nonce_countÚ last_nonce)r€r rLrLrMrƒEs z"AbstractDigestAuthHandler.__init__cCs d|_dS)Nr)rX)r€rLrLrMÚreset_retry_countNsz+AbstractDigestAuthHandler.reset_retry_countcCs||j|dƒ}|jdkr*t|jdd|dƒ‚n|jd7_|rx|jƒd}|jƒdkr`|j||ƒS|jƒdkrxtd|ƒ‚dS) Néi‘zdigest auth failedrRrZdigestrGzEAbstractDigestAuthHandler does not support the following scheme: '%s')r™rXrrprCrtÚretry_http_digest_authrB)r€rKrvrÎrerIrrLrLrMrJQs        z/AbstractDigestAuthHandler.http_error_auth_reqedcCsz|jddƒ\}}ttdt|ƒƒƒ}|j||ƒ}|rvd|}|jj|jdƒ|krRdS|j|j|ƒ|j j ||j d�}|SdS)NrñrRz Digest %s)rJ) rCÚparse_keqv_listÚfilterÚparse_http_listÚget_authorizationrer™rKr—rárGrJ)r€rÎrNÚtokenZ challengeÚchalZauth_valZresprLrLrMr]es z0AbstractDigestAuthHandler.retry_http_digest_authcCs@d|j|tjƒf}|jdƒtdƒ}tj|ƒjƒ}|dd…S)Nz %s:%s:%s:rrQé)rYÚtimeZctimerÚ _randombytesÚhashlibÚsha1Ú hexdigest)r€ÚnonceÚsÚbÚdigrLrLrMÚ get_cnonceqsz$AbstractDigestAuthHandler.get_cnoncecCs¾y6|d}|d}|jdƒ}|jddƒ}|jddƒ}Wntk rJdSX|j|ƒ\}} |dkrfdS|jj||jƒ\} } | dkr†dS|jdk r |j|j|ƒ} nd} d| || f} d|jƒ|j f}|d k�r.||j krè|j d 7_ n d |_ ||_ d |j }|j |ƒ}d ||||||ƒf}| || ƒ|ƒ}n2|dk�rT| || ƒd|||ƒfƒ}n t d |ƒ‚d| |||j |f}|�r†|d|7}| �r˜|d| 7}|d|7}|�rº|d||f7}|S)Nr&rjÚqopÚ algorithmÚMD5Úopaquez%s:%s:%sz%s:%srNrRz%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_implsr r,rprIÚget_entity_digestr�rˆrZrYrnr)r€rÎrcr&rjrorprrÚHÚKDrrLZentdigZA1ZA2ZncvalueZcnonceZnoncebitZrespdigr2rLrLrMra|sV              z+AbstractDigestAuthHandler.get_authorizationcsD|dkrdd„‰n|dkr$dd„‰n td|ƒ‚‡fdd„}ˆ|fS)NrqcSstj|jdƒƒjƒS)Nr)rgZmd5rri)ÚxrLrLrMr»sz?AbstractDigestAuthHandler.get_algorithm_impls..ZSHAcSstj|jdƒƒjƒS)Nr)rgrhrri)rxrLrLrMr½sz.Unsupported digest authentication algorithm %rcsˆd||fƒS)Nz%s:%srL)rkÚd)rvrLrMrÂs)rB)r€rprwrL)rvrMrt¸s   z-AbstractDigestAuthHandler.get_algorithm_implscCsdS)NrL)r€rIrcrLrLrMruÅsz+AbstractDigestAuthHandler.get_entity_digest)N) r¡r¢r£rƒr[rJr]rnrartrurLrLrLrMr&:s   < c@seZdZdZdZdd„ZdS)r'rOiêcCs*t|jƒd}|jd|||ƒ}|jƒ|S)NrRzwww-authenticate)rrprJr[)r€rÎrdrærçrervÚretryrLrLrMrVÔs  z$HTTPDigestAuthHandler.http_error_401N)r¡r¢r£rKrârVrLrLrLrMr'Êsc@seZdZdZdZdd„ZdS)r(zProxy-AuthorizationiêcCs"|j}|jd|||ƒ}|jƒ|S)Nzproxy-authenticate)rvrJr[)r€rÎrdrærçrervrzrLrLrMrWás  z%ProxyDigestAuthHandler.http_error_407N)r¡r¢r£rKrârWrLrLrLrMr(Üsc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „Zd S)ÚAbstractHTTPHandlerrcCs ||_dS)N)Ú _debuglevel)r€Ú debuglevelrLrLrMrƒêszAbstractHTTPHandler.__init__cCs ||_dS)N)r|)r€ÚlevelrLrLrMÚset_http_debuglevelísz'AbstractHTTPHandler.set_http_debuglevelcCstjjj|j|jƒƒS)N)rÑrÙÚHTTPConnectionÚ_get_content_lengthrIr�)r€rurLrLrMr�ðsz'AbstractHTTPHandler._get_content_lengthc Cs |j}|stdƒ‚|jdk r–|j}t|tƒr8d}t|ƒ‚|jdƒsN|jddƒ|jdƒ r–|jdƒ r–|j|ƒ}|dk rŠ|jdt|ƒƒn |jddƒ|}|j ƒr¼t |j ƒ\}}t |ƒ\}} |jdƒsÒ|jd|ƒx2|j jD]&\} } | jƒ} |j| ƒsÜ|j| | ƒqÜW|S) Nz no host givenz\POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.z Content-typez!application/x-www-form-urlencodedzContent-lengthzTransfer-encodingZchunkedro)rvrrIrÊrËr¶r‰r—r�r”r rˆr rár¨r•) r€rurvrIrçZcontent_lengthZsel_hostrZselZsel_pathr[r‚rLrLrMÚ do_request_õs>          zAbstractHTTPHandler.do_request_c  s\|j}|stdƒ‚||fd|ji|—Ž}|j|jƒt|jƒ‰ˆjt‡fdd„|jj ƒDƒƒƒdˆd<tdd„ˆj ƒDƒƒ‰|j r¶i}d}|ˆkr¦ˆ|||<ˆ|=|j |j |d �y`y&|j |j ƒ|j|jˆ|jd ƒd �Wn,tk �r }zt|ƒ‚WYdd}~XnX|jƒ} Wn|jƒ‚YnX|j�rF|jjƒd|_|jƒ| _| j| _| S) Nz no host givenrJc3s"|]\}}|ˆkr||fVqdS)NrL)rôrõrö)rerLrMrø)sz.AbstractHTTPHandler.do_open..rÄÚ Connectioncss|]\}}|jƒ|fVqdS)N)Útitle)rôr[r–rLrLrMrø6szProxy-Authorization)rezTransfer-encoding)Zencode_chunked)rvrrJZset_debuglevelr|rÕrxr�rer{rzZ set_tunnelrur�rˆrIr‰rmÚ getresponserÄZsockr‘rHÚreasonrç) r€Z http_classrÎZhttp_conn_argsrvràZtunnel_headersZproxy_auth_hdrÚerrrrL)rerMr°s@  "     zAbstractHTTPHandler.do_openN)r)r¡r¢r£rƒrr�r‚r°rLrLrLrMr{ès  &r{c@seZdZdd„ZejZdS)r)cCs|jtjj|ƒS)N)r°rÑrÙr€)r€rÎrLrLrMÚ http_open`szHTTPHandler.http_openN)r¡r¢r£rˆr{r‚rQrLrLrLrMr)^srØc@s$eZdZddd„Zdd„ZejZdS)rErNcCstj||ƒ||_||_dS)N)r{rƒÚ_contextÚ_check_hostname)r€r}r>Úcheck_hostnamerLrLrMrƒis zHTTPSHandler.__init__cCs|jtjj||j|jd�S)N)r>r‹)r°rÑrÙrØr‰rŠ)r€rÎrLrLrMÚ https_openns zHTTPSHandler.https_open)rNN)r¡r¢r£rƒrŒr{r‚rUrLrLrLrMrEgs rEc@s.eZdZddd„Zdd„Zdd„ZeZeZdS) rNcCs$ddl}|dkr|jjƒ}||_dS)Nr)Zhttp.cookiejarÚ cookiejarZ CookieJar)r€r�rÑrLrLrMrƒws zHTTPCookieProcessor.__init__cCs|jj|ƒ|S)N)r�Zadd_cookie_header)r€rurLrLrMrQ}s z HTTPCookieProcessor.http_requestcCs|jj||ƒ|S)N)r�Zextract_cookies)r€rur´rLrLrMrè�sz!HTTPCookieProcessor.http_response)N)r¡r¢r£rƒrQrèrUrérLrLrLrMrvs  c@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.ˆscCsRi}xH|D]@}|jddƒ\}}|ddkrB|ddkrB|dd…}|||<q W|S)Nú=rRrr<rSrS)rC)ÚlZparsedZeltrõrörLrLrMr^�s   r^cCs¢g}d}d}}xt|D]l}|r,||7}d}q|rV|dkr@d}qn |dkrLd}||7}q|dkrn|j|ƒd}q|dkrzd}||7}qW|r”|j|ƒdd„|DƒS) NrnFú\Tr<ú,cSsg|] }|jƒ‘qSrL)rP)rôÚpartrLrLrMr$Àsz#parse_http_list..)r])rkÚresr’Úescaper ZcurrLrLrMr`—s4     r`c@s(eZdZdd„ZdZdd„Zdd„ZdS)r*cCs\|j}|dd…dkrN|dd…dkrN|jrN|jdkrN|j|jƒkrXtdƒ‚n |j|ƒSdS)Nr:z//r>rÿÚ localhostz-file:// scheme is supported only on localhost)rˆrvÚ get_namesrÚopen_local_file)r€rÎrHrLrLrMÚ file_openÄs &  zFileHandler.file_openNc Cs`tjdkrZy*ttjdƒdtjtjƒƒdƒt_Wn$tjk rXtjdƒft_YnXtjS)Nr•r:)r*Únamesr%rÖÚgethostbyname_exÚ gethostnameÚgaierrorÚ gethostbyname)r€rLrLrMr–Ïs  zFileHandler.get_namescCsddl}ddl}|j}|j}t|ƒ}y¤tj|ƒ}|j}|jj |j dd�} |j |ƒd} |j d| pbd|| fƒ} |r~t |ƒ\}} | sš| rÆt|ƒ|jƒkrÆ|r¬d||} nd|} tt|dƒ| | ƒSWn*tk rò}zt|ƒ‚WYdd}~XnXtdƒ‚dS) NrT)Úusegmtz6Content-type: %s Content-length: %d Last-modified: %s z text/plainzfile://Úrbzfile not on local host)Ú email.utilsÚ mimetypesrvrˆr4rWÚstatÚst_sizeÚutilsÚ formatdateÚst_mtimeÚ guess_typeÚmessage_from_stringr Ú_safe_gethostbynamer–rrGrmr)r€rÎÚemailr¡rvrbZ localfileÚstatsriÚmodifiedÚmtyperer/ZorigurlÚexprLrLrMr—Ús0  zFileHandler.open_local_file)r¡r¢r£r˜r™r–r—rLrLrLrMr*Âs  c Cs&y tj|ƒStjk r dSXdS)N)rÖr�rœ)rvrLrLrMr©õs r©c@seZdZdd„Zdd„ZdS)r+cCs.ddl}ddl}|j}|s"tdƒ‚t|ƒ\}}|dkr>|j}nt|ƒ}t|ƒ\}}|rdt|ƒ\}}nd}t |ƒ}|pvd}|p~d}yt j |ƒ}Wn*t k r¸}zt|ƒ‚WYdd}~XnXt |jƒ\} } | jdƒ} ttt | ƒƒ} | dd…| d} } | �r| d �r| dd…} yÐ|j||||| |jƒ} | �r8d�p:d}x:| D]2}t|ƒ\}}|jƒdk�rB|dk�rB|jƒ}�qBW| j| |ƒ\}}d}|j|jƒd}|�r®|d |7}|dk �rÎ|dk�rÎ|d|7}tj|ƒ}t|||jƒS|jk �r(}z$td|ƒ}|jtj ƒdƒ‚WYdd}~XnXdS)Nrzftp error: no host givenrnrÿrRrTÚDr‹ÚaÚAr¾ryzContent-type: %s zContent-length: %d z ftp error: %rr:rSrS)r°r±r¾rTryr¯)!Úftplibr¡rvrr ÚFTP_PORTr^rrr rÖr�rmrrˆrCržÚmapÚ connect_ftprJrrtÚupperÚretrfiler§rprªr¨rÚ all_errorsÚwith_tracebackÚsysÚexc_info)r€rÎr²r¡rvr/rr rçrXÚattrsÚdirsrNÚfwr‹Úattrr‚rdÚretrlenrer­r®ÚexcrLrLrMÚftp_openüs\           zFTPHandler.ftp_openc Cst||||||dd�S)NF)Ú persistent)Ú ftpwrapper)r€rr rvr/r½rJrLrLrMrµ1szFTPHandler.connect_ftpN)r¡r¢r£rÂrµrLrLrLrMr+ûs5c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)r,cCs"i|_i|_d|_d|_d|_dS)Nré<rd)ÚcacherJÚsoonestÚdelayÚ max_conns)r€rLrLrMrƒ8s zCacheFTPHandler.__init__cCs ||_dS)N)rÈ)r€ÚtrLrLrMÚ setTimeout?szCacheFTPHandler.setTimeoutcCs ||_dS)N)rÉ)r€rûrLrLrMÚ setMaxConnsBszCacheFTPHandler.setMaxConnscCsr|||dj|ƒ|f}||jkr4tjƒ|j|j|<n,t||||||ƒ|j|<tjƒ|j|j|<|jƒ|j|S)Nrÿ)ÚjoinrÆrerÈrJrÄÚ check_cache)r€rr rvr/r½rJr�rLrLrMrµEs  zCacheFTPHandler.connect_ftpcCsÈtjƒ}|j|krTx@t|jjƒƒD].\}}||kr"|j|jƒ|j|=|j|=q"Wtt|jjƒƒƒ|_t |jƒ|j krÄx6t|jjƒƒD]$\}}||jkrˆ|j|=|j|=PqˆWtt|jjƒƒƒ|_dS)N) rerÇržrJr{rÆrÄÚminÚvaluesr`rÉ)r€rÊrõrörLrLrMrÎPs   zCacheFTPHandler.check_cachecCs4x|jjƒD] }|jƒq W|jjƒ|jjƒdS)N)rÆrÐrÄÚclearrJ)r€ÚconnrLrLrMÚ clear_cacheds  zCacheFTPHandler.clear_cacheN) r¡r¢r£rƒrËrÌrµrÎrÓrLrLrLrMr,5s  c@seZdZdd„ZdS)r-cCs~|j}|jddƒ\}}|jddƒ\}}t|ƒ}|jdƒrNtj|ƒ}|dd…}|sVd}tjd|t|ƒfƒ}t t j |ƒ||ƒS) Nú:rRr‘z;base64éztext/plain;charset=US-ASCIIz$Content-type: %s Content-length: %d iùÿÿÿ) rprCrÚendswithrÚ decodebytesrªr¨r`rÚioÚBytesIO)r€rÎrHrrIZ mediatypererLrLrMÚ data_openks    zDataHandler.data_openN)r¡r¢r£rÚrLrLrLrMr-jsrëÚnt)r4r3cCst|ƒS)N)r )ÚpathnamerLrLrMr4‘scCst|ƒS)N)r )rÜrLrLrMr3–sc@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)2r8NzPython-urllib/%scKszdd|jji}tj|tdd�|dkr.tƒ}||_|jdƒ|_|jdƒ|_ d|j fd g|_ g|_ t j|_d|_t|_dS) NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsÚclassr>)Ú stacklevelÚkey_fileÚ cert_filez User-AgentÚAcceptú*/*)rárâ)r8r¡r?r@rAr5rr™rßràÚversionr¨Ú_URLopener__tempfilesrWrlÚ_URLopener__unlinkÚ tempcacheÚftpcache)r€rZx509rçrLrLrMrƒ¬s  zURLopener.__init__cCs |jƒdS)N)rÄ)r€rLrLrMÚ__del__ÆszURLopener.__del__cCs |jƒdS)N)Úcleanup)r€rLrLrMrÄÉszURLopener.closec CsZ|jrFx2|jD](}y|j|ƒWqtk r4YqXqW|jdd…=|jrV|jjƒdS)N)rärårmrærÑ)r€rNrLrLrMréÌs   zURLopener.cleanupcGs|jj|ƒdS)N)r¨r])r€rÇrLrLrMÚ addheaderÚszURLopener.addheadercCsntt|ƒƒ}t|dd�}|jrL||jkrL|j|\}}t|dƒ}t|||ƒSt|ƒ\}}|s`d}||jkr–|j|}t|ƒ\}} t| ƒ\} } | |f}nd}d|} ||_ | j ddƒ} t || ƒ sÈ| dkræ|rÚ|j |||ƒS|j ||ƒSy,|dk�rt|| ƒ|ƒSt|| ƒ||ƒSWnVttfk �r.‚Yn<tk �rh} ztd | ƒjtjƒd ƒ‚WYdd} ~ XnXdS) Nz%/:=&?~#+!$,;'@()*[]|)rrŸrNZopen_ú-r²r—z socket errorr:)rrr rærGrr rr r‹rùrµÚopen_unknown_proxyÚ open_unknownr�rrrmr¹rºr»)r€rÍrIrbrerdÚurltyperHrÚ proxyhostrvrˆr[rçrLrLrMrGàs<             zURLopener.opencCst|ƒ\}}tdd|ƒ‚dS)Nz url errorzunknown url type)r rm)r€rÍrIr‹rHrLrLrMrís zURLopener.open_unknowncCs t|ƒ\}}tdd||ƒ‚dS)Nz url errorzinvalid proxy for %s)r rm)r€rrÍrIr‹rHrLrLrMrì s zURLopener.open_unknown_proxyc Cs&tt|ƒƒ}|jr&||jkr&|j|St|ƒ\}}|dkrš| sH|dkršy.|j|ƒ}|jƒ}|jƒtt|ƒdƒ|fSt k r˜} zWYdd} ~ XnX|j ||ƒ}�zH|jƒ} |rÂt |dƒ} n|ddl } t|ƒ\} }t|pÞdƒ\} }t |pîdƒ\}} t |�pdƒ\}} tjj|ƒd}| j|ƒ\}}|jj|ƒtj|dƒ} z¤|| f}|jdk �r^||j|<d }d }d}d}d| k�r„t| d ƒ}|�r–||||ƒxH|j|ƒ}|�sªP|t|ƒ7}| j|ƒ|d7}|�r˜||||ƒ�q˜WWd| jƒXWd|jƒX|dk�r"||k�r"td ||f|ƒ‚|S) NrNrRrOrrnirQzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi rS)rrrær r—rVrÄr4r rmrGrZrrrWrXÚsplitextZmkstemprär]Úfdopenr^r_r`rar)r€rHrbrcrIr‹Zurl1rdrŸrçrerfrZZgarbagerXÚsuffixÚfdrgrhrir_rjrkrLrLrMÚretrievesl                  zURLopener.retrievecCs(d}d}t|tƒrrÿé z localhost/z-file:// scheme is supported only on localhost)rÊrËrrtrBr—)r€rHrLrLrMÚ open_fileÐs  4 zURLopener.open_filecCs\ddl}ddl}t|ƒ\}}t|ƒ}ytj|ƒ}Wn0tk rb}zt|j|j ƒ‚WYdd}~XnX|j } |j j |j dd�} |j|ƒd} |jd| p–d| | fƒ} |sÔ|} |dd…dkrÂd|} tt|d ƒ| | ƒSt|ƒ\}}| oütj|ƒtƒftƒk�rP|} |dd…dk�r d|} n|dd …d k�r>td |ƒ‚tt|d ƒ| | ƒStd ƒ‚dS)NrT)ržz6Content-Type: %s Content-Length: %d Last-modified: %s z text/plainrRrÿzfile://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 r4rWr¢rmrÚstrerrorrbr£r¤r¥r¦r§r¨rrGr rÖr�r•ÚthishostrB)r€rHrªr¡rvrNZ localnamer«Úerir¬r­reZurlfiler/rLrLrMr—Ùs:     zURLopener.open_local_filecCs˜t|tƒstdƒ‚ddl}t|ƒ\}}|s2tdƒ‚t|ƒ\}}t|ƒ\}}|r\t|ƒ\}}nd}t|ƒ}t|ppdƒ}t|p|dƒ}t j |ƒ}|sžddl }|j }nt |ƒ}t|ƒ\}} t|ƒ}|jdƒ} | dd…| d} } | oæ| d �rö| dd…} | �r| d �rd| d<|||dj| ƒf} t|jƒtk�rlx8t|jƒD]*} | | k�r>|j| }|j| =|jƒ�q>Wyæ| |jk�r�t||||| ƒ|j| <| �sœd}nd}x:| D]2}t|ƒ\}}|jƒd k�r¦|dk�r¦|jƒ}�q¦W|j| j| |ƒ\}}|jd|ƒd}d}|�r|d|7}|dk �r:|dk�r:|d|7}tj|ƒ}t||d|ƒStƒk �r’}z td|ƒj t!j"ƒdƒ‚WYdd}~XnXdS)NzCftp error: proxy support for ftp protocol currently not implementedrzftp error: no host givenrnrÿrRr¯rTr‹r°r±r¾ryzftp:zContent-Type: %s zContent-Length: %d z ftp error %rr:rSrS)r°r±r¾rTryr¯)#rÊrËrr¡r r rrr rÖr�r²r³r^rrCrÍr`rçÚ MAXFTPCACHEržrÄrÄrrtr¶r·r§rªr¨rÚ ftperrorsr¹rºr»)r€rHr¡rvrXr/rr r²r¼r½rNr�rõrör‹r¿r‚rdrÀr­rer®rLrLrMÚopen_ftpùsp                   zURLopener.open_ftpc Cs<t|tƒstdƒ‚y|jddƒ\}}Wntk rDtddƒ‚YnX|sNd}|jdƒ}|dkrŽd ||d…krŽ||dd…}|d|…}nd }g}|jd tj d tj tjƒƒƒƒ|jd |ƒ|dkrät j |j dƒƒjdƒ}nt|ƒ}|jdt|ƒƒ|jd ƒ|j|ƒdj|ƒ}tj|ƒ}tj|ƒ}t|||ƒS)NzEdata error: proxy support for data protocol currently not implementedr‘rRz data errorz bad data URLztext/plain;charset=US-ASCIIú;rrŽrnzDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %srrzlatin-1zContent-Length: %dÚ )rÊrËrrCrBrmÚrfindr]reZstrftimeZgmtimerr×rrr r`rÍrªr¨rØÚStringIOr) r€rHrIr‹ZsemirrçreÚfrLrLrMÚ open_data3s6        zURLopener.open_data)N)N)N)N)NNN)N)N)N)N)r¡r¢r£rär§rãrƒrèrÄrérêrGrírìrôr÷rørörÓrCrûrürþr—rr rLrLrLrMr8Ÿs,  $   B\     :c@sšeZdZdd„Zdd„Zd"dd„Zdd „Zd#d d „Zd$d d „Zd%dd„Z d&dd„Z d'dd„Z d(dd„Z d)dd„Z d*dd„Zd+dd„Zd,dd„Zd d!„ZdS)-r9cOs(tj|f|ž|Ži|_d|_d|_dS)Nrrë)r8rƒÚ auth_cacheÚtriesÚmaxtries)r€rÇr7rLrLrMrƒ`szFancyURLopener.__init__cCst||d||ƒS)Nzhttp:)r)r€rHrdrùrúrerLrLrMrÓfsz!FancyURLopener.http_error_defaultNc Csn|jd7_zR|jrJ|j|jkrJt|dƒr4|j}n|j}|||dd|ƒS|j||||||ƒ}|Sd|_XdS)NrRÚhttp_error_500iôz)Internal Server Error: Redirect Recursionr)r r rµrrÓÚredirect_internal) r€rHrdrùrúrerIr½rgrLrLrMr js  zFancyURLopener.http_error_302c Csxd|kr|d}nd|kr$|d}ndS|jƒt|jd||ƒ}t|ƒ}|jd krnt|||d|||ƒ‚|j|ƒS) NrürýrÔrÑr’rþrnz( Redirection to url '%s' is not allowed.)rÑr’rþrn)rÄrr‹rrrrG) r€rHrdrùrúrerIrúrrLrLrMr|s   z FancyURLopener.redirect_internalcCs|j||||||ƒS)N)r )r€rHrdrùrúrerIrLrLrMr ˜szFancyURLopener.http_error_301cCs|j||||||ƒS)N)r )r€rHrdrùrúrerIrLrLrMr œszFancyURLopener.http_error_303cCs2|dkr|j||||||ƒS|j|||||ƒSdS)N)r rÓ)r€rHrdrùrúrerIrLrLrMr  szFancyURLopener.http_error_307Fc CsÈd|krtj||||||ƒ|d}tjd|ƒ} | sHtj||||||ƒ| jƒ\} } | jƒdkrttj||||||ƒ|sŒtj||||||ƒd|jd} |dkr²t|| ƒ|| ƒSt|| ƒ|| |ƒSdS)Nzwww-authenticatez![ ]*([^ ]+)[ ]+realm="([^"]*)"rGZretry_Ú _basic_auth)r8rÓrRÚmatchrArtr‹r�) r€rHrdrùrúrerIrzÚstuffrrr&r[rLrLrMrV§s&         zFancyURLopener.http_error_401c CsÈd|krtj||||||ƒ|d}tjd|ƒ} | sHtj||||||ƒ| jƒ\} } | jƒdkrttj||||||ƒ|sŒtj||||||ƒd|jd} |dkr²t|| ƒ|| ƒSt|| ƒ|| |ƒSdS)Nzproxy-authenticatez![ ]*([^ ]+)[ ]+realm="([^"]*)"rGZ retry_proxy_r)r8rÓrRrrArtr‹r�) r€rHrdrùrúrerIrzrrrr&r[rLrLrMrWÀs&         zFancyURLopener.http_error_407cCsÄt|ƒ\}}d||}|jd}t|ƒ\}} t| ƒ\} } | jdƒd} | | d…} |j| || ƒ\} } | pl| srdSdt| dd�t| dd�| f} d| | |jd<|dkr´|j|ƒS|j||ƒSdS)Nzhttp://rÑú@rRz%s:%s@%srn)r)r rr r¸Úget_user_passwdr rG)r€rHr&rIrvrˆrúrrîrïÚ proxyselectorr¾rr rLrLrMÚretry_proxy_http_basic_authÙs         z*FancyURLopener.retry_proxy_http_basic_authcCsÄt|ƒ\}}d||}|jd}t|ƒ\}} t| ƒ\} } | jdƒd} | | d…} |j| || ƒ\} } | pl| srdSdt| dd�t| dd�| f} d| | |jd<|dkr´|j|ƒS|j||ƒSdS)Nzhttps://r’rrRz%s:%s@%srn)r)r rr r¸rr rG)r€rHr&rIrvrˆrúrrîrïrr¾rr rLrLrMÚretry_proxy_https_basic_authës         z+FancyURLopener.retry_proxy_https_basic_authc Cs�t|ƒ\}}|jdƒd}||d…}|j|||ƒ\}}|p>|sDdSdt|dd�t|dd�|f}d||} |dkr€|j| ƒS|j| |ƒSdS)NrrRz%s:%s@%srn)rzhttp://)r r¸rr rG) r€rHr&rIrvrˆr¾rr rúrLrLrMrHýs     z$FancyURLopener.retry_http_basic_authc Cs�t|ƒ\}}|jdƒd}||d…}|j|||ƒ\}}|p>|sDdSdt|dd�t|dd�|f}d||} |dkr€|j| ƒS|j| |ƒSdS)NrrRz%s:%s@%srn)rzhttps://)r r¸rr rG) r€rHr&rIrvrˆr¾rr rúrLrLrMÚretry_https_basic_auth s     z%FancyURLopener.retry_https_basic_authrcCs`|d|jƒ}||jkr2|r(|j|=n |j|S|j||ƒ\}}|sJ|rX||f|j|<||fS)Nr)rtr Úprompt_user_passwd)r€rvr&rÓr�rr rLrLrMr s   zFancyURLopener.get_user_passwdc CsTddl}y,td||fƒ}|jd|||fƒ}||fStk rNtƒdSXdS)NrzEnter username for %s at %s: z#Enter password for %s in %s at %s: )NN)ÚgetpassÚinputÚKeyboardInterruptÚprint)r€rvr&rrr rLrLrMr$ sz!FancyURLopener.prompt_user_passwd)N)N)N)N)NF)NF)N)N)N)N)r)r¡r¢r£rƒrÓr rr r r rVrWrrrHrrrrLrLrLrMr9]s"           cCstdkrtjdƒatS)Nr•)Ú _localhostrÖr�rLrLrLrMr•4 s r•c CsPtdkrLyttjtjƒƒdƒaWn(tjk rJttjdƒdƒaYnXtS)Nr:r•)Ú _thishostr%rÖršr›rœrLrLrLrMr< s rcCstdkrddl}|jatS)Nr)Ú _ftperrorsr²r¸)r²rLrLrMrG srcCstdkrtjdƒatS)Nrn)Ú _noheadersrªr¨rLrLrLrMÚ noheadersP s r"c@sFeZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dS)rÄNTc CsX||_||_||_||_||_||_d|_||_y |jƒWn|j ƒ‚YnXdS)Nr) rr rvr/r½rJÚrefcountÚ keepaliveÚinitrÄ)r€rr rvr/r½rJrÃrLrLrMrƒ] s zftpwrapper.__init__cCs\ddl}d|_|jƒ|_|jj|j|j|jƒ|jj|j |j ƒdj |j ƒ}|jj |ƒdS)Nrrÿ)r²ÚbusyZFTPrþZconnectrvr/rJZloginrr rÍr½Úcwd)r€r²Z_targetrLrLrMr%m s  zftpwrapper.initc -Cs¸ddl}|jƒ|dkr"d}d}n d|}d}y|jj|ƒWn*|jk rh|jƒ|jj|ƒYnXd}|rè| rèyd|}|jj|ƒ\}}WnR|jk ræ}z4t|ƒdd…d krÖt d |ƒj t j ƒd ƒ‚WYdd}~XnX|�s‚|jjdƒ|�rn|jj ƒ} zJy|jj|ƒWn4|jk �rP}zt d |ƒ|‚WYdd}~XnXWd|jj| ƒXd |}nd }|jj|ƒ\}}d|_t|jdƒ|jƒ} |jd7_|jƒ| |fS)Nrryr¯zTYPE ArRzTYPE zRETR r>Z550z ftp error: %rr:zLIST ZLISTrŸ)ryr¯)r²Ú endtransferrþZvoidcmdr¸r%Z ntransfercmdZ error_permrËrr¹rºr»Úpwdr'r&rÚmakefileÚ file_closer#rÄ) r€rNr‹r²ÚcmdÚisdirrÒrÀr†r)ZftpobjrLrLrMr·v sN     $ zftpwrapper.retrfilecCs d|_dS)Nr)r&)r€rLrLrMr(£ szftpwrapper.endtransfercCsd|_|jdkr|jƒdS)NFr)r$r#Ú real_close)r€rLrLrMrĦ s zftpwrapper.closecCs4|jƒ|jd8_|jdkr0|j r0|jƒdS)NrRr)r(r#r$r.)r€rLrLrMr+« szftpwrapper.file_closec Cs2|jƒy|jjƒWntƒk r,YnXdS)N)r(rþrÄr)r€rLrLrMr.± s zftpwrapper.real_close)NT) r¡r¢r£rƒr%r·r(rÄr+r.rLrLrLrMrÄZ s  -rÄcCs¼i}xBtjjƒD]4\}}|jƒ}|r|dd…dkr|||dd…<qWdtjkr^|jddƒxXtjjƒD]J\}}|dd…dkrj|jƒ}|r |||dd…<qj|j|dd …dƒqjW|S) NéÚ_proxyZREQUEST_METHODrÑiúÿÿÿiúÿÿÿiúÿÿÿiúÿÿÿiúÿÿÿ)rWÚenvironr{rtr›)rr[r‚rLrLrMÚgetproxies_environment¹ s   r2c Cs²|dkrtƒ}y |d}Wntk r.dSX|dkr.r‘Ú.z (.+\.)?%s$) r2rsr rCÚlstriprRr”rrT)rvrZno_proxyÚhostonlyr/Z no_proxy_listr[ÚpatternrLrLrMÚproxy_bypass_environmentØ s&     r9c Csddlm}t|ƒ\}}dd„}d|kr4|dr4dSd}xÞ|jdfƒD]Î}|sPqFtjd |ƒ}|dk �r|dkrœytj|ƒ}||ƒ}Wntk ršwFYnX||jd ƒƒ} |jd ƒ} | dkrÖd |jd ƒj dƒd } nt | d d…ƒ} d | } || ?| | ?k�rdSqF|||ƒrFdSqFWdS)Nr)ÚfnmatchcSsh|jdƒ}ttt|ƒƒ}t|ƒdkr<|ddddgdd…}|dd>|dd>B|dd>B|d BS) Nr5rêrérRrdr:rQr>)rCržr´r^r`)ZipAddrr.rLrLrMÚip2num s   z,_proxy_bypass_macosx_sysconf..ip2numr5Zexclude_simpleTÚ exceptionsz(\d+(?:\.\d+)*)(/\d+)?rRr:rQé F) r:r r™rRrrÖr�rmÚgroupÚcountr^) rvÚproxy_settingsr:r7r/r<ZhostIPr‚rûr2ÚmaskrLrLrMÚ_proxy_bypass_macosx_sysconfû s:        rCÚdarwin)Ú_get_proxy_settingsÚ _get_proxiescCstƒ}t||ƒS)N)rErC)rvrArLrLrMÚproxy_bypass_macosx_sysconf: srGcCstƒS)N)rFrLrLrLrMÚgetproxies_macosx_sysconf> srHcCs tƒ}|rt||ƒSt|ƒSdS)N)r2r9rG)rvrrLrLrMrH s rcCs tƒp tƒS)N)r2rHrLrLrLrMr5U scCsi}y ddl}Wntk r$|SXyÎ|j|jdƒ}|j|dƒd}|rêt|j|dƒdƒ}d|kr¬x‚|jdƒD]4}|jddƒ\}}tjd|ƒsžd ||f}|||<qrWn>|dd …d krÆ||d <n$d ||d <d||d<d||d<|j ƒWnt t t fk �rYnX|S)Nrz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚ ProxyEnableZ ProxyServerrŽrrRz ^([^/:]+)://z%s://%sr\zhttp:rÑz http://%sz https://%sr’zftp://%srþ) ÚwinregÚ ImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚ QueryValueExrËrCrRrZClosermrBr¶)rrJÚinternetSettingsÚ proxyEnableZ proxyServerÚpr¿ZaddressrLrLrMÚgetproxies_registryZ s8          rRcCs tƒp tƒS)N)r2rRrLrLrLrMr5‡ sc &Cs~y ddl}Wntk r dSXy6|j|jdƒ}|j|dƒd}t|j|dƒdƒ}Wntk rldSX| sz| r~dSt|ƒ\}}|g}y tj |ƒ}||kr®|j |ƒWntk rÄYnXy tj |ƒ}||krä|j |ƒWntk �rüYnX|j dƒ}xp|D]h} | dk�r*d|k�r*dS| j dd ƒ} | j d d ƒ} | j d dƒ} x$|D]} tj| | tjƒ�rTdS�qTW�qWdS) Nrz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsrIZ ProxyOverriderzr5rRz\.r4z.*ú?)rJrKrLrMrNrËrmr rÖr�r]ZgetfqdnrCrùrRrrT) rvrJrOrPZ proxyOverrideZrawHostr/ZaddrZfqdnr3r–rLrLrMÚproxy_bypass_registry� sR              rTcCs tƒ}|rt||ƒSt|ƒSdS)N)r2r9rT)rvrrLrLrMr s )NNN)N)~rr»rªrgZ http.clientrÑrØrWr0rRrÖrrºreÚ collectionsrZrTr?Z urllib.errorrrrZ urllib.parserrrrr r r r r rrrrrrrrrZurllib.responserrrDrKrCÚ__all__Ú version_infor§rFr×r0r1r\r6r7rSÚASCIIrrrwrrr2rr/rrrrr r!r"r#r$r%Úurandomrfr&r'r(r{r)rµrÙrEr]rr.r^r`r*r©r+r,r-rr[Z nturl2pathr4r3rçr8r9rr•rrr rr!r"rÄr2r9rCÚplatformZ_scproxyrErFrGrHrr5rRrTrLrLrLrMÚTsêP   T ?n$q*@ o  v  +3:5! AW  _ #<    - 2