ѷLm_<~#dSSKrSSKJr SSKJr SSKJr SSKJr SSKJr SSKJ r SSKJ r SSK r SSK r SSK r SSKrSSKrSSKrSSKrSSKrSS KJrJrJrJrJrJrJrJr SS KJr SSKrSSKr \RB"S S 9 "S S\RD5r#"SS\RD5r$"SS5r%"SS5r&"SS\'5r("SS\ RR5r*"SS5r+"SS5r,"SS\ RZ5r."SS 5r/"S!S"5r0S#r1S$r2"S%S&\RfRh5r5"S'S(\RfRl5r7\8"\ RrS)5(a"S*S+\RfRt5r;"S,S-\RfRl5r<"S.S/5r="S0S1\RD5r>S2r?"S3S4\RD\5r@"S5S6\RD\5rA"S7S8\RD5rB\CS9:Xa\R"5 gg):N)support) os_helper)requires_subprocess)warnings_helper)ExtraAssertions) test_urllib)mock)RequestOpenerDirectorHTTPBasicAuthHandlerHTTPPasswordMgrWithPriorAuth _parse_proxy_proxy_bypass_winreg_override_proxy_bypass_macosx_sysconfAbstractDigestAuthHandler)urlparseT)modulec,\rSrSrSrSrSrSrSrg) TrivialTests&c SHn0n[SU-U5 US US:Xam[RS:XaYURS5URS5pCUR UR S5 UR UR S5 UR 5H:upVUR UR S U-U<S U<S UR <35 M< M g) N)requestresponseparseerror robotparserzfrom urllib.%s import * __builtins__rnt url2pathname pathname2url nturl2pathz urllib.%sz is exposed in 'urllib.z' but defined in )execosnamepop assertEqual __module__items)selfrcontextupkvs 8/opt/alt/python313/lib64/python3.13/test/test_urllib2.py test___all__TrivialTests.test___all__(sLFG *V3W ='"rww${{>2GKK4O1  |<  |<   {V/C ./(Mc.UR[RR5 UR [ [RR S5 [RR[RR5R[RS5n[RS:XaSU-nOSU-n[RR U5nUR5 SSS5 g!,(df  g=f)Nz bogus url/rz file:///%s file://%s) addCleanupurllibr urlcleanup assertRaises ValueErrorurlopenr#pathabspath__file__replacesepr$read)r)fnamefile_urlfs r/ test_trivialTrivialTests.test_trivial7s 112 *fnn&<&##*7;89? A *5v)>##*7;89? Ar2cSn[USS0S9nURURS55 URUR 5S/5 UR SS5 UR[ UR 55SS/5 URURS 55 URURS 55 URURS S 5S 5 URS5 URURS55 URS S 5 URURS 55 URS 5 URURS 55 g )a Note the case normalization of header names here, to .capitalize()-case. This should be preserved for backwards-compatibility. (In the HTTP case, normalization to .title()-case is done by urllib2 before sending headers to http.client). Note that e.g. r.has_header("spam-EggS") is currently False, and r.get_header("spam-EggS") returns None, but that could be changed in future. Method r.remove_header should remove items both from r.headers and r.unredirected_hdrs dictionaries rerfrgrh)rfrgzFoo-Barbaz)zFoo-barrnz Not-theredefaultzUnredirected-spamEggsN) r assertTrue has_headerr& header_items add_headersorted assertFalse assertIsNone get_header remove_headeradd_unredirected_header)r)rjreqs r/test_request_headers_methods-RequestHdrsTests.test_request_headers_methodsqs>#cK#89 {34 ))+.C-DE y%(  0 0 23,.CD F  45 #..56  Y?K +&  45 ##$7@ ':;< -. (;<=r2c[RR5nURnURnU"SSSS5 U"SSSS5 U"SSSS 5 U"SS S S 5 U"SS SS5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 U"S SSS5 U"S SSS5 U"S SSS5 UR U"S S5S5 UR U"S S5S5 UR U"S S5S5 UR U"S S5S5 UR U"S S 5S5 UR U"S S!5S"5 U"S S#S$S%5 UR U"S S&5S"5 UR U"S S#5S'5 UR U"S S(5S'5 U"S)SS*S+5 U"S)SS,S-5 UR U"S)S5S.5 U"S/SS0S/5 UR U"S/S5S15 UR U"S/S25S"5 UR U"SS35S"5 UR U"SS45S55 UR U"SS5S55 UR U"SS 5S65 UR U"SS 5S75 g)8Nz Some Realmhttp://example.com/joepasswordzhttp://example.com/ninizhttp://c.example.com:31283rJz d.example.com4dze.example.com:31285e example.com)rrrezhttp://example.com/spamzhttp://example.com/spam/spamzhttp://example.com/foofoozhttp://example.com/barbarninizhttp://example.com/foo/barfoobarnibar)rr)rrzhttp://example.com/foo/zhttp://example.com/foo/bazzhttp://example.com/foobarNNzhttp://example.com/baz/rnnininizhttp://example.com/baz)rnrzhttp://example.com/baz/barrIfirstrgsecondspam)rrrH1)rrHzhttp://a.example.com/z c.example.comzc.example.com:3128)rrJ)rr)rrr7rHTTPPasswordMgr add_passwordfind_user_passwordr&r)mgraddfind_user_passs r/test_password_manager&RequestHdrsTests.test_password_managers`nn,,.// L/ C L14> L5sC@ L/34 L.S9  mD, .  6MN, .  6JK, .  6KL, .  (AC, .  (FH, . C)5$7 C)5&9 C-xA -EF& ( -EF( * -FG& ( -IJ& ( -IJ& ( -HI% ' C*E8< -EF% ' -FG* , -IJ* , C&8 C&&9 -BC+ - C%sC0 -BC# % -DE% '  oF% '  6JK# %  <)D E    oF# %  6JK# %r2c[RR5nURnURnU"SSSS5 U"SSSS5 U"S S S S 5 U"S SSS5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"SS5S5 UR U"S S5S5 UR U"S S 5S5 UR U"S S5S5 UR U"S S5S5 UR U"S S 5S5 UR U"S S!5S5 UR U"S S"5S5 g#)$z The point to note here is that we can't guess the default port if there's no scheme. This applies to both add_password and find_user_password. rDzhttp://g.example.com:8010jrLzhttp://h.example.com11r-rMzi.example.com:8012liz j.example.com13mzg.example.com:100rzg.example.com:80)rrz g.example.comzhttp://g.example.com:100zhttp://g.example.comz h.example.com)rr-zh.example.com:80zhttp://h.example.com:80z i.example.com)rrzhttp://i.example.com:80)rrzj.example.com:80zhttp://j.example.comzhttp://j.example.com:80Nrrs r/"test_password_manager_default_port3RequestHdrsTests.test_password_manager_default_ports nn,,.// C*D#6 C's3 C#T3/ C$, -@A% ' -?@$ & _=% ' -GH% ' -FG$ & -CD$ & _={K -?@+N -FG$ & _=|L -?@+N -FG$ & _={K -?@% ' -CD$ & -FG% 'r2r\N) r]r'r^r_rkr|rrr`r\r2r/rbrbZsA*">HT%l''r2rbc@\rSrSr/rS\R 4SjrSrSr g) MockOpeneriNc.XUsUlUlUlgN)r{datatimeout)r)r{rrs r/openMockOpener.opens,/w)$)T\r2c XsUlUlgr)protoargs)r)rrs r/rMockOpener.errors % DIr2)rrrr{r) r]r'r^r_ addheaderssocket_GLOBAL_DEFAULT_TIMEOUTrrr`r\r2r/rrsJ!6+I+I?,r2rc.\rSrSrSSjrSSjrSrSrg)MockFileiNcgrr\r)counts r/rA MockFile.read  r2cgrr\rs r/readlineMockFile.readline#rr2cgrr\r)s r/closeMockFile.close&rr2r\r)r]r'r^r_rArrr`r\r2r/rrs   r2rc\rSrSrSrSrg) MockHeadersi*c4[UR55$r)rQvalues)r)r$s r/ getheadersMockHeaders.getheaders+sDKKM""r2r\N)r]r'r^r_rr`r\r2r/rr*s#r2rc*\rSrSrSSjrSrSrSrg) MockResponse/Nc|[RRX5 XX54uUlUlUlUlgr)ioStringIO__init__codemsgrirj)r)rrrirrjs r/rMockResponse.__init__0s/ T(6:6M3 48T\48r2cUR$rrhrs r/infoMockResponse.info4s ||r2cUR$rrjrs r/geturlMockResponse.geturl7 xxr2)rrirrjr)r]r'r^r_rrrr`r\r2r/rr/sNr2rc \rSrSrSrSrSrg) MockCookieJari;cXlgr)ach_req)r)rs r/add_cookie_headerMockCookieJar.add_cookie_header<s r2c X!sUlUlgr)ec_reqec_r)r)rrs r/extract_cookiesMockCookieJar.extract_cookies?s!( TYr2)rrrN)r]r'r^r_rrr`r\r2r/rr;s 3r2rc \rSrSrSrSrSrg) FakeMethodiCc(XlX0lX lgr) meth_namehandleaction)r)rrrs r/rFakeMethod.__init__Ds"  r2cRUR"URUR/UQ76$r)rrr)r)rs r/__call__FakeMethod.__call__Is {{4>>4;;>>>r2)rrrN)r]r'r^r_rrr`r\r2r/rrCs  ?r2rc,\rSrSrSrSrSrSrSrg)MockHTTPResponseiMcBXlX lX0lX@lSUlg)N)fprstatusrUr)r)rrrrUs r/rMockHTTPResponse.__init__Ns   r2cg)Nr\rs r/rAMockHTTPResponse.readUsr2c0$rr\rs r/rMockHTTPResponse.infoXs r2cUR$rrrs r/rMockHTTPResponse.geturl[rr2)rrrrUrN) r]r'r^r_rrArrr`r\r2r/rrMsr2rch\rSrSrSr\R 4SjrSrS Sjr S SS.S jjr S r S r S r g) MockHTTPClassi_cXSUl/UlSUlSUlSUl0Ulg)NrF)level req_headersrraise_on_endheaderssock_tunnel_headersrs r/rMockHTTPClass.__init__`s/  #(  !r2cXlX lU$r)hostr)r)r rs r/rMockHTTPClass.__call__hs   r2cXlgr)r)r)rs r/set_debuglevelMockHTTPClass.set_debuglevelms r2NclXlX lU(aX0lgURR5 gr) _tunnel_host _tunnel_portrclear)r)r portris r/ set_tunnelMockHTTPClass.set_tunnelps)   #*  & & (r2F)encode_chunkedcXlX lUb#U=RUR5- slURR 5 U(aX0lXPlUR(a [5egr) methodselectorrr(sortrrrOSError)r)rrjbodyrirs r/rMockHTTPClass.requestxs^        /   I,  # #)O $r2c.[[50SS5$)NrOK)rrrs r/ getresponseMockHTTPClass.getresponses BT::r2cgrr\rs r/rMockHTTPClass.closerr2) rrrrrr rrrrrrrr)r]r'r^r_rrrrrrrr!rr`r\r2r/rr_s8"&,%C%C ) $ ; r2rc<\rSrSrSrSrSrSrSrSr Sr S r g ) MockHandleric&URU5 gr)_define_methods)r)methodss r/rMockHandler.__init__s W%r2cUHFn[U5S:XaUup4OUSpC[X4UR5n[URX55 MH g)N)lenrrsetattr __class__)r)r*specr$rmeths r/r)MockHandler._define_methodssED4yA~# f#TfdDKK8D DNND / r2cURRRXX445 UcgUS:XaU$US:Xa[SS0S5nU$US:Xa [ S5$UR S5(aRX"R S 5S -Sn[U5n[SS0S5nURRS US XVS05$US :Xa[RRS5ee![a Ncf=f)N return selfreturn responserr rreturn requestz http://blah/r httprraiserg) parentcallsappendrr startswithrfindintr:rr7rV)r)fn_namerrkwdsresrs r/rMockHandler.handles   $!<= > } $K ( (sD"b1CJ ' '>* *   w ' ',,s+A-./D 4ysD"b1C;;$$VT!WcRH H w ,,''/ /u   s C** C76C7cgrr\rs r/rMockHandler.closerr2c2Xl/URlgr)r<r=)r)r<s r/ add_parentMockHandler.add_parents  r2cX[US5(dgURUR:$)N handler_orderT)hasattrrL)r)others r/__lt__MockHandler.__lt__s)uo..!!E$7$777r2)r<N) r]r'r^r_rLrr)rrrIrOr`r\r2r/r&r&s'M&0. 8r2r&c/nSnUHgn"SS[5nU"U5nU=RU- slURU5 US-nURU5 UR U5 Mi U$)aCreate MockHandlers and add them to an OpenerDirector. meth_spec: list of lists of tuples and strings defining methods to define on handlers. eg: [["http_error", "ftp_open"], ["http_open"]] defines methods .http_error() and .ftp_open() on one handler, and .http_open() on another. These methods just record their arguments and return None. Using a tuple instead of a string causes the method to perform some action (see MockHandler.handle()), eg: [["http_error"], [("http_open", "return request")]] defines .http_error() on one handler (which simply returns None), and .http_open() on another handler, which returns a Request object. rc\rSrSrSrg)6add_ordered_mock_handlers..MockHandlerSubclassir\Nr]r'r^r_r`r\r2r/MockHandlerSubclassrS r2rUr9)r&rLrIr> add_handler)opener meth_spechandlersrmethsrUrMs r/add_ordered_mock_handlersr\st&H E +   & 5  V 1 Or2cN[5nUHnURU5 M U$r)r rW)handler_instancesrXrMs r/build_test_openerr_s'  F 1 Mr2c2^\rSrSrSU4SjjrSrSrU=r$)MockHTTPHandlericF>[[U] US9 [5Ulg)N debuglevel)superrarrhttpconn)r)rdr0s r/rMockHTTPHandler.__init__s ot--D% r2c:URURU5$rdo_openrfr)r{s r/ http_openMockHTTPHandler.http_opens||DMM3//r2rfr)r]r'r^r_rrlr` __classcell__r0s@r/raras(00r2rac&\rSrSrSrSrSrSrg)MockHTTPHandlerRedirectc<XlX lUR5 gr)rrireset)r)rris r/r MockHTTPHandlerRedirect.__init__s   r2c SUl/Ulg)Nr)_countrequestsrs r/ruMockHTTPHandlerRedirect.resets  r2cSSKnSSKnURRUR U55 UR S:XaUR S-Ul[ RRURnURUR5nURRSU[5URXE5$XlURS5n[!SSUSUR#55$)Nrr9r: rr r)emailcopyryr>deepcopyrxr:client responsesrmessage_from_stringrir<rrr{r get_full_url)r)r{r}r~r$rs r/rl!MockHTTPHandlerRedirect.http_opens T]]3/0 ;;! ++/DK;;((3D++DLL9C;;$$XZD? ?H++J7CT3C4D4D4FG Gr2)rxrrir{ryNr]r'r^r_rrurlr`r\r2r/rrrrs  Hr2rrHTTPSConnectionc2^\rSrSrSU4SjjrSrSrU=r$)MockHTTPSHandlericL>[[U] XU5 [5Ulgr)rerrrrf)r)rdr*check_hostnamer0s r/rMockHTTPSHandler.__init__s "D 2: W)ODMr2c:URURU5$rrirks r/ https_openMockHTTPSHandler.https_opens<< s3 3r2rn)NNN)r]r'r^r_rrr`rorps@r/rrs , 4 4r2rc&\rSrSrSrSrSrSrg)MockHTTPHandlerCheckAuthicXlSUlgNFrhas_auth_header)r)rs r/r!MockHTTPHandlerCheckAuth.__init__#s $r2cSUlgr)rrs r/ruMockHTTPHandlerCheckAuth.reset's $r2cURS5(aSUl[RRUR n[ UR U[5SUR55$)N AuthorizationTr) rrrr:rrrrrr)r)r{r$s r/rl"MockHTTPHandlerCheckAuth.http_open*sS >>/ * *#'D {{$$TYY/DIItXZS=M=M=OPPr2rNrr\r2r/rrs%%Qr2rc \rSrSrSrSrSrg)MockPasswordManageri2c4XlX lX0lX@lgr)realmrjuserr)r)rurirrs r/r MockPasswordManager.add_password3s   r2cJXlX lURUR4$r) target_realm target_urlrr)r)rauthuris r/r&MockPasswordManager.find_user_password9s !!yy$--''r2)rrrrrjrN)r]r'r^r_rrr`r\r2r/rr2s ! (r2rc>\rSrSrSrSrSrSrSrSr Sr S r g ) OpenerDirectorTestsi?c~"SS[5nUR[[5RU"55 g)Nc\rSrSrSrg).NonHandleriBr\NrTr\r2r/ NonHandlerrBrVr2r)objectr9 TypeErrorr rW)r)rs r/test_add_non_handler(OpenerDirectorTests.test_add_non_handlerAs/   )(*66  Fr2cSSKJn [5nSS/S//n[X#5 UR [ R R55 SH"nURXRUS-5 M$ g)Nr)rV)rjr5) proxy_openr5)redirect_requestr5)doproxyredirectz://example.com/) urllib.errorrVr r\rWr7rUnknownHandlerr9r)r)rVorYschemes r/test_badly_named_methods,OpenerDirectorTests.test_badly_named_methodsGsl *   ')F G 0 1  "!/ fnn3356/F   h7H0H I0r2cP[5n/SQS/S/S//n[X5n[S5nURU5nUR XSS5 USS4USS4/n[ XaR 5H/upxUuppUR X4U5 UR X45 M1 g)N)rlftp_openhttp_error_302rrlr5rr-rrl)r r\r rr&zipr=) r)rrYrZr{rr=expectedgothandlerr$rrCs r/ test_handled OpenerDirectorTests.test_handled\s   7 L ) * ) *  -Q:+, FF3K QK(1+{+hqk;-GH 0MH(+ %G4   g_h 7   T6 *1r2cv[5n/nS/S4S/S44HDup4"SS[5nU"U5nXFlURU5 UR U5 MF UR S5 UR URSSUS5 UR URSSUS5 g) Nrr'rlrc\rSrSrSrg)COpenerDirectorTests.test_handler_order..MockHandlerSubclassi{r\NrTr\r2r/rUr{sr2rUrr9)r r&rLr>rWrr&r=)r)rrZr[rLrUrMs r/test_handler_order&OpenerDirectorTests.test_handler_ordervs  'C&Dc%J'2mQ%7%9 E k $E*A+O OOA  MM! %9 $% A 4 A 4r2c[5nS/S//n[X5n[S5nUR[R R URU5 URURUSSU404/5 g)N)rlr;rrrrl) r r\r r9r7rrVrr&r=)r)rrYrZr{s r/ test_raiseOpenerDirectorTests.test_raisesz   # $ ) * -Q:+, &,,//= HQKsfb#I"JKr2c[5nS/SS//SQS//n[X5n[S5nURU5 [ UR 5S:XdeUSSU44USSU[ RS S 044/n[XQR 5H4upgUupn URX4USS5 URXS5 M6 g) N)rlz error 302)http_error_400r;rl))rr6http_error_303 http_errorrrr-r.r) r r\r rr.r=r ALWAYS_EQrr&) r)rrYrZr{r=rrr method_namers r/test_http_error#OpenerDirectorTests.test_http_errors   ' ( (+ 6   -Q:+, s 177|q   1+{SF31+/))3B79:!0MH)1 &G$   g3S!W =   Tq6 *1r2cd[5nSS/SS//n[X5n[S5nURU5 USS4USS4USS4USS4/n[ UR 5HunupxpUS:aKUR Xx4XV5 UR [U 5S5 URU S[5 MZUR Xx4XV5 UR [U 5S5 URU S[5 U ScMURU S[5 M g) N) http_requestr7) http_responser6rrrr9rr-) r r\r r enumerater=r&r.assertIsInstancer) r)rrYrZr{r=rrr$rrCs r/test_processors#OpenerDirectorTests.test_processorssB   / 1 3 / 1 3 -Q:+, s a[. )HQK+H a[/ *Xa[/,JL/8.@ *A*t1u  '%(;  TA.%%d1gw7  '%(;  TA.%%d1gw77&))$q'<@/Ar2r\N) r]r'r^r_rrrrrrrr`r\r2r/rr?s)F J*+45$ L+.!Ar2rc[RRU5n[RS:XaUR S5(aUSSnU$)Nrz///r-)r7rr r#r$r?)r<urlpaths r/sanepathname2urlrsAnn))$/G ww$7--e44!"+ Nr2c\rSrSrSrSrSrSrSr\ "5S5r Sr S r S r S rS r\R""\"\R(S 5S5S5r\R""\"\R(S 5S5S5rSrSrSrSrSrSrSrSrSrSr Sr!Sr"Sr#Sr$Sr%S r&S!r'S"r(\R""\"\R(S 5S5S#5r)\R""\*RVS$:HS%5S&5r,\R""\-R\S':HS(5S)5r/S*r0S+r1S,r2S-r3S.r4S/r5S0r6S1r7S2r8S3r9S4r:S5r;g6)7 HandlerTestsic^"SS5m"U4SjS[RR5nSSKnSnU"U5n[ 5UlSSUR S S S S S /S S4 SSUR SS S S S /S S4 SSUR SS S S S /S S4 SSUR SS S S S /S S4 SSSS S SS S /S S4 SSUR S S S/SS4 4GHu pVpxppn [U5nSUlURU5nURURU5 URURU 5 URUR[R"U55 URUR U5 URUR"U 5 URUR$R&U 5 URUR$R(U 5 UR+5nURUR-S5U 5 UR[/US5[1U55 UR35 GM g)Nc&\rSrSrSrSrSrSrg)-HandlerTests.test_ftp..MockFTPWrappericXlgrrr)rs r/r6HandlerTests.test_ftp..MockFTPWrapper.__init__ r2cXsUlUl[R"UR5[ UR54$r)filenamefiletyperrrr.)r)rrs r/retrfile6HandlerTests.test_ftp..MockFTPWrapper.retrfiles0/7, t}{{499-s499~==r2cgrr\rs r/r3HandlerTests.test_ftp..MockFTPWrapper.closer2)rrrN)r]r'r^r_rrrr`r\r2r/MockFTPWrapperrs ! > r2rcB>\rSrSrSr\R 4U4SjjrSrg)-HandlerTests.test_ftp..NullFTPHandlericXlgrrrs r/r6HandlerTests.test_ftp..NullFTPHandler.__init__rr2c>XsUlUlX4sUlUlXPlT"UR 5UlUR $r)rpasswdr rdirsr ftpwrapper)r)rrr rrrrs r/ connect_ftp9HandlerTests.test_ftp..NullFTPHandler.connect_ftps>)-& 4;'+$ 49 "0";&r2)rrrr rrrN) r]r'r^r_rrrrr`)rsr/NullFTPHandlerrs !%+$B$B ' 'r2rrzrheum rhaponicumz ftp://localhost/foo/bar/baz.html localhostrIrrzbaz.htmlz text/htmlz'ftp://parrot@localhost/foo/bar/baz.htmlparrotz*ftp://%25parrot@localhost/foo/bar/baz.htmlz%parrotz,ftp://%2542parrot@localhost/foo/bar/baz.htmlz %42parrotzftp://localhost:80/foo/bar/PDzftp://localhost/baz.gif;type=aAzbaz.gifz image/gif Content-typeContent-length)r7r FTPHandlerftplibrr<FTP_PORTr rrr&rrr r gethostbynamerrrrrrgetrAr.r)r)rr rrMrjr rrrtype_rrmimetyper{rrirs @r/test_ftpHandlerTests.test_ftps8   'V^^66 ' ! 4 <0 &//2r3U^Z 67 &//8RU^Z 6: &//9b#U^Z 6< &//;CU^Z 6+ "b"cU^R '. &//2r3 K )!O JCt6$((#,CCK 3A   QVVT *   QXXv .   QVVV%9%9$%? @   QVVT *   QVVT *   Q\\22H =   Q\\22E :ffhG   W[[8( C   S)9!:;SY G GGIEOr2c SSKn[RR5n[ 5=o2l[ Rn[[RRU55nSnSU-SU-S[R"S5<U<3/n[R"[R"55nU(aUR!SU<U<35 UGH?n [#US5n U R%U5 U R'5 UR)[+U 55n U R-5n U R/5n U R15nU R'5 [R2"U5nUR4R7UR8S S 9n[R:"U5 UR=X5 UR=U S S 5 UR=U S S5 UR=U SU5 UR=X5 GMB SU-SSS[R"S5<S[R>"5<SU<3S[R>"5<SU<34Hn [#US5n U R%U5 U R'5 URA[RBRDUR([+U 55 [R:"U5 M [RR5n[ 5=o2lSHzun n[+U 5nUR)U5 URGURHU5 UR=URJS5 UR=URJS:HU5 M| g![Ra SnGNf=f!U R'5 f=f!U R'5 f=f![R:"U5 f=f!U R'5 f=f![R:"U5 f=f![RBRDa URMU5 Nf=f)Nrs hello, world zfile://localhost%sr5zfile://rrwbT)usegmtrz text/plainrrz Last-modifiedzfile://localhost:80%szfile:///file_does_not_exist.txtz)file://not-a-local-host.com//dir/file.txtz:80r4z'file://somerandomhost.ontheinternet.com))zfile://ftp.example.com//foo.txtF)z file://ftp.example.com///foo.txtF)zfile://ftp.example.com/foo.txtF)z"file://somehost//foo/something.txtF)z#file://localhost//foo/something.txtFftp)' email.utilsr7r FileHandlerrr<rTESTFNrr#r<r=rr  gethostnamegaierrorr>rwriter file_openr rArrstatutils formatdatest_mtimeremover&getcwdr9rrVassertIsr{typerv)r)r}rMrrrtowriteurls localaddrrjrDrrrirespurlstatsmodifiedrr{s r/ test_fileHandlerTests.test_filesn NN & & (!|#H!!"277??6#:;# 7 * ' !#11+> H  ,,V-?-?-ABI  KKG< =CVT"A "GGG$GGIKK -668DffhGhhjGGGI ;;11%..1N &!   T +   W^4l C   W%56 =   W_5x @   W */4 $g - - 7#)#7#7 #D#%99; 8YY[& " C "&GGG$GGI!!&,,"7"7"#++ws|= &!'* NN & & (!|#HHC#,C 2 C  aeeS)  51   SXX. 4y I GGIGGI &!*GGI  &!*<<(( &  % &s)N30O*O:,0O%A O:> P* PAP*Q3O  O O""O:%O77O::PP''P**Q/Q76Q7c[RR5n[5=o!lSnSGHupE[ X5SS05nSUlURSS5 [5nURXv5nUR UR UR UR URURS:HS4 UR5n U R U R" UR%UR5U5 UR%UR&S 5 UR%UR(S 5 UR%UR*U5 UR%UR,S 5 UR%UR./S Q5 UR%UR0U5 GM S WlUR5[R6R8URUW5 [ SS5nUR5[:UR<U5 S/UlSGHn[ SU5n[ASS0S5nUR=U5n Uc9URCSURD5 URCSURD5 O>UR%URDSS5 UR%URDSS5 UR%URDSS 5 UR%URDSS5 URSS5 URSS5 URSS5 URSS5 UR=U5n UR%URDSS5 UR%URDSS5 UR%URDSS5 UR%URDSS5 GM g)Nr))GETN)POSTsblahFoorSpameggsrr rrr4)) Connectionr)r0rr1r2Tbadpostr4)r2Nrrr0z!application/x-www-form-urlencodedHostrrn)#r7rAbstractHTTPHandlerrr<r rrzrrjrArrrrrr  __contains__r&r rrrrrrr9rrVr do_request_rr assertNotInunredirected_hdrs) r)rMrrjrrr{r:rhdrsnewreqs r/ test_httpHandlerTests.test_httpwsG NN . . 0!|#H#>LF#eU^4CCK  ' ' 7 ?D $$A FFAJJ FFAHH FFAEESL$ &668D HHd''   QXXZ -   TYY 6   TZZ +   T[[& 1   T]]C 0   T--@ A   TYY --?2$(  &,,//D#F+I6 )Q]]C8)) D/6CS$B/A]]3'F|  !133H3HI  1F1FG  !6!67G!H#N  !6!6~!F@B   S226:M J   S226:F C  ' '(8% @  ' ' >  ' ' 6  ' ' 6]]3'F   S223CDe L   S22>BE J   S226:E B   S226:E B1r2c0[RR5n[5=o!l[ R "SSS9nURnUR5 UR[RU5 [US5n[SU05nURU5nURS5nUR!US5 UR#UR%S55 SSS5 [US5n[SUS S 05nURU5nUR!['URS55S 5 UR#UR%S55 SSS5 g!,(df  N=f!,(df  g=f) Nzw+bF)modedeleterbrTransfer-encodingchunkedrContent-Length)r7rr8rr<tempfileNamedTemporaryFiler$rr6r#unlinkrr r:rxr&rvrrrA) r)rMrfile_obj file_pathrDr{r>tes r/test_http_body_file HandlerTests.test_http_body_filesH NN . . 0!|#H..E%HMM   9- )T "a/B7C]]3'F""#67B   R +   V../?@ A #)T "a/5Er4JKC]]3'F   S!2!23C!DEr J   V../BC D # "# "# "s A"E6A+F6 F Fc>[RR5n[5=o!l[ R "5n[SU05nURU5nURURS5S5 URURS55 SS0n[SX65nURU5nUR[URS55S5 URURS55 UR5 g)NrrErFrrGrH)r7rr8rr<rBytesIOr r:r&rxrvrrrAr)r)rMrrLr{r>ris r/test_http_body_fileobj#HandlerTests.test_http_body_fileobjs NN . . 0!|#H::<+Xr:s# **+>?K **+;<=#R(+X?s# V../?@A2F **+>?@r2c T[RR5n[5=o!l[ R SS/n0SS04Hn[R"U[RS9n[SURU5nURU5nU(dCURURS5S5 URURS5S 5 O*UR[URS55S5 SSS5 M g!,(df  M=f) Nz-cpassrGrH)stdoutrrrErF)r7rr8rr<sys executable subprocessPopenPIPEr rWr:r&rxrA)r)rMrcmdriprocr{r>s r/test_http_body_pipe HandlerTests.test_http_body_pipes NN . . 0!|#H~~tW-,b11G!!#joo>$3T[['Js+$$V%6%67G%H$O$$V%6%67J%K%.0$$S):):;K)L%M%')?>2>>s .BD D' c[RR5n[5=o!lSn0SS04Hn[ SU"5U5nUR U5nU(dDURURS5S5 URURS5S5 MqUR[URS55S5 M g)Nc3# Sv g7f)Nsoner\r\r2r/ iterable_body;HandlerTests.test_http_body_iterable..iterable_bodys LsrG rrrErF) r7rr8rr<r r:r&rxrA)r)rMrrcrir{r>s r/test_http_body_iterable$HandlerTests.test_http_body_iterables NN . . 0!|#H ,b11G/'JC]]3'F  !2!23C!DdK  !2!23F!G!*,  V%6%67G%H!I2N2r2c[RR5n[5UlUR [ SS55nURURS5S5 URURS55 g)Nrr\rErFr) r7rr8rr<r:r r&rxrvrr)r)rMr{s r/test_http_body_empty_seq%HandlerTests.test_http_body_empty_seqse NN . . 0<mmG$92>? (;s r/test_http_body_array!HandlerTests.test_http_body_arrays NN . . 0!|#HS3,b11G/IC]]3'F   S!2!23C!DEb I2r2cN[RR[RR SS5 [ 5n[5nURU5 URS5 URURS5 SSS5 g!,(df  g=f)Nrdhttp://www.example.com) r patchrr:rHTTPConnectionr rarWrr& _debuglevelr)rrMs r/#test_http_handler_global_debuglevel0HandlerTests.test_http_handler_global_debuglevel)sl ZZ  t{{99< K A!A MM!  FF+ ,   Q]]A . L K K AB B$c[5n[SS9nURU5 URS5 UR UR S5 g)Nrcru)r rarWrr&rxrys r/"test_http_handler_local_debuglevel/HandlerTests.test_http_handler_local_debuglevel1sA   q ) a '( *r2rz)HTTPSConnection required for HTTPS tests.cN[RR[RR SS5 [ 5n[5nURU5 URS5 URURS5 SSS5 g!,(df  g=f)Nrdhttps://www.example.com) r rvrr:rrr rrWrr&rxrys r/$test_https_handler_global_debuglevel1HandlerTests.test_https_handler_global_debuglevel8sl ZZ  t{{::L! L A "A MM!  FF, -   Q]]A . M L Lr|c[5n[SS9nURU5 URS5 UR UR S5 g)Nrmrcr)r rrWrr&rxrys r/#test_https_handler_local_debuglevel0HandlerTests.test_https_handler_local_debuglevelAsA    * a () *r2cv[RR5n[5UlSn/SQnUHn[ XB5nUR U5nURURSS5 URSS5 UR U5nURURSS5 M g)Nr2)z#http://example.com/foo/bar/baz.htmlz$http://example.com//foo/bar/baz.htmlz$http://example.com/foo//bar/baz.htmlz$http://example.com/foo/bar//baz.htmlr7rzsomeproxy:3128) r7rr8rr<r r:r&r< set_proxy)r)rMrds_urlsds_urlds_req np_ds_reqp_ds_reqs r/test_http_doubleslash"HandlerTests.test_http_doubleslashIs NN . . 0<FV*F f-I   Y88@- P   -t 4}}V,H   X77? Or2cn/SQn[S5nUHnX2l[U5nURUR 5U5 URUR =(d SUR 5 UR[UR 55R UR 5 M g)N)zhttp://example.com?foo=bar#bazz)http://example.com?foo=bar&spam=eggs#bashrerer)r full_urlrr&rfragmentquery)r)r&rrjparseds r/test_full_url_setter!HandlerTests.test_full_url_setterds  ( )CJc]F   Q^^-s 3   QZZ-2v ?   Xann&67==v|| Lr2c[S5nU?URUR5 URUR5 UR UR S5 g)Nrur)r rrwrr&r)r)rs r/test_full_url_deleter"HandlerTests.test_full_url_deleter{sJ , - J !**% !**% R(r2c[RR5n[5UlSn[ U5nUR U5nURURS5 URURS5 Sn[ U5nUR U5nURURS5 URURS5 g)Nzhttp://www.python.org?getspamwww.python.orgz /?getspamhttp://www.python.orgr) r7rr8rr<r r:r&r r)r)rM weird_urlr{r>url_without_paths r/test_fixpath_in_weirdurls&HandlerTests.test_fixpath_in_weirdurlss NN . . 0<3 i s# &67 +62&'s# &67 "-r2c[RR5n[5=o!lSn[ U5n[ SS0SU5nURXE5nURXV5 URUS5 [ SS0SU5nURXE5nURXV5 URUS5 [ SS 0SU5nURXE5nURXV5 URUS5 [ S S 0SU5nURURXE55 URURS 5 URURXES S 045 g) Nrrr rrAcceptedzPartial contentrsz Bad gatewayr:)r7rHTTPErrorProcessorrr<r rrr#assertNotHasAttrrwr&rr)r)rMrrjr{rnewrs r/ test_errorsHandlerTests.test_errorss= NN - - /!|#H#cl dBC 0s& a a) j"b# 6s& a a) /R =s& a a) mRS 9 !//#12 &) ##}b!ABr2cZ[5n[RRU5n[ 5Ul[ S5n[SS0S5nURU5nURURU5 URURU5 URURS5 URUR5 URX45nURUR U5 URUR"U5 URXF5 g)Nrrr rr)rr7rHTTPCookieProcessorrr<r rrr#rr&origin_req_hostrv unverifiablerrr)r)cjrMr{rr>rs r/ test_cookiesHandlerTests.test_cookiess _ NN . .r 2<+, dB +$ bjj#& bjj&) ,,m< ))*s& bii% bggq! ar2c SnSn[RR5n[5=oClSGHnSGHn[ USU-5n[ X5n[RUl URSS5 Ub$URS[[U555 URS S 5 U"U[5US [S U055 UR+UR,R/5U5 UR+UR,R15S5 UR,R8V s/sHoR;5PM n n UR=SU 5 UR=SU 5 UR+UR,R8SS5 UR=S UR,R85 UR=S UR,R>5 GM GM [ U5n[RUl U4Sjn [ USS9nSn [RUl U "X8S5 U S-n M![R R"a>n UR%US 5 UR'U5 U R)5 Sn A GNSn A ff=f![2a) UR5UR,R65 GNf=fs sn f![R R"aNn UR+U [RRR@5 U R)5 Sn A OSn A ff=f[ USS9nSn [RUl U "X8SU -5 U S-n M![R R"aNn UR+U [RRRB5 U R)5 Sn A gSn A ff=f)Nhttp://example.com/a.htmlhttp://example.com/b.html)i-rr34)Nz blah blah z http_error_%sNonsensezviking=withholdrGr1rBlahlocation)rrr.zcontent-lengthz content-typec TURU[5SS[SU055 g)Nrrr)rrr)rMr{rjs r/r,HandlerTests.test_redirect..redirects'  S(*c6(*c):; =r2r)rrr9rzhttp://example.com/%d)"r7rHTTPRedirectHandlerrr<getattrr rrrrtrXr.rzrrr HTTPErrorrWassertIsNotNonerr&r{r get_methodAttributeErrorrvrrilowerr;r< max_repeatsmax_redirections)r)from_urlto_urlrMrrrrr{rYxrirrs r/ test_redirectHandlerTests.test_redirectsG., NN . . 0!|#H,D, Od$:;h-$<< z+<=#NN#3ST^D++FF; 3 D&& F';<>  !3!3!5v>1$$QUU%5%5%7? /0eemm44  !67 K||-- MM$ 3((.IIKK  &1$$QUUZZ01 =6||%%    UFNN$F$F$R$R S IIKK  h >44  !85!@A ||%%    U#^^??PP R IIKK sb:I*J<K2 K7J9;3J44J99K""6<<#9#9:b  S*=[ 9:<; LL   &$F7I  S(*c=Z34 6   QUU//19 = $ ;:s )E E c SnSn[RR5n[5=oCl[ U5n[ RUl[RRX5nURU[5SS[SU055 URURR!5U5 g)Nrz/b.htmlrrr)r7rrrr<r rrrrurljoinrrrr&r{r)r)r relative_urlrMrr{rs r/test_relative_redirect#HandlerTests.test_relative_redirect$s. NN . . 0!|#Hh44 LL((?  hj#} Y/ 0 2 ++-y9r2cSSKJn SSKJn U"5nU"USS5 [ SS5n[ R R5n[ R R5n[ R RU5n[XEXg5nURS5 URURRS55 g) Nr) CookieJar)interact_netscapezhttp://www.example.com/z spam=eggsrz%Location: http://www.cracker.com/ Cookie)http.cookiejarrtest.test_http_cookiejarrrrr7rHTTPDefaultErrorHandlerrrr_rrvr{rr) r)rrrhhhdehhrhcprs r/test_cookie_redirect!HandlerTests.test_cookie_redirect1s,> ["7E $S*U V~~557nn002 ^^ / / 3 b 0 () **845r2c4Sn[SSU-5n[RR5n[RR 5n[ X#U5nUR S5nURUR5UR55 g)Nz(http://www.example.com/index.html#OK rz Location: ru) rrr7rrrr_rr&rstrip)r)redirected_urlrrrrrs r/test_redirect_fragment#HandlerTests.test_redirect_fragment@svG $S,*G H~~557nn002 b , VV, - n&:&:&<=r2c^^^TR[RR5 [R R mSn[R"U5[R lTR[[R ST5 [S5mUUU4SjnU[R R l[RRS5nTRUR5S5 g)Ns(HTTP/1.1 302 Found Location: ?query rw)z/pathz /path?queryc>TRU[T55 TR"XU/UQ70UD6 SURlg)NsHTTP/1.1 200 OK Hello!)r&nextrr0fakedata)connrrjposkw real_classr)r&s r/r3HandlerTests.test_redirect_no_path..requestTs=   S$t* -   tS =3 =" =&FDNN #r2zhttp://python.org/pathzhttp://python.org/path?query)r6r7rr8r:rrwrfakehttpr/iterr;r&r)r) response1rrrr&s` @@r/test_redirect_no_path"HandlerTests.test_redirect_no_pathIs 112[[// E %0%9%9)%D " .> K,- G .5 ""* ^^ # #$< = &DEr2c"SS[RR5nU"5n[RRU5nSnUHupVUR [ U55 [ R"SU-S-5UlURS5nSU-S-nURn URX5 SSS5 M g!,(df  M=f) Nc\rSrSrSrSrg)4HandlerTests.test_redirect_encoding..Handleri`cURURU5nURRUl[R "S5UlU$)Ns)HTTP/1.1 200 OK Content-Length: 3 123)rj connectionbuflast_bufrr)r)r{results r/rl>HandlerTests.test_redirect_encoding..Handler.http_openasEdoos; $ 3 3 "-"6"6#  r2)rrN)r]r'r^r_rlr`r\r2r/Handlerr`s r2r))s /på-dansk/s/p%C3%A5-dansk/)/spaced%20path/r )s /spaced path/r )s /?på-dansks/?p%C3%A5-dansks!HTTP/1.1 302 Redirect Location: s rsGET  ) r7r HTTPHandler build_openersubTestreprrrrrrassertStartsWith) r)rrrXrOrrrrrs r/test_redirect_encoding#HandlerTests.test_redirect_encoding]s fnn00 ),,W5  #( Xd8n-%0%9%9"$,-0&" ";;'<="V+d2!**%%g8.-#(--s -AC C! cSnSn[RR5n[USS9n[ 5nUR XESS0U5nUR UR5S5 g)NrrHEADrrFound)r7rrr rrr&r)r)rrrMr{rnew_reqs r/test_redirect_head_request'HandlerTests.test_redirect_head_requestsb., NN . . 0hv. Z$$Sc7BG ++-v6r2c Sn[US9[US94Hn[5n[RR U5nUR U5 S//n[ X55n[S5nURURS5 URU5 URURU5 URUSS4/URVs/sHoSS PM sn5 M gs snf) Nproxy.example.com:3128r:)HTTP)rlr6zhttp://acme.example.com/zacme.example.comrrlr-) dictr r7r ProxyHandlerrWr\r r&r rr=) r)r+rrphrYrZr{tups r/ test_proxyHandlerTests.test_proxys $1t|+A A,,Q/B MM" 12I1>H45C   SXX'9 : FF3K   SXXq )   x{K8923'':'3!Ah': <,;sC/ c(UR[R"55nSUS'[5n[R R [SS95nURU5 [S5nURURS5 URU5 URURS5 [S5nURURS5 URU5 URURS5 g) Nz python.orgno_proxyproxy.example.comrzhttp://www.perl.org/ www.perl.orgrr enterContextrEnvironmentVarGuardr r7rrrrWr r&r rr)envrrr{s r/test_proxy_no_proxy HandlerTests.test_proxy_no_proxys = = ?@&J   ^^ ( (3F)G H b,- >2 s  #67-. #34 s  #34r2cUR[R"55nSUS'[5n[R R [SS95nURU5 [S5nURURS5 URU5 URURS5 g)N*r$r%rrrr'r*s r/test_proxy_no_proxy_all$HandlerTests.test_proxy_no_proxy_alls = = ?@J   ^^ ( (3F)G H b-. #34 s  #34r2c [5n[RR[ SS95nUR U5 S//n[ X5n[S5nURURS5 URU5 URURS5 URUSS4/URVs/sHofSSPM sn5 gs snf) Nrr)rr6https://www.example.com/www.example.comrrr-) r r7rrrrWr\r r&r rr=)r)rrrYrZr{r s r/test_proxy_httpsHandlerTests.test_proxy_httpss   ^^ ( (4L)M N b . / -Q:01 #45 s  #;< 8A; 56./gg6gsa(g6 86sC c[5n[RR[ SS95nUR U5 [ 5nUR U5 [S5nURSS5 URSS5 URURS5 URUR5 URU5 URS URR 5 UR#S URR 5 UR%UR5 URURS5 URUR'S 5S5 g) Nrr3r4Proxy-AuthorizationFooBar User-AgentGrailr5)r9r:)r;r<Proxy-authorization)r r7rrrrWrr rtr&r rwrrr;rfrrWrrx)r)rr https_handlerr{s r/$test_proxy_https_proxy_authorization1HandlerTests.test_proxy_https_proxy_authorizations#   ^^ ( (4L)M N b(*  m$01 ,h7 |W- #45 #**+ s  :&//;; = -#,,88 : S--. #;< (=>Ir2rzonly relevant for Windowsc`Sn[nSHnURU"X15SU-5 M SHnURU"X15SU-5 M SnURU"SU5SW-5 URU"SU5SU-5 S HnURU"X15S U-5 M g) Nz*www.example.com;*.example.net; 192.168.0.1)r5zwww.example.netz 192.168.0.1z expected bypass of %s to be true)rzwww.example.org example.netz 192.168.0.2!expected bypass of %s to be Falsezexample.com; rrB)testrz.expect to bypass intranet address '%s')rrqrv)r)proxy_override proxy_bypassr s r/test_winreg_proxy_bypass%HandlerTests.test_winreg_proxy_bypasssE4 ID OOL>>E GJ$D   \$?@4G I$ 0  ]NC:TA C m^DL"# $*r2darwinzonly relevant for OSXc|S/SQS.nSH!nUR[X!5SU-5 M# SH!nUR[X!5SU-5 M# S/S.nUR[S U55 SS S /S.nS nUR[X!5SU-5 S nUR[X!5SU-5 g)NF)foo.barz *.bar.com 127.0.0.1z10.10z10.0/16)exclude_simple exceptions)rKz www.bar.comrLz 10.10.0.1z10.0.0.1z expected bypass of %s to be True)z abc.foo.barzbar.comz 127.0.0.2z 10.11.0.1 notinbypassrCTrDz 10.0.0.0/40z172.19.10.0/24z 172.19.10.5z10.0.1.5)rqrrv)r)bypassr s r/test_osx_proxy_bypass"HandlerTests.test_osx_proxy_bypasss$&  !D OO8F>E G! D   9$G@4G I %); 4VVDE$)+;=  4TB:TA C 5dC;dB Dr2c lURX!S9 [5n[5n[RR U5nSR U5S-n[SU5nURU5 URU5 URX5SX'USS5 SSS5 g!,(df  g=f)N)rriz r|r!http://acme.example.com/protected) r r rr7rr joinrrrW_test_basic_auth)r)rirrXpassword_manager auth_handlerr http_handlers r/check_basic_authHandlerTests.check_basic_auths \\\ 7#%F24 !>>>>?OPL;;w'*4D23=L   | ,   | ,  ! !&"'7G"E"E G8 7 7s B B%% B3c SnSnSUS3nSUS3nSnSUS3nSUS3SUS3SUS 3US U3US U3US U3US U3US U34HnS U3/nURX5 M [R"S [45 S U3/nURX5 SSS5 X4/X6/Xc/4H)n U V s/sHn S U 3PM nn URX5 M+ g!,(df  ND=fs sn f)Nzrealm2@example.comz Basic realm=""zOtherscheme xxxzDigest realm="zn", qop="auth, auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"z Basic realm=''z", charset="UTF-8"z, zWWW-Authenticate: zBasic Auth Realm was unquotedzWWW-Authenticate: Basic realm=)r[rcheck_warnings UserWarning) r)rrealm2basicbasic2other_no_realmdigest realm_strri challenges challenges r/test_basic_authHandlerTests.test_basic_auth%s$%wa( **"6(+>? E7! $E7! $E7"4 5gRx gR' (b (gRx hb  I,I;78G  ! !' 1! & + +-L%0-237w?@G  ! !' 13    O J )34(29,I;7(2 4  ! !' 1 334sC1C) C&c j[5n[RR[ SS95nUR U5 [ 5n[RRU5nSn[SSU-5nUR U5 UR U5 URXSXVUSS5 g)Nrr ACME Networksiz(Proxy-Authenticate: Basic realm="%s" r=z&http://acme.example.com:3128/protected) r r7rrrrWrProxyBasicAuthHandlerrrrW)r)rXrrXrYrrZs r/test_proxy_basic_auth"HandlerTests.test_proxy_basic_authRs! ^^ ( (3K)L M2.0~~;;.RecordingOpenerDirectorilc>[R"U5 /Ulgr)r rrecordedrs r/rZHandlerTests.test_basic_and_digest_auth_handlers..RecordingOpenerDirector.__init__ms''- " r2c:URRU5 gr)rur>)r)rs r/recordXHandlerTests.test_basic_and_digest_auth_handlers..RecordingOpenerDirector.recordqs $$T*r2)ruN)r]r'r^r_rrxr`r\r2r/RecordingOpenerDirectorrsls  # +r2rzc\rSrSrSrSrg)OHandlerTests.test_basic_and_digest_auth_handlers..TestDigestAuthHandleritcURRS5 [RRR "U/UQ70UD6 g)Nrf)r<rxr7rHTTPDigestAuthHandlerhttp_error_401r)rrCs r/r^HandlerTests.test_basic_and_digest_auth_handlers..TestDigestAuthHandler.http_error_401usA ""8,44CCDL>BLFJLr2r\Nr]r'r^r_rr`r\r2r/TestDigestAuthHandlerr|ts Lr2rc\rSrSrSrSrg)NHandlerTests.test_basic_and_digest_auth_handlers..TestBasicAuthHandlerizcURRS5 [RRR "U/UQ70UD6 g)Nrc)r<rxr7rr rrs r/r]HandlerTests.test_basic_and_digest_auth_handlers..TestBasicAuthHandler.http_error_401{sA ""7+33BB4K=AKEIKr2r\Nrr\r2r/TestBasicAuthHandlerrzs Kr2rrmrT&WWW-Authenticate: Basic realm="%s" rrUrfrcr-) r r7rr~r rrrrWrWr&ru) r)rzrrrXrXdigest_handler basic_handlerrrZs r/#test_basic_and_digest_auth_handlers0HandlerTests.test_basic_and_digest_auth_handlerscs +n + LFNN$H$H L  K6>>#F#F K )*.0./?@,-=> . =EG =)>*<( f_#3CAA  8W*=a*?@r2c[5n[RRS5n[ SS5nUR U5 UR U5 UR [URS5 g)NrTzWWW-Authenticate: Kerberos ru) r r7rr~rrrWr9r:r)r)rXdigest_auth_handlerrZs r/$test_unsupported_auth_digest_handler1HandlerTests.test_unsupported_auth_digest_handlersc!$nnBB4H. 57 ./<( *fkk3KLr2c[5n[RRS5n[ SS5nUR U5 UR U5 UR [URS5 g)NrTzWWW-Authenticate: NTLM ru) r r7rr rrrWr9r:r)r)rXbasic_auth_handlerrZs r/#test_unsupported_auth_basic_handler0HandlerTests.test_unsupported_auth_basic_handlersc!#^^@@F. 13 -.<( *fkk3KLr2c SSKn SupURXGX5 URXFR5 URXvR5 URXR 5 URXR 5 URU5 URURU5 URURU5 UR[UR5S5 URURSRU55 [U <SU <3S5n SU RU 5R!5R#5-n URURSR%U5U 5 URURSR&UU 5 S=UlUlUR)5 URU5 UR[UR5S5 URURSRU55 g)Nrwilecoyoter-:asciizBasic r9)base64rr&rrjrrrrrr.ryrvrrbytes encodebytesrdecoderxr<ru)r)rXrY auth_headerrrZrX request_url protected_urlrrruserpassauth_hdr_values r/rWHandlerTests._test_basic_auths ) !!%dE  6 67 &:&:; 445 #<#<= K  )66> )44mD \223Q7 ..q1<<[IJD(3W="   x ( . . 0 7 7 9: ..q1<<[I' ) ..q1CCKP' )=A@ 0 9 K  \223Q7 ..q1<<[IJr2cSupSn[S5n[5n[U5nURSX1USS9 UR UR U55 UR UR US-55 UR UR US-55 [5nURU5 URU5 URU5 UR UR5 g)NrrUrT)is_authenticatedz/nestedplain) rr r rrqrrvr rWrr)r)rrrrZ pwd_managerauth_prior_handlerrXs r/test_basic_prior_auth_auto_send,HandlerTests.test_basic_prior_auth_auto_sends*9 /4 24 1+>'' +X ( F  44[AB  44[95LMN 55kG6KLM!-.<( K   445r2c~SupSnSn[5n[U5nURXCX5 URU5nUR U5 [ 5nUR U5 [SSS-5n UR U 5 URU5 URU5nURU5 [S5n UR U R5 [ 5nUR U5 UR U 5 URU5 URU R5 g)NrrUACMErTrr) r r rrrvr rWrrrrqrr) r)rrrrrris_authrXrZs r/.test_basic_prior_auth_send_after_first_success;HandlerTests.test_basic_prior_auth_send_after_first_successs*9 24 1+>''DK..{; !!-.. =DF <( K ..{;  /4  556!-.<(  K   445r2cSHupSRU5n[R"UR5U-5n[R R 5n[S5nSUlURXF5nUR5 SSS5 URURRSRU55 M g!,(df  NH=f)z=Test the connection is cleaned up when the response is closed))zConnection: closedata)zTransfer-Encoding: chunkeds4 data 0 )zContent-Length: 4rzHTTP/1.1 200 OK {} http://dummy/NzConnection not closed with {!r})formatrrencoder7rr8r rrjrArqfakesockclosed)r)transferrheaderrrr{resps r/test_http_closedHandlerTests.test_http_closeds! X 5;;HEF'' $(>?Dnn88:G/*CCK+t , OODMM00188B D! ,+s C C" c[R"S5n[RR 5n[ S5nSUlUR[RR5 URX5 SSS5 URURRS5 g!,(df  N5=f)z;Test the connection is cleaned up after an invalid responser2rNzConnection not closed)rrr7rr8r rr9r:r BadStatusLinerjrqrr)r)rrr{s r/test_invalid_closed HandlerTests.test_invalid_closed"s##C(..446o&   t{{88 9 OOD &:  ,,.EF: 9s 0B11 B?r\N)0 : 6>F(!9F7<$ 5 58 .?@BmnJoJ.D*EF$G$.13JKDLDB G+2Z "0AdMM#KJ66&6PD"Gr2rc8\rSrSrSrSrSrSrSrSr Sr g ) MiscTestsi-cb^UR[U4SjUR555 g)Nc3B># UHnURT:Hv M g7frrp).0rM handler_classs r/ /MiscTests.opener_has_handler..0s!6%4KK=8%4s)rqanyrZ)r)rXrs `r/opener_has_handlerMiscTests.opener_has_handler/s' 6%+__66 7r2c"SS[RR5n"SS[RR5n"SS[RR5n[RRnU"X#5nUR XR5 UR XS5 U"X#"55nUR XR5 UR XS5 U"U5nUR XQ5 U"5nUR U[RR5 U"[RR5nUR U[RR5 U"[RR55nUR U[RR5 "SS[RR5nU"X5nUR XQ5 UR XV5 g) Nc\rSrSrSrg)2MiscTests.test_build_opener..MyHTTPHandleri4r\NrTr\r2r/ MyHTTPHandlerr4rVr2rc\rSrSrSrSrg)/MiscTests.test_build_opener..FooHandleri7cgrr\rs r/foo_open8MiscTests.test_build_opener..FooHandler.foo_open8rr2r\N)r]r'r^r_rr`r\r2r/ FooHandlerr7 r2rc\rSrSrSrSrg)/MiscTests.test_build_opener..BarHandleri;cgrr\rs r/bar_open8MiscTests.test_build_opener..BarHandler.bar_open<rr2r\N)r]r'r^r_rr`r\r2r/ BarHandlerr;rr2rc\rSrSrSrg)7MiscTests.test_build_opener..MyOtherHTTPHandleriXr\NrTr\r2r/MyOtherHTTPHandlerrXrVr2r)r7rr  BaseHandlerr r)r)rrrr rrs r/test_build_openerMiscTests.test_build_opener3s FNN66  33  33 ~~22  0 . . Z\ 2 . .  ' 1 N 6>>#=#=> 33 4 6>>#=#=> 335 6 6>>#=#=> !;!;   ; 1 6r2cSnS=n=p4Sn[RRX#XU5nURUS5 UR UR S5 URUS5 UR UR S5 SUR<SUR<3nUR [U5U5 SUR<SUR<S 3nUR [U5U5 UR5 g) z} Issue 13211 reveals that HTTPError didn't implement the URLError interface even though HTTPError is a subclass of URLError. zsomething bad happenedNzContent-Length: 42rUriz HTTP Error z: z ) r7rr assertHasAttrr&rUrirrrXrr)r)rrjrrr=rYexpected_errmsgs r/test_HTTPError_interface"MiscTests.test_HTTPError_interface_s 'd#ll$$S2> 3) %=> 3 * &:;14377C S?325((CGGD cO4 r2c[RRSSSSS5nUR[ USS5S5 UR UR R5[5 UR5 g)NrjizMETHOD NOT ALLOWED __notes__r\) r7rrr&rrrrArr)r)rs r/ test_gh_98778MiscTests.test_gh_98778rs[ LL " "5#/CT4 P K4b9 addiik51  r2c/SQnUH up#UR[U5U5 M" UR[[S54 g)N)r%)NNNr%r)NNNrrr)zjoe:password@proxy.example.com)Nrrr%)z#joe:password@proxy.example.com:3128)Nrrr)zhttp://proxy.example.com/)r:NNr%)zhttp://proxy.example.com:3128/)r:NNr)z&http://joe:password@proxy.example.com/r:rrr%)z*http://joe:password@proxy.example.com:3128)r:rrr)z1ftp://joe:password@proxy.example.com/rubbish:3128)rrrr%)z%http://joe:password@proxy.example.comr)z&http://user/name:password@localhost:22)r: user/namer localhost:22)z&http://username:pass/word@localhost:22)r:username pass/wordr)z'http://user/name:pass/word@localhost:22)r:rrrzfile:/ftp.example.com)r&rr9r:)r)parse_proxy_test_casestcrs r/test_parse_proxyMiscTests.test_parse_proxyxsF$" N3LB   \"-x 83 *l4KLMr2c[5nUR[5nURS5 SSS5 UR [ WR 5S5 g!,(df  N4=f)Ninvalidz5Unsupported digest authentication algorithm 'invalid')rr9r:get_algorithm_implsr&rXr)r)rexcs r/test_unsupported_algorithm$MiscTests.test_unsupported_algorithmsS+-   z *c  ' ' 2+    C + *s A  A.r\N) r]r'r^r_rrrrrrr`r\r2r/rr-s#7*7X& +NZ r2rc~\rSrSr"SS\5rSrSrSrSr Sr S r S r S r S rS rSrSrSrSrSrg) RequestTestsic\rSrSrSrSrg)RequestTests.PutRequestiPUTr\N)r]r'r^r_rr`r\r2r/ PutRequestrsr2rc[S5Ul[SSSS0S9Ul[SSS9UlUR S5UlUR SSS9Ulg) Nhttp://www.python.org/~jeremy/rzX-TestrDrhrrr/)r r postheadrput force_postrs r/setUpRequestTests.setUpsf;<<"%-v$68 r2cbURURR5 URSURR 55 SURlUR URR5 URSURR 55 g)Nr.rr/)rvr rr&rrqrs r/ test_dataRequestTests.test_datasq '  3 3 56   & !4!4!67r2cHURSURR5 URRSS5 UR SURRS5 SURlURSURR5 g)Nr*r)r;r r<rzr&rrs r/.test_setting_data_should_remove_content_length;RequestTests.test_setting_data_should_remove_content_lengthsx )488+E+EF (()92> TXX778HIJ  )488+E+EFr2c`URSURR5 SURlURR SS5 UR SURRS5 UR?URSURR5 g)Nrrrl)r;r r<rrzr&rs r//test_deleting_data_should_remove_content_length62 **,- )488+C+CD 7r2cR[S5nURSUR5 g)Nzrr+rks r/test_wrapped_urlRequestTests.test_wrapped_urls"34 )3884r2c[S5nURSUR5 [S5nURSUR5 Sn[U5nURUR5U5 g)N-http://www.python.org/?qs=query#fragment=truez /?qs=queryzhttp://www.python.org/#fun=truer4.http://docs.python.org/library/urllib2.html#OK)r r&rr)r)r{rjs r/test_url_fragmentRequestTests.test_url_fragmentsiEF s||478 cll+?cl ))+S1r2c/SQnUH8n[U5nURUR5UR5 M: g)N)zhttp://docs.python.orgr6r5)r r&rr)r)r&rjr{s r/test_url_fullurl_get_full_url*RequestTests.test_url_fullurl_get_full_urls<AC#,C   S--/ >r2)rr r r r N)r]r'r^r_r rrrrrrrr"r%r(r,r!r2r7r:r`r\r2r/rrsVW?8GG2, 0:585 2?r2r__main__)ErrDr test.supportrrrtest.support.testcaserrr r#rrrorXrIrZurllib.requestr7r r r r rrrr urllib.parserr http.clientr:requires_working_socketTestCaserrbrrrrrrrrIOBaserrr&r\r_rr rarrrrMr HTTPSHandlerrrrrrrrrr]mainr\r2r/rGs",(1 777 "t,1,8$$1,hx'x((x'v,,  #$# 2;; 33??ryy$* * Z3838lD0fnn000Hfnn88H8 4;;)** 46>>66 4Qv~~99Q& ( (NA(++NAbRG8$$oRGj" !!? D^?8$$^?B z MMOr2