PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/python2.7/site-packages/cloudinit/
Upload File :
Current File : //lib/python2.7/site-packages/cloudinit/url_helper.pyo
�
�jbc@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZddlmZmZmZddlmZdd	lmZeje�ZejrddlZejZnddlZej jZe!Z"e!Z#dZ%d
Z&y�ddl'm(Z(ddl)Z)e)j*d�Z+e(e+j�Z%e%e(d
�kr�e,Z"ne(d�e%ko�e(d�knr�e,Z#nWne-k
r�nXd�Z.d�Z/d�Z0de1fd��YZ2de2fd��YZ3de1fd��YZ4de5fd��YZ6d�Z7dddddddde,e,dde!e,dd�Z8dddddddddd�	Z9d e1fd!��YZ:dd"�Z;d#�Z<dS($i����N(t	parsedate(tENOENT(tpartial(tcount(t
exceptions(turlparset
urlunparsetquote(tlog(tversiontREDACTED(tLooseVersiontrequestss0.8.8s0.7.0s1.0.0cCsRtt|dd��}|drH|drH|d|d<d|d<nt|�S(Ntschemethttpiit(tlistRR(turlt
parsed_url((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt	_cleanurl;s

cGs3d�}|}x|D]}|||�}qW|S(NcSsott|��}|d}|r?|jd�r?|d7}n|tt|�dd�7}||d<t|�S(Nit/tsafes/:(RRtendswithturlquotetstrR(Rtadd_ont
url_parsedtpath((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytcombine_singleGs


((tbasetadd_onsRRR((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytcombine_urlEs
		
c	Ks|j�}|jd�r(d|}n|j�jd�r�|jd�r_tjd|�n|td�}y(t|d��}|j�}WdQXWnUt	k
r�}|j
}|j
tkr�t}nt
d|d	|d
dd|��nXt|d|�St||�SdS(
s0Wrapper function around readurl to allow passing a file path as url.

    When url is not a local file path, passthrough any kwargs to readurl.

    In the case of parameter passthrough to readurl, default values for some
    parameters. See: call-signature of readurl in this module for param docs.
    Rs	file://%ssfile://tdatas'Unable to post data to file resource %strbNtcausetcodetheadersRtcontents(tlstript
startswithtlowertgettLOGtwarningtlentopentreadtIOErrorterrnoRt	NOT_FOUNDtUrlErrortNonetFileResponsetreadurl(Rtkwargst	file_pathtfpR%teR#((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytread_file_or_urlVs"
		%tStringResponsecBs&eZdd�Zd�Zd�ZRS(i�cCs(||_i|_||_d|_dS(N(R#R$R%R3R(tselfR%R#((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt__init__vs			cOs|jdkrtStS(Ni�(R#tFalsetTrue(R<targsR6((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytok|scCs|jjd�S(Nsutf-8(R%tdecode(R<((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt__str__�s(t__name__t
__module__R=RARC(((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR;us	R4cBseZdd�ZRS(i�cCs#tj||d|�||_dS(NR#(R;R=R(R<RR%R#((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR=�s(RDRER=(((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR4�stUrlResponsecBsbeZd�Zed��Zed��Zed�Zed��Zed��Z	d�Z
RS(cCs
||_dS(N(t	_response(R<tresponse((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR=�scCs
|jjS(N(RGtcontent(R<((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR%�scCs
|jjS(N(RGR(R<((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR�scCs@d}|rd}nd|jko/|knr8tStSdS(Ni,i�i�(R#R?R>(R<tredirects_oktupper((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyRA�s	cCs
|jjS(N(RGR$(R<((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR$�scCs
|jjS(N(RGtstatus_code(R<((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR#�scCs
|jjS(N(RGttext(R<((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyRC�s(RDRER=tpropertyR%RR>RAR$R#RC(((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyRF�s		R2cBseZdddd�ZRS(cCsYtj|t|��||_||_||_|jdkrLi|_n||_dS(N(R/R=RR"R#R$R3R(R<R"R#R$R((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR=�s			N(RDRER3R=(((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR2�scCs�i}t|�j}|dkr�|r�ts@tjdt�q�d|krg|drg|d|d<n
t|d<d|kr�d|kr�|d|dg|d<q�d|kr�t|d�|d<q�n|S(NthttpssGSSL is not supported in requests v%s, cert. verification can not occur!tca_certstverifyt	cert_filetkey_filetcert(RR
tSSL_ENABLEDR*R+t_REQ_VERR?R(Rtssl_detailstssl_argsR
((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt
_get_ssl_args�s	

iicsJt|�}i|d6}|jt||��|
|d<|sT|rKdnd}n||d<|dk	r�tt|�d�|d<n|dkr�g}ntr�itd6}||d	<nd
}|r�tt|�d
d
�}nidt	j
�d6}�r|j��n|�|s4�fd
�}|}n|rG||d<n|dkr\d}ng}x�|
rtt�ntd|�D]�}||�|d<i}x�|j
�D]�\}}|dkr�q�n|dkr@|r@g|D]}|j|�r�|^q�}|rJtj|�||<x|D]}t|||<q"WqJq�|||<q�Wy�|rtjd||
rodn|||�n|dkr�tj�}n|�}|j|�}WdQX|	r�|j�ntjd||jt|j�|d
�t|�SWq�tjk
r.}t|tj�r{t |d�r{t |j!d�r{|j"t#|d|j!jd|j!j$d|��n5|j"t#|d|��t%r�t|tj&�r�Pn|r�||j�|d�r�Pn|
r�|dks|d
|kr/|dkr/|rtjd|�nt'j(|�q/q�Xq�W|rF|d�ndS(s�Wrapper around requests.Session to read the url and retry if necessary

    :param url: Mandatory url to request.
    :param data: Optional form data to post the URL. Will set request_method
        to 'POST' if present.
    :param timeout: Timeout in seconds to wait for a response
    :param retries: Number of times to retry on exception if exception_cb is
        None or exception_cb returns True for the exception caught. Default is
        to fail with 0 retries on exception.
    :param sec_between: Default 1: amount of seconds passed to time.sleep
        between retries. None or -1 means don't sleep.
    :param headers: Optional dict of headers to send during request
    :param headers_cb: Optional callable returning a dict of values to send as
        headers during request
    :param headers_redact: Optional list of header names to redact from the log
    :param ssl_details: Optional dict providing key_file, ca_certs, and
        cert_file keys for use on in ssl connections.
    :param check_status: Optional boolean set True to raise when HTTPError
        occurs. Default: True.
    :param allow_redirects: Optional boolean passed straight to Session.request
        as 'allow_redirects'. Default: True.
    :param exception_cb: Optional callable which accepts the params
        msg and exception and returns a boolean True if retries are permitted.
    :param session: Optional exiting requests.Session instance to reuse.
    :param infinite: Bool, set True to retry indefinitely. Default: False.
    :param log_req_resp: Set False to turn off verbose debug messages.
    :param request_method: String passed as 'method' to Session.request.
        Typically GET, or POST. Default: POST if data is provided, GET
        otherwise.
    Rtallow_redirectstPOSTtGETtmethodittimeoutt
store_cookiestconfigis
Cloud-Init/%ss
User-Agentcs�S(N((R(R$(s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt_cbsR i����R$s'[%s/%s] open '%s' with %s configurationtinfiniteNs(Read from %s (%s, %sb) after %s attemptsRHRLR#s1Please wait %s seconds while we wait to try again()RtupdateRYR3tmaxtfloattCONFIG_ENABLEDR>tintR	tversion_stringRtrangetitemsR)tcopytdeepcopyR
R*tdebugRtSessiontrequesttraise_for_statusRLR,RIRFRtRequestExceptiont
isinstancet	HTTPErrorthasattrRHtappendR2R$RUtSSLErrorttimetsleep(RR R^tretriestsec_betweenR$t
headers_cbtheaders_redactRWtcheck_statusRZtexception_cbtsessionRbtlog_req_resptrequest_methodtreq_argst
req_configtmanual_triestdef_headersRatexcpstitfiltered_req_argstktvtmatched_headerstkeytsesstrR9((R$s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR5�s�#


	

	
	%(

	

 

c
Cs�tj�}
dd�}|dkr-|}nd�}d}
d}x�tr�|dk	ri|||
�}nt|
d�d}x|D]}tj�}|
dkr�|||
�r�Pn|dk	r�|r�|||
|kr�t|
||�}q�nd}d}y�|dk	r||�}ni}t|d|d|d	|d
td|	�}|js�d|j}tt	|�d
|jd|j
d|�}nS|j�s�d|j}tt	|�d
|jd|j
d|�}n
||jfSWnEtk
r}d|}|}n#tk
r-}d|}|}nXttj�|
�}|rTd|nd}d||||f}||�|r�|d|d|�q�q�W|||
�r�Pn|
d}
t
jd|�tj|�qEWtdfS(sI
    urls:      a list of urls to try
    max_wait:  roughly the maximum time to wait before giving up
               The max time is *actually* len(urls)*timeout as each url will
               be tried once and given the timeout provided.
               a number <= 0 will always result in only one try
    timeout:   the timeout provided to urlopen
    status_cb: call method with string message when a url is not available
    headers_cb: call method with single argument of url to get headers
                for request.
    headers_redact: a list of header names to redact from the log
    exception_cb: call method with 2 arguments 'msg' (per status_cb) and
                  'exception', the exception that occurred.
    sleep_time_cb: call method with 2 arguments (response, loop_n) that
                   generates the next sleep time.
    request_method: indicate the type of HTTP request, GET, PUT, or POST
    returns: tuple of (url, response contents), on failure, (False, None)

    the idea of this routine is to wait for the EC2 metadata service to
    come up.  On both Eucalyptus and EC2 we have seen the case where
    the instance hit the MD before the MD service was up.  EC2 seems
    to have permanently fixed this, though.

    In openstack, the metadata service might be painfully slow, and
    unable to avoid hitting a timeout of even up to 10 seconds or more
    (LP: #894279) for a simple GET.

    Offset those needs with the need to not hang forever (and block boot)
    on a system where cloud-init is configured to look for EC2 Metadata
    service but is not going to find one.  It is possible that the instance
    data host (169.254.169.254) may be firewalled off Entirely for a system,
    meaning that the connection will block forever unless a timeout is set.

    A value of None for max_wait will retry indefinitely.
    cSstj|�dS(N(R*Rm(tmsgtexc((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt
log_status_cb�scSs0|dkrtS|dkp/tj�||kS(Ni(R3R>Rw(tmax_waitt
start_time((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyttimeup�siiiRR$R|R^R}R�sempty response [%s]R#Rsbad status code [%s]srequest error [%s]sunexpected error [%s]s%sst	unlimitedsCalling '%s' failed [%s/%s]: %sR�t	exceptions1Please wait %s seconds while we wait to try againN(RwR3R?RgR5R>R%R#R2t
ValueErrorR$RAt	ExceptionR*RmRx(turlsR�R^t	status_cbR{R|t
sleep_timeR~t
sleep_time_cbR�R�R�R�tloop_nRHRtnowtreasonturl_excR$R9t
time_takentmax_wait_strt
status_msg((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytwait_for_urlbsx&			
		


	




	tOauthUrlHelpercBsqeZdddddd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZRS(s/run/oauth_skew.jsoncCs�||_|pd|_||_||_||_t|_d|_|j|j|jf}t|�sut	|_nt
|�s�td��n|j�}|p�i|_
dS(NRisBall or none of token_key, token_secret, or consumer_key can be set(tconsumer_keytconsumer_secrett	token_keyttoken_secrettskew_data_fileR?t	_do_oauthtskew_change_limittanyR>tallR�tread_skew_filet	skew_data(R<R�R�R�R�R�trequiredtold((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR=�s						cCsP|jrLtjj|j�rLt|jdd��}tj|�SWdQXndS(NtmodeR�(R�tosRtisfileR-tjsontloadR3(R<R8((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR��scCsp|js
dS|j�}|dkr.i}n|||<t|jdd��}|jtj|��WdQXdS(NR�tw(R�R�R3R-twriteR�tdumps(R<thosttvaluetcurR8((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytupdate_skew_file�s		
c	Cs4t|t�o*|jdkp*|jdks1dSd|jkrWtjd|j�dS|jd}ytjt|��}Wn't	k
r�}tjd||�dSXt
|tj��}t|j�j
}|jj|d�}t||�|jkr#|j||�tjd||�n||j|<dS(Ni�i�tdates$Missing header 'date' in %s responses#Failed to convert datetime '%s': %sis$Setting oauth clockskew for %s to %d(RrR2R#R$R*R+RwtmktimeRR�RgRRtnetlocR�R)tabsR�R�(	R<R�R�R�tremote_timeR9tskewR�told_skew((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR~s*	


cCs�|js
iSd}t|�j}|jrZ||jkrZttj��|j|}ntd|d|jd|j	d|j
d|jd|�S(NRR�R�R�R�t	timestamp(R�R3RR�R�RgRwt
oauth_headersR�R�R�R�(R<RR�R�((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR{s	 cCsKt|j|jd��|d<t|j|jd��|d<|||�S(NR{R~(Rt_headers_cbR)t
_exception_cb(R<twrapped_funcR@R6((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt_wrapped*s
cOs|jt||�S(N(R�R�(R<R@R6((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR�1scOs|jt||�S(N(R�R5(R<R@R6((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR54scCs:d}z|r!|||�}nWd|j||�X|S(N(R3R~(R<textra_exception_cbR�R�tret((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR�7scCs5i}|r||�}n|j|j|��|S(N(RcR{(R<textra_headers_cbRR$((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR�@s
N(
RDRER3R=R�R�R~R{R�R�R5R�R�(((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR��s									cCs�yddlj}Wntk
r2td��nX|rHt|�}nd}|j|d|d|d|d|jd|�}|j|�\}}	}
|	S(Ni����soauth support is not availablet
client_secrettresource_owner_keytresource_owner_secrettsignature_methodR�(	toauthlib.oauth1toauth1tImportErrortNotImplementedErrorRR3tClienttSIGNATURE_PLAINTEXTtsign(RR�R�R�R�R�R�tclientt_uritsigned_headerst_body((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyR�Hs 
		cCsLt|t�stS|jtkr&tS|jrHt|jtj�rHtStS(s�readurl exception_cb that will retry on NOT_FOUND and Timeout.

    Returns False to raise the exception from readurl, True to retry.
    (	RrR2R>R#R1R?R"RtTimeout(R�R�((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pytretry_on_url_exc_s(=RkR�R�RtsixRwtemail.utilsRR0Rt	functoolsRt	itertoolsRRtsix.moves.urllib.parseRRRRt	cloudinitRtloggingR	t	getLoggerRDR*tPY2thttplibR1thttp.clientRR�R>RURfR3RVR
tdistutils.versionRt
pkg_resourcestget_distributiont_REQR?R�RRR:tobjectR;R4RFR/R2RYR5R�R�R�R�(((s8/usr/lib/python2.7/site-packages/cloudinit/url_helper.pyt<module>sj		(

	
		!			�		wn