ó aòNc@sûdZddlZddlZddlmZdaddgZd„Zd„Z ej Z d„Z d e fd „ƒYZdefd „ƒYZdefd „ƒYZd efd„ƒYZdefd„ƒYZedkr÷ddlZejƒndS(s3 This module implements a class for handling URLs. iÿÿÿÿN(trequesttURLtImagecCs&|dkrdStjt|ƒdƒS(Nti(tNonetcgitescapetstr(tv((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt html_quotes cCs#|dkrdStjt|ƒƒS(NR(RturllibtquoteR(R((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt url_quotes cCsQ|dkrdS|tkr dS|tkr0dSt|tƒrYddjtt|ƒƒSt|tƒr¨ddjg|D](\}}dt|ƒt|ƒf^qxƒSt|t ƒrÁt |ƒSt|t ƒrãt |j dƒƒSt|t tfƒrt |ƒSt|tƒr$t |ƒjd ƒSt|d ƒr=|jƒStd |ƒ‚dS( Ntnulltfalsettrues[%s]s, s{%s}s%s: %ssUTF-8tLt __js_repr__s<I don't know how to turn %r into a Javascript representation(RtFalsetTruet isinstancetlisttjointmaptjs_reprtdictRtreprtunicodetencodetfloattinttlongtlstripthasattrRt ValueError(Rtkeytvalue((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRs2    4   t URLResourcecBs eZdZiZdddd„Zeedddd„ZeeƒZd„Z d„Z d„Z d„Z d„Z d„Zd „Zd „Zd „ZeZd „Zd „ZeeƒZd„Zd„ZeeƒZd„Zd„Zd„Zd„Zd„ZRS(sD This is an abstract superclass for different kinds of URLs cCsk|p d|_|pg|_|p'i|_|jjƒ|_|pHi|_|rg|jj|ƒndS(Nt/(turltvarstattrstdefault_paramstcopytparamstoriginal_paramstupdate(tselfR'R(R)R,((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt__init__@sc Cs…tj|dtd|d|d|ƒ}|ri|dkrKtj|ƒ}qotj|dtdtƒ}nd}||d|ƒ} | S(Ntwith_query_stringtwith_path_infot script_namet path_infotkeep_blank_valueststrict_parsingR((Rt construct_urlRRtparse_querystringRt parse_qslR( tclstenvironR1R2R3R4t querystringR'R(R((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt from_environKs     cOs"|j|ƒ}|j|ƒ}|S(N(t_add_positionalt _add_vars(R/targstkwtres((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt__call__ascCsTd|krD|jddƒ\}}|jit|ƒt|ƒ6ƒS|j|fƒS(Nt=i(tsplitR?t url_unquoteR>(R/titemtnameR$((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt __getitem__fs  cKs†x?|jƒD]1}|jdƒr ||||d <||=q q W|jjƒ}|j|ƒ|j|jd|jd|d|jƒS(Nt_iÿÿÿÿR(R)R,( tkeystendswithR)R+R.t __class__R'R(R-(R/RAR#t new_attrs((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytattrls cKsD|jjƒ}|j|ƒ|j|jd|jd|jd|ƒS(NR(R)R,(R-R+R.RMR'R(R)(R/RAt new_params((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytparamws   cCs¡t}x]|jƒD]O\}}t|tƒr7t}n|jdƒr||||d <||=qqW|rtdkr‹ddlmantj |ƒ}n|S(NRJiÿÿÿÿ(tvariabledecode( RtitemsRRRRLRRRt formencodetvariable_encode(R/R(tneed_variable_encodeR#R$((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt coerce_vars~s  cKsJ|j|ƒ}|j|jƒ}|j|jd|d|jd|jƒS(NR(R)R,(RWR(RSRMR'R)R-(R/RAtnew_vars((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytvarŽs  cKs|j|ƒ}g}x<|jD]1\}}||kr=qn|j||fƒqW|j|jƒƒ|j|jd|d|jd|jƒS(s® Like ``.var(...)``, except overwrites keys, where .var simply extends the keys. Setting a variable to None here will effectively delete it. R(R)R,( RWR(tappendtextendRSRMR'R)R-(R/RARXRHtvalues((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytsetvar•s  cKs.|j|jd|jƒd|jd|jƒS(sš Creates a copy of this URL, but with all the variables set/reset (like .setvar(), except clears past variables at the same time) R(R)R,(RMR'RSR)R-(R/RA((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytsetvars¦s c Gsƒ|}xv|D]n}t|ƒjdƒ}|j}|jdƒsM|d7}n|j||d|jd|jd|jƒ}q W|S(NR&R(R)R,(RR R'RLRMR(R)R-(R/tpathstutpathtnew_url((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytaddpath¯s    cCs(||jd|jd|jd|jƒS(NR(R)R,(R'R(R)R-(R/t OtherClass((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytbecome½s cCs»|j}|jr·|d7}g}xy|jD]n\}}t|ttfƒrug|D]}|dk rT|^qT}n|dkr‡q,n|j||fƒq,W|tj|t ƒ7}n|S(Nt?( R'R(RRttupleRRZR t urlencodeR(R/tsR(RHtvalR((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt href__getÂs   ( c CsÑd|jj|jpdf}|jrz|ddjg|jjƒD](\}}dt|ƒt|ƒf^qDƒ7}n|jrÉ|ddjg|jjƒD]\}}d||f^qŸƒ7}n|d S( Ns<%s %ss''s attrs(%s)t s%s="%s"s params(%s)s, s%s=%rt>(RMt__name__threfR)RRSR R-(R/tbasetnR((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt__repr__Òs   C  7cCsç|jjdƒs%td|ƒ‚n|jƒ}d|jjdƒ}djg|jƒD](\}}dt|ƒt|ƒf^qZƒ}|r¢|d|7}n||jƒ7}|dkrÆ|dSd|||jjdƒfSdS(Nttags<You cannot get the HTML of %r until you set the 'tag' param's<%sRls%s="%s"s />s %s>%s( R,tgetR"t _get_contentRt _html_attrsR t _html_extraR(R/tcontentRsRqRR)((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt html__getßs  ; cCs |jjƒS(N(R)RS(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRvóscCsdS(NR((R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRwöscCs t‚dS(sw Return the content for a tag (for self.html); return None for an empty tag (like ````) N(tNotImplementedError(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRuùscCs t‚dS(N(Rz(R/R(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR?scCs t‚dS(N(Rz(R/R@((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR>sN(Rnt __module__t__doc__R*RR0RR=t classmethodRCRIRORQRWRYR]R^Rct__div__ReRktpropertyRoRrRythtmlRvRwRuR?R>(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR%8s:                  cBs‡eZdZidd6Zd„Zd„Zd„Zd„Zd„Zd„Z e e ƒZ d „Z e e ƒZ d „Ze eƒZRS( s” >>> u = URL('http://localhost') >>> u >>> u = u['view'] >>> str(u) 'http://localhost/view' >>> u['//foo'].param(content='view').html 'view' >>> u.param(confirm='Really?', content='goto').html 'goto' >>> u(title='See "it"', content='goto').html 'goto' >>> u('another', var='fuggetaboutit', content='goto').html 'goto' >>> u.attr(content='goto').html Traceback (most recent call last): .... ValueError: You must give a content param to generate anchor tags >>> str(u['foo=bar%20stuff']) 'http://localhost/view?foo=bar+stuff' taRscCs|jS(N(Ro(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt__str__!scCs0|jjdƒs%td|ƒ‚n|jdS(NRxs8You must give a content param to %r generate anchor tags(R,RtR"(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRu$s  cCs||}x<dD]4}||kr |ji|j|ƒ|6}q q Wd|kro|jd|jdƒƒ}n|j|S(NtconfirmRxttarget(sconfirmscontent(RQtpopRORY(R/R(R'RH((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR?+s  & cCs |j|ŒS(N(Rc(R/R@((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR>4scCse|jjƒ}|jdd|jfƒ|jjdƒra|jddt|jdƒfƒn|S(NiRoRƒtonclicksreturn confirm(%s)(R)RStinsertRoR,RtRZR(R/R)((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRv7s  cCsdt|jƒS(Nslocation.href=%s; return false(RRo(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pytonclick_goto__get?scCs |jtƒS(N(RetButton(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt button__getDscCs |jtƒS(N(RetJSPopup(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt js_popup__getIs(RnR{R|R*R‚RuR?R>RvRˆRt onclick_gotoRŠtbuttonRŒtjs_popup(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRs          cBsHeZdZidd6Zd„Zd„Zd„Zd„Zd„ZRS(sÝ >>> i = Image('/images') >>> i = i / '/foo.png' >>> i.html '' >>> str(i['alt=foo']) 'foo' >>> i.href '/images/foo.png' timgRscCs|jS(N(R€(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR‚]scCsdS(N(R(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRu`scCs |j|S(N(RO(R/R(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR?cscCs |j|ŒS(N(Rc(R/R@((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR>fscCs,|jjƒ}|jdd|jfƒ|S(Nitsrc(R)RSR‡Ro(R/R)((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRvis( RnR{R|R*R‚RuR?R>Rv(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRNs      R‰cBsHeZdZidd6Zd„Zd„Zd„Zd„Zd„ZRS(sé >>> u = URL('/') >>> u = u / 'delete' >>> b = u.button['confirm=Sure?'](id=5, content='del') >>> str(b) '' RŽRscCs|jS(N(R€(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR‚zscCs>|jjdƒr|jdS|jjdƒr:|jdSdS(NRxR$(R,RtR)R(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRu}s   cCsg|}d|kr0|jd|jdƒƒ}nd|krZ|jd|jdƒƒ}n|j|S(NRƒRx(RQR…RY(R/R(RŽ((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR?…s   cCs |j|ŒS(N(Rc(R/R@((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR>scCsx|jjƒ}dt|jƒ}|jjdƒrTdt|jdƒ|f}n|d7}|jdd|fƒ|S(Nslocation.href=%sRƒsif (confirm(%s)) {%s}s; return falseiR†(R)RSRRoR,RtR‡(R/R)R†((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRvs ( RnR{R|R*R‚RuR?R>Rv(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR‰ns     R‹cBsOeZdZidd6dd6Zd„Zd„Zd„Zd„Zd „ZRS( sÑ >>> u = URL('/') >>> u = u / 'view' >>> j = u.js_popup(content='view') >>> j.html 'view' RRst_blankR„cCsR|}x<dD]4}||kr |ji|j|ƒ|6}q q W|j|S(NtwidththeighttstrippedRx(swidthR”R•scontent(RQR…RY(R/R(RŽRY((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR?¦s   &cCs2|j}g}|jdƒr;d|d<|d<|dd D]6}|j|ƒsËq°n|jd |||fƒq°W|j|d g}|r|jd j|ƒƒndjtt|ƒƒS(NR•t0tlocationtstatusttoolbarsXchannelmode directories fullscreen location menubar resizable scrollbars status titlebartyestnot1s%s=%ssheight left top widthR„t,s, (syesR›RœR–(R,RtRERZRoRRR(R/tptfeaturesRQRR@((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyt _window_args­s*       cCso|jjƒ}d|jƒ}|jdd|jdfƒ|jdd|fƒ|jdd|jfƒ|S(Nswindow.open(%s); return falseiR„R†Ro(R)RSR R‡R,Ro(R/R)R†((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRvÅs cCs0|jjdƒs%td|ƒ‚n|jdS(NRxs8You must give a content param to %r generate anchor tags(R,RtR"(R/((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyRuÎs  cCs |j|ŒS(N(Rc(R/R@((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR>Õs( RnR{R|R*R?R RvRuR>(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyR‹šs   t__main__(R|R RtpasteRRRRt__all__R R tunquoteRFRtobjectR%RRR‰R‹Rntdoctestttestmod(((s:/opt/alt/python27/lib/python2.7/site-packages/paste/url.pyts"       ÎH ,>