Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
¦‹EYc@sŒddlZddlZejdkr:ddlmZnddlZddlmZ	ddl
mZm
Z
mZdefd„ƒYZdS(iÿÿÿÿNs2.4(tImmutableSet(tparse(t
_url_quotet_str_encodet
as_unicodetRoutecBs¶eZdZdgZdZd„Zd„Zd	„Zd
„Zd„Z	d„Z
d
„Zed„Z
ed„Zed„Zdeddd„Zd„Zd„Zeed„ZRS(stThe Route object holds a route recognition and generation
    routine.

    See Route.__init__ docs for usage.

    trequirementst/t,t;t.t#cKsƒ||_t|_d|_t|_||_||_|jdtƒ|_	|jddƒ|_
|jdiƒ|_d|_
|jdtƒ|_|jddƒ|_|jdtƒ|_|jd	dƒ|_|jd
dƒ|_|jddƒ|_|jddƒ|_|jd
tƒ|_|jrMd|jk|_t|_	n|jdƒru|j	ru|d|_n|jƒdS(sRInitialize a route, with a given routepath for
        matching/generation

        The set of keyword args will be used as defaults.

        Usage::

            >>> from routes.base import Route
            >>> newroute = Route(None, ':controller/:action/:id')
            >>> sorted(newroute.defaults.items())
            [('action', 'index'), ('id', None)]
            >>> newroute = Route(None, 'date/:year/:month/:day',
            ...     controller="blog", action="view")
            >>> newroute = Route(None, 'archives/:page', controller="blog",
            ...     action="by_page", requirements = { 'page':'\d{1,2}' })
            >>> newroute.reqs
            {'page': '\\d{1,2}'}

        .. Note::
            Route is generally not called directly, a Mapper instance
            connect method should be used to add routes.

        t	_minimizet	_encodingsutf-8Rtreplacet_statict_filtert	_absolutet_member_namet_collection_namet_parent_resourcet
conditionst	_explicits://RiN(t	routepathtFalsetsub_domainstNonetpriortredirecttnamet_kargstpoptminimizationtencodingtgettreqst
decode_errorststatictfiltertabsolutetmember_nametcollection_nametparent_resourceRtexplicittexternalt
startswitht_setup_route(tselfRRtkargs((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyt__init__s0								cs<ˆjˆjƒˆ_}td„|Dƒƒ‰td„|Dƒƒˆ_ˆjs^ˆjƒniˆ_x>tj	ˆj
ƒD]*\}}tjd|dƒˆj|<qzWˆj
ˆˆjˆjjƒƒ\ˆ_}|ˆBˆ_ˆj|ƒ\ˆ_ˆ_t‡‡fd†ˆjDƒƒˆ_tˆjjƒƒˆ_dS(Ncss(|]}t|tƒr|dVqdS(RN(t
isinstancetdict(t.0tkey((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pys	<genexpr>[scss8|].}t|tƒr|ddkr|dVqdS(ttypeR
RN(R2R3(R4R5((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pys	<genexpr>]st^t$c3s4|]*}|ˆkrˆj|dk	r|VqdS(N(tdefaultsR(R4R5(t	routekeysR/(sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pys	<genexpr>vs(t	_pathkeysRt	routelistt	frozensettdotkeysR tmake_full_routetreq_regstsixt	iteritemsR#tretcompilet	_defaultst
reserved_keysRtcopyR9tmaxkeyst_minkeystminkeystroutebackwardst	hardcodedtkeyst
_default_keys(R/R<R5tvaltdefaultkeys((R:R/sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyR.Xs	
	"	
%cCsYd}xC|jD]8}t|tƒr>|d|dd7}q||7}qW||_dS(sJMake a full routelist string for use with non-minimized
        generationts%(Rs)sN(R<R2R3tregpath(R/RRtpart((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyR?}scCsVt|tjƒr|St|tƒr5|j|jƒSt|ƒrE|Stj|ƒSdS(s3Transform the given argument into a unicode string.N(R2RAt	text_typetbytestdecodeR!tcallable(R/ts((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pytmake_unicodeˆsc

Cs1t}d}d}d}t}g}xË|D]Ã}|dkrN|rN|jsa|dkr¹|r¹t}t}|}|dkrŽd}t}nt|ƒdkrî|j|ƒd}qîq+|rö|röt}|dkràd}qî|}|jd}q+|r||kr||7}q+|rät}|dkr˜|dd
krPd
}|d}nd}|jdƒ}	t|	ƒdkr˜|	d}|	d|j|<q˜n|jtd|d
|ƒƒ||jkrÓ|j|ƒnd}}}q+||7}q+W|r|jtd|d
|ƒƒn|r-|j|ƒn|S(sYUtility function to walk the route, and pull out the valid
        dynamic/wildcard keys.RQt:t*t{t}it(t)t-R
iR6R(RZR[R\(R\(R`(	RR%tTruetlentappendt
done_charstsplitR#R3(
R/Rt
collectingtcurrenttdone_ontvar_typetjust_startedR<tchartopts((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyR;“s^
	
	


cCsg}|}|jsZx1|D])}t|tƒr|j|dƒqqWt|ƒ|fSt}|jƒx‡|D]}t|tƒr¢||jkr¢t}qqnt|tƒs·qqn|d}||j	krÝ|rÝqqn|j|ƒt}qqWt|ƒ|fS(sUtility function to walk the route backwards

        Will also determine the minimum keys we can handle to generate
        a working route.

        routelist is a list of the '/' split route path
        defaults is a dict of all the defaults provided for the route

        R(
R R2R3RcR=RtreverseRdRaR9(R/R<RJt	backcheckRStgapsR5((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyRIÉs*
	





csUi}d|kr5d|kr5|jr5d|d<nd|krdd|krd|jrdd|d<nt‡fd†|jƒDƒƒ}xB|D]:}||dk	r½|j||ƒ||<qd||<qWd|krúd|krú|jrúd|d<nd|kr)d|kr)|jr)d|d<nt‡fd†|jƒDƒƒ}||fS(	sŒCreates default set with values stringified

        Put together our list of defaults, stringify non-None values
        and add in our action/id default if they use it and didn't
        specify it.

        defaultkeys is a list of the currently assumed default keys
        routekeys is a list of the keys found in the route path
        reserved_keys is a list of keys that are not

        t
controllertcontenttactiontindexc3s!|]}|ˆkr|VqdS(N((R4R5(RF(sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pys	<genexpr>stidc3s!|]}|ˆkr|VqdS(N((R4R5(RF(sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pys	<genexpr>sN(R+R=RMRRY(R/R:RFR0R9RPR5tnewdefaultkeys((RFsA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyREís(



"




"cCs¦|jra|j|j||ƒd}|s4d}n|dd}|jdƒssd|}qsn|j||ƒ}d|}|s‡|S||_tj|ƒ|_dS(s\Create a regular expression for matching purposes

        Note: This MUST be called before match can function properly.

        clist should be a list of valid controller strings that can be
        matched, for this reason makeregexp should be called by the web
        framework after it knows all available controllers that can be
        utilized.

        include_names indicates whether this should be a match regexp
        assigned to itself using regexp grouping names, or if names
        should be excluded for use in a single larger regexp to
        determine if any routes match

        iRs/?R8R7N(	R tbuildnextregR<R-tbuildfullregtregexpRCRDtregmatch(R/tclistt
include_namestreg((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyt
makeregexps		
	c	CsOg}x/|jD]$}t|tƒr|d}|dkrYdjttj|ƒƒ}nn|ddkr„|jj|ƒp~d}nC|ddkr¯|jj|ƒp©d}n|jj|ƒpÄd	}|ràd
||f}n
d|}|ddkr|j	d|ƒq4|j	|ƒq|j	tj|ƒƒqWd
j|ƒd}|S(sqBuild the regexp by iterating through the routelist and
        replacing dicts with the appropriate regexp matchRRpt|R6RZs[^/]+?R
s[^/.]+?s.+?s
(?P<%s>%s)s(?:%s)s
(?:\.%s)??RQR8(
R<R2R3tjointmapRCtescapeR#R"Rc(	R/RzR{tregpartsRStvart	partmatchtregpartRx((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyRw6s(

c	Cs©|r|d}nd}d}dtt}}}t|dƒdkrw||_|j|d||ƒ\}}}nt|tƒrü|dd"krü|d}	|d}
d}|	|jkr|rßd|	|j|	f}nd	|j|	}|
dkrÖd
|}qÖnÊ|	dkrh|rFd|	djtt	j
|ƒƒf}qÖd	djtt	j
|ƒƒ}nn|jd#kr­|r™d|	d|jd}qÖd|jd}n)|s
|
dkrÈd}nd
}|rçd|	|f}n
d|}|
dkrÖd
|}qÖnÉdj|jƒ}
|}|ddkrTt|ƒdkrT|d}n4|jdƒr‚t|ƒdkr‚|d}n|
}t
|ƒt
d
gƒB}|rÃd|	dj|ƒf}nddj|ƒ}|	|jkrît}n|	|jkrt}t}n|rÅ|	|jkrE|	|jkrEd||d}qù|	|jkrgt}||}qù|	|jkr’|jd$kr’||}qù|	|jkr²|d|}qùt}||}qœ|rï|	|jkrïd||d}qœ||}n t|tƒr	|ddkr	|d}	|rm|rBd|	|}n
d |}|	|jkrt}t}qqœ|r¦|	|jkr¦|r™d|	|}qd |}qœ|	|jkrÙ|rÌd|	|}qd |}qœ|rðd|	|}n
d |}t}t}n“|r}|d!|jkr}|rat	j
|d! ƒdt	j
|d!ƒ|}|d7}qœt}t	j
|ƒ|}nt}t}t	j
|ƒ|}|||fS(%sáRecursively build our regexp given a path, and a controller
        list.

        Returns the regular expression string, and two booleans that
        can be ignored as they're only used internally by buildnextreg.

        iRQiR6RZR
Rs
(?P<%s>%s)s(?:%s)s
(?:\.%s)??RpR~RRs(?P<s>[^s]+?)s(?:[^s/.s(?P<%s>[^%s]+?)s(?:[^%s]+?)s\s(\is(?:s)?RR	t?R[s
(?P<%s>.*)s(?:.*)iÿÿÿÿ(RZR
(RR(RR	R
(RaRbRRvR2R3R#RR€RCRRdR-R=RR9(R/tpathRzR{RSR|tresttnoreqstallblankRƒttyptpartregt
exclude_charstendtrem((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyRvRsÈ
	

"	
"
!
		








	,
RQcCs‰|jr
tS|jj|ƒ}|s)tSd}|rª|rªd|krª|djdƒd}tjd|ƒ}	tj|	d|ƒ}
|
|krª||
krª|
}qªn|j	rHd|j	krã|rã|d|j	dkrãtS|j	j
dƒ}|r|rtS|r&d|j	kr&|r&tSt|tƒrH||krHtSn|j
ƒ}i}
|jt|jƒƒ}x§tj|ƒD]–\}}|d	krØ|jrØyt||j|jƒ}WqØtk
rÔtSXn|r||jkr|j|r|j||
|<qƒ||
|<qƒWx|D]}|j||
|<q$W|rR||
d<n|j	r…d
|j	kr…|j	d
||
ƒr…tS|
S(sÕMatch a url to our regexp.

        While the regexp might match, this operation isn't
        guaranteed as there's other factors that can cause a match to
        fail even though the regexp succeeds (Default that was relied
        on wasn't given, requirement regexp doesn't pass, etc.).

        Therefore the calling function shouldn't assume this will
        return a valid dict, the other possible return is False if a
        match doesn't work out.

        t	HTTP_HOSTRZis^(.+?)\.%s$s\1tmethodtREQUEST_METHODt
sub_domaint	path_infotfunctionN(R%RRytmatchRReRCRDtsubRR"R2tlistt	groupdictRNR=RMRARBR!RR$tUnicodeDecodeErrorR9(R/turltenvironRtsub_domains_ignoretdomain_matchR–R“thostt	sub_matcht	subdomaintuse_sdt	matchdicttresulttextrasR5RO((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyR–ýsV		

#

cCsHxU|j|jD]C}||kr'tS|j||ƒ|j|j|ƒkrtSqWxP|jD]E}||ks„||dkrb||jkr d||<q§tSqbqbWx|D]‡}||jkr²||jkr||r6tdt|||j	ƒ|j	ƒ||<q6q9tt|||j	ƒ|j	ƒ||<q²q²W|j
|S(s)Generate a non-minimal version of the URLRQR
N(RHRJRRYR9RR>t	url_quoteRR!RR(R/R0tktarg((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pytgenerate_non_minimizedJs(


 cCs­|j}g}t}xx|D]p}t|tƒr¥|ddkr¥|d}||k}||jk}|r€|r€|r€qn|rÂ|rÂ|j||ƒ|j|j|ƒkrÂ|rÂqn|rë||d	krë|rë|rëqnV|rþ||}	nC|r'|j|d	k	r'|j|}	n|ddkr=qntSt|	|jƒ}	|j	t
|	|jƒƒ|ddkrŒ|j	dƒn|rœ||=nt}qt|tƒr|ddkr|d}|j|ƒ}
|
d	k	rŒ|j	t
|
|jƒƒt}qŒq|ry|d|j
kry|rC||j
krCqqŒ|sc|j	|d ƒt}qŒt}|j	|ƒqt}|j	|ƒqW|jƒdj|ƒ}|S(
s'Generate a minimized version of the URLR6RZR
RR[iÿÿÿÿRQ(RZR
N(RKRR2R3R9RYRRR!RcR¦RaR"RdRmR(R/R0R<turllistRoRSR¨thas_argthas_defaultROtkarR›((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pytgenerate_minimizedksb	

 #

	
	
cKs‘|s\xS|jjƒD]?}|j|ƒ}|r|j|j|j|ƒƒrtSqWnt|jdƒ|jƒ}|rÂ|j	r²d|j	kr²|j
ƒ|j	dkr²tS|jdƒn|jrÝ|j
|ƒ}n|j|ƒ}|tkrü|S|jdƒr#|jr#d|}nt|jƒƒ|j}|rj|re|jdƒre|d7}ng}	xÓ|D]Ë}||krŠqrn|dksr|dkr¨qrn||}t|ttfƒrxs|D]7}
t|
|jƒ}
|	j|t|
|jƒfƒqÎWqrt||jƒ}|	j|t||jƒfƒqrW|	r|d7}|tj|	ƒ7}qn#|r|jdƒr|d7}n|S(sŸGenerate a URL from ourself given a set of keyword arguments

        Toss an exception if this
        set of keywords would cause a gap in the url.

        R‘RRrRpR†(R#RMR"R@R–RYRRR!RtupperRR R®R©R-R%R=RHtendswithR2ttupleR˜RcRturlparset	urlencode(R/t_ignore_req_listt
_append_slashR0R5ROtmethR›R¥t	fragmentstvalue((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pytgenerateµsT&	




#

(RRR	R
RN(t__name__t
__module__t__doc__RFRdR1R.R?RYR;RIRERaR}RwRvRRR–R©R®R¹(((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyRs$		?	%			6	$	&#«L	!	J(RCtsystversiontsetsRR=RAtsix.moves.urllibRR²troutes.utilRR¦RRtobjectR(((sA/home/tvault/.virtenv/lib/python2.7/site-packages/routes/route.pyt<module>s