ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ bNc@sdZddlmZddlZddlZddlZddlmZddgZdZ dZ defd YZ de fd YZ dS( s8 Map URL prefixes to WSGI applications. See ``URLMap`` i(t DictMixinN(thttpexceptionstURLMaptPathProxyURLMapcKsd|kr|jd}n|jd}|rK|j|d|}ntd|}xE|jD]7\}}t|}|j|d|}||||\\}}}|s)dt| fS|t| fSdS(Ns(tlen(tapp_descRR>R((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pytkeysN(Rtsort(RRCtdesctappstsortable((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyt sort_appss ( cCsx|dkr/y ||=Wntk r*nXdS|j|}||krT||=n|jj||f|jdS(N(RtKeyErrorR5RtappendRH(RR>Rtdom_url((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyt __setitem__s     cCsg|j|}x'|jD]\}}||kr|SqWtd|d|dpSd|jfdS(Ns9No application with the url %r (domain: %r; existing: %s)iit*(R5RRI(RR>RKtapp_urlR((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyt __getitem__s cCsf|j|}xP|jD]2\}}||kr|jj||fPqqWtd|fdS(NsNo application with the url %r(R5RtremoveRI(RR>RNR((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyt __delitem__s cCs g|jD]\}}|^q S(N(R(RRNR((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pytkeyssc CsB|jd|jdj}d|krH|jdd\}}n|ddkrad}nd}|jd }|j|td}x|jD]\\}}}|r||kr||d|krqn||ks|j|d r|d c|7<|t||d <|||SqW||d <|j||S( NR"t SERVER_NAMERiswsgi.url_schemethttpt80t443R!RR spaste.urlmap_object( RtlowerRR5tFalseRR6RAR( RR+R,thostRt path_infoRRNR((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyt__call__s$!  &  N(t__name__t __module__t__doc__RRtretcompileR;R7RtTrueR5RHRLRORQRRR[(((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyRFs     cBsJeZdZdZdZdZdZdZeeeZ RS(s This is a wrapper for URLMap that catches any strings that are passed in as applications; these strings are treated as filenames (relative to `base_path`) and are passed to the callable `builder`, which will return an application. This is intended for cases when configuration files can be treated as applications. `base_paste_url` is the URL under which all applications added through this wrapper must go. Use ``""`` if you want this to not change incoming URLs. cCs4||_|jj||_||_||_dS(N(R%R5tbase_paste_urlt base_pathtbuilder(RR%RbRcRd((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyRs  cCst|ttfr?tjj|j|}|j|}n|jj |}|dpe|j d|j d|df}||j|Rtapp_fn((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyRLscCst|j|S(N(tgetattrR%(Rtattr((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyt __getattr__scCs |jjS(N(R%R(R((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pytnot_found_application__getscCs||j_dS(N(R%R(Rtvalue((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pytnot_found_application__sets( R\R]R^RRLRkRlRntpropertyR(((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyRs    (R^tUserDictRR_RgR(tpasteRt__all__RR RtobjectR(((s=/opt/alt/python27/lib/python2.7/site-packages/paste/urlmap.pyts      )