Files
old-parkingkoncept/parkingkonceptvenv/lib/python3.7/site-packages/__pycache__/bottle.cpython-37.pyc

1180 lines
142 KiB
Plaintext
Raw Normal View History

2019-11-17 12:44:16 +01:00
B
<00>i<EFBFBD>]%K<00>@s<> dZddlmZdZdZdZedkr<>ddlmZedd <09>Z e j
Z e d
d d d <0A>e ddddd<12>e ddddd<17>e ddddd <0A>e dd dd <0A>e dd dd <0A>e <09> <0C>\Z Ze jr<>e j<0F>d <20>r<>dd!lZej<13><14>dd!lZdd!lZdd!lZdd!lZdd!lZdd!lZdd!lZdd!lZdd!lZdd!lZdd!l Z dd!l!Z!dd!l"Z"dd!l#Z#dd!l$Z$dd!l%Z%dd"l&m'Z(m&Z&m)Z)dd#l"m*Z*dd$l+m,Z,m-Z-dd%l.m/Z/dd&l0m1Z1ydd'l2m3Z4m5Z6Wnze7k
<EFBFBD>r ydd'l8m3Z4m5Z6WnNe7k
<EFBFBD>rydd'l9m3Z4m5Z6Wn"e7k
<EFBFBD>rd(d)<29>Z4e4Z6YnXYnXYnXe!j:Z;e;d*kZ<e;d+kZ=d,e;k<01>oLd-knZ>d.d/<2F>Z?ye!j@jAe!jBjAZCZDWn&eEk
<EFBFBD>r<>d0d1<64>ZCd2d1<64>ZDYnXe<<3C>rBdd!lFmGZHdd!lIZJdd3lKmLZLmMZNdd4lKmOZOmPZQmRZSejTeSd5d6<64>ZSdd7lUmVZVdd8lWmXZYdd!lZZZdd9l[m\Z\dd:l]m^Z^e_Z`e_Zad;d1<64>Zbd<d1<64>ZcedZed=d><3E>Zfn<66>dd!lHZHdd!lJZJdd3lgmLZLmMZNdd4lhmOZOmPZQmRZSdd7limVZVdd?lmeZedd!ljZZdd@lkmkZ\ddAl^mlZ^e=<3D>r<>dBZme%<25>nemeo<65>ddClpmYZYdDdE<64>Zqe_Zrn dd8lWmXZYeaZae6ZbesetdFdGdH<64><03><00>dDdJdK<64>Zu<5A>dEdMdN<64>Zve<<3C>r$evneuZwe><3E>rJddOl[mxZxGdPdQ<64>dQex<65>ZydRdS<64>Zz<5A>dFdUdV<64>Z{dWdX<64>Z|GdYdZ<64>dZe}<7D>Z~Gd[d\<5C>d\e}<7D>ZGd]d^<5E>d^e}<7D>Z<>Gd_d`<60>d`e<><65>Z<>Gdadb<64>dbe<62><65>Z<>Gdcdd<64>dde<64><65>Z<>Gdedf<64>dfe<66><65>Z<>Gdgdh<64>dhe<68><65>Z<>Gdidj<64>dje<6A><65>Z<>dkdl<64>Z<>Gdmdn<64>dne}<7D>Z<>Gdodp<64>dpe}<7D>Z<>Gdqdr<64>dre}<7D>Z<>Gdsdt<64>dte}<7D>Z<>dudv<64>Z<>dwdx<64>Z<>Gdydz<64>dze}<7D>Z<>Gd{d|<7C>d|e}<7D>Z<><5A>dGd}d~<7E>Z<>Gdd<7F><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>e<EFBFBD>Z<EFBFBD>e<EFBFBD>Z<EFBFBD>Gd<>d<EFBFBD><64>d<>e<EFBFBD>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>eY<65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>eY<65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e<EFBFBD><65>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<><5A>dHd<48>d<EFBFBD><64>Z<><5A>dId<49>d<EFBFBD><64>Z<><5A>dJd<4A>d<EFBFBD><64>Z<><5A>dKd<4B>d<EFBFBD><64>Z<><5A>dLd<4C>d<EFBFBD><64>Z<>d<EFBFBD>d<EFBFBD><64>Z<>d<EFBFBD>d<EFBFBD><64>Z<>d<EFBFBD>d<EFBFBD><64>Z<><5A>dMd<4D>d<EFBFBD><64>Z<>d<EFBFBD>d<EFBFBD><64>Z<>d<EFBFBD>d<EFBFBD><64>Z<>d<EFBFBD>d<EFBFBD><64>Z<>d<EFBFBD>d„Z<>d<EFBFBD>Z<>d<EFBFBD>dƄZ<>d<EFBFBD>Z<>d<EFBFBD>Z<><5A>dNd<4E>Z<><5A>dOd<4F>Z<>d<EFBFBD>Z<>e<EFBFBD>Z<>e<EFBFBD>Z<>e<EFBFBD>Z<>e<EFBFBD>d׃Z<>e<EFBFBD>Z<>e<EFBFBD>Z<>e<EFBFBD>Z<>e<EFBFBD>Z<>e<EFBFBD>d܃Z<>e<EFBFBD>Z<>e<EFBFBD>Z<>Gd<>d<EFBFBD><64>d<>e}<7D>Z<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<>d<EFBFBD><64>d<>eǃZ<>Gd<><64>d<00><00>deǃZ<>G<00>d<01>d<02><00>deǃZ<>G<00>d<03>d<04><00>deǃZ<>G<00>d<05>d<06><00>deǃZ<>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>e<EFBFBD>d<07>d<08>d <09>d
<EFBFBD>d <0B>Z<>e<EFBFBD>dP<64>d<0E>d<0F>Z<>G<00>d<10>d<11><00>de#j<><6A>Z<>G<00>d<12>d<13><00>de<><65>Z<>G<00>d<14>d<15><00>de}<7D>Z<>G<00>d<16>d<17><00>de<><65>Z<>G<00>d<18>d<19><00>de<><65>Z<>G<00>d<1A>d<1B><00>de<><65>Z<>G<00>d<1C>d<1D><00>de<><65>Z<>G<00>d<1E>d<1F><00>de<><65>Z<>G<00>d <20>d!<21><00>d!e}<7D>Z<><5A>d"<22>d#<23>Z<>ejTe<54>e<EFBFBD><65>d$<24>Z<>ejTe<54>e<EFBFBD><65>d$<24>Z<>ejTe<54>e<EFBFBD><65>d$<24>Z<><5A>d%<25>d&<26>Z<>ejTe<54>e<EFBFBD><65>d$<24>Z<>ejTe<54>e<EFBFBD><65>d$<24>Z<>ejTe<54>e<EFBFBD><65>d$<24>Z<><5A>d'<27>d(gZ<>iZ<>dTa<54>dTa<54>eHj<48>Z<EFBFBD><5A>d)e<><65>d*<<00>d+e<><65>d,<<00>d-e<><65>d.<<00>d/e<><65>d0<<00>d1e<31><65>d2<<00>d3e<33><65>d4<e<><65>d5<64>d6<64>e<><65><EFBFBD><EFBFBD>D<00><01>Z<><5A>d7eZ<>e<EFBFBD><65>Z<>e<EFBFBD><65>Z<>e#<23><><EFBFBD>Z<>e<EFBFBD><65>Z<>Z<EFBFBD>e<EFBFBD><65><01><00>e<>edk<02> rp<72>d8ne<06>d9<00>d:<3A><02>j<01>Zedk<02> r<>e ee <00>Z<03>Z<04>Z<05>e<03>j<06> r<>eC<65>d;e<00>e!<21><01>d<01><00>e<04> s<><73>e<05><01><08>eD<65>d<<3C>e!<21><01>e!<21>j <09><01>
d<01>d=<3D>e!<21>j <0B><01> <0C>d>e!<21>j d<00><00>e<03>j <0A> p6<70>d?<3F>d <00>Z<0E>Z<0F>d@<40>ek<06> r<><72>e<0E><01><10>dA<64><01>e<0E><01><10>d@<40>k<00> r<><72>e<0E><01><11>d@dˡ\<02>Z<0E>Z<0F>e<0E><01><12>dB<64><01>Zed<00>e<0E>e<13>e<0F><01>ej<0F>e<03>j<14>e<03>j<15>ej<><6A>dC<64>d!S(Qa<>
Bottle is a fast and simple micro-framework for small web applications. It
offers request dispatching (Routes) with url parameter support, templates,
a built-in HTTP Server and adapters for many third party WSGI/HTTP-server and
template engines - all in a single file and with no dependencies other than the
Python Standard Library.
Homepage and documentation: http://bottlepy.org/
Copyright (c) 2016, Marcel Hellkamp.
License: MIT (see LICENSE for details)
<EFBFBD>)<01>with_statementzMarcel Hellkampz0.12.17<EFBFBD>MIT<49>__main__)<01> OptionParserz)usage: %prog [options] package.module:app)<01>usagez --version<6F>
store_truezshow version number.)<02>action<6F>helpz-bz--bindZADDRESSzbind socket to ADDRESS.)<02>metavarr z-sz--server<65>wsgirefzuse SERVER as backend.)<02>defaultr z-pz--plugin<69>appendzinstall additional plugin/s.z--debugzstart server in debug mode.z--reloadzauto-reload on file changes.<2E>geventN)<03>date<74>datetime<6D> timedelta)<01> TemporaryFile)<02>
format_exc<EFBFBD> print_exc)<01>
getargspec)<01> normalize)<02>dumps<70>loadscCs td<01><01>dS)Nz/JSON support requires Python 2.6 or simplejson.)<01> ImportError)<01>data<74>r<00>*/tmp/pip-install-kvaixh40/bottle/bottle.py<70>
json_dumps6sr)<03>rr)<03><00>r)r<00>r)rrrcCs t<00><01>dS)Nr!)<02>sys<79>exc_inforrrr<00>_eE<00>r$cCs tj<01>|<00>S)N)r"<00>stdout<75>write)<01>xrrr<00><lambda>Lr%r)cCs tj<01>|<00>S)N)r"<00>stderrr')r(rrrr)Mr%)<02>urljoin<69> SplitResult)<03> urlencode<64>quote<74>unquote<74>latin1)<01>encoding)<01> SimpleCookie)<01>MutableMapping)<01>BytesIO)<01> ConfigParsercCs tt|<00><01>S)N)<02>json_lds<64>touni)<01>srrrr)]r%cCs
t|d<01>S)N<>__call__)<01>hasattr)r(rrrr)^r%cGs|d|d<00><01>|d<00><01>dS)Nrr!r)<01>with_traceback)<01>arrr<00>_raise`r%r=)<01>imap)<01>StringIO)<01>SafeConfigParserz?Python 2.5 support may be dropped in future versions of Bottle.)<01> DictMixincCs|<00><00>S)N)<01>next)<01>itrrrrBor%rBz&def _raise(*a): raise a[0], a[1], a[2]z<py3fix><3E>exec<65>utf8cCst|t<01>r|<00>|<01>St|<00>S)N)<04>
isinstance<EFBFBD>unicode<64>encode<64>bytes)r8<00>encrrr<00>tobxsrK<00>strictcCst|t<01>r|<00>||<02>St|<00>S)N)rFrI<00>decoderG)r8rJ<00>errrrrr7zsr7)<01> TextIOWrapperc@seZdZdd<02>ZdS)<04>NCTextIOWrappercCsdS)Nr)<01>selfrrr<00>close<73>r%zNCTextIOWrapper.closeN)<04>__name__<5F>
__module__<EFBFBD> __qualname__rRrrrrrP<00>srPcOs2ytj||f|<02>|<03>Wntk
r,YnXdS)N)<03> functools<6C>update_wrapper<65>AttributeError)<04>wrapper<65>wrappedr<<00>karrrrW<00>srWFcCstj|tdd<02>dS)Nr)<01>
stacklevel)<03>warnings<67>warn<72>DeprecationWarning)<02>message<67>hardrrr<00>depr<70>srbcCs,t|ttttf<04>rt|<00>S|r$|gSgSdS)N)rF<00>tuple<6C>list<73>set<65>dict)rrrr<00>makelist<73>s
rgc@s:eZdZdZddd<05>Zdd<07>Zdd <09>Zd
d <0B>Zd d <0A>ZdS)<0F> DictPropertyz= Property that maps to a key in a local dict-like attribute. NFcCs||||_|_|_dS)N)<03>attr<74>key<65> read_only)rQrirjrkrrr<00>__init__<5F>szDictProperty.__init__cCs*tj||gd<01>||jp|j|_|_|S)N)<01>updated)rVrWrjrS<00>getter)rQ<00>funcrrrr9<00>szDictProperty.__call__cCs>|dkr |S|jt||j<02>}}||kr6|<00>|<01>||<||S)N)rj<00>getattrrirn)rQ<00>obj<62>clsrjZstoragerrr<00>__get__<5F>s zDictProperty.__get__cCs$|jrtd<01><01>|t||j<03>|j<dS)NzRead-Only property.)rkrXrprirj)rQrq<00>valuerrr<00>__set__<5F>szDictProperty.__set__cCs"|jrtd<01><01>t||j<03>|j=dS)NzRead-Only property.)rkrXrprirj)rQrqrrr<00>
__delete__<EFBFBD>szDictProperty.__delete__)NF) rSrTrU<00>__doc__rlr9rsrurvrrrrrh<00>s 
rhc@s eZdZdZdd<03>Zdd<05>ZdS)<07>cached_propertyz<79> A property that is only computed once per instance and then replaces
itself with an ordinary attribute. Deleting the attribute resets the
property. cCst|d<01>|_||_dS)Nrw)rprwro)rQrorrrrl<00>s zcached_property.__init__cCs(|dkr |S|<00>|<01>}|j|jj<|S)N)ro<00>__dict__rS)rQrqrrrtrrrrs<00>szcached_property.__get__N)rSrTrUrwrlrsrrrrrx<00>srxc@s eZdZdZdd<03>Zdd<05>ZdS)<07>lazy_attributez4 A property that caches itself to the class object. cCstj||gd<01>||_dS)N)rm)rVrWrn)rQrorrrrl<00>szlazy_attribute.__init__cCs|<00>|<02>}t||j|<03>|S)N)rn<00>setattrrS)rQrqrrrtrrrrs<00>s
zlazy_attribute.__get__N)rSrTrUrwrlrsrrrrrz<00>srzc@seZdZdZdS)<03>BottleExceptionz- A base class for exceptions used by bottle. N)rSrTrUrwrrrrr|<00>sr|c@seZdZdZdS)<03>
RouteErrorz9 This is a base class for all routing related exceptions N)rSrTrUrwrrrrr}<00>sr}c@seZdZdZdS)<03>
RouteResetzf If raised by a plugin or request handler, the route is reset and all
plugins are re-applied. N)rSrTrUrwrrrrr~<00>sr~c@s eZdZdS)<02>RouterUnknownModeErrorN)rSrTrUrrrrr<00>src@seZdZdZdS)<03>RouteSyntaxErrorz@ The route parser found something not supported by this router. N)rSrTrUrwrrrrr<><00>sr<>c@seZdZdZdS)<03>RouteBuildErrorz The route could not be built. N)rSrTrUrwrrrrr<><00>sr<>cCsd|kr |St<00>ddd<04>|<00>S)z^ Turn all capturing groups in a regular expression pattern into
non-capturing groups. <20>(z(\\*)(\(\?P<[^>]+>|\((?!\?))cSs*t|<00>d<01><01>dr|<00>d<03>S|<00>d<01>dS)Nr!rrz(?:)<02>len<65>group)<01>mrrrr)<00>r%z_re_flatten.<locals>.<lambda>)<02>re<72>sub)<01>prrr<00> _re_flatten<65>sr<>c@sbeZdZdZdZdZdZddd<07>Zdd <09>Ze <09>
d
<EFBFBD>Z d d <0C>Z ddd<0F>Z dd<11>Zdd<13>Zdd<15>Zd S)<18>RouteraA A Router is an ordered collection of route->target pairs. It is used to
efficiently match WSGI requests against a number of routes and return
the first target that satisfies the request. The target may be anything,
usually a string, ID or callable object. A route consists of a path-rule
and a HTTP method.
The path-rule is either a static path (e.g. `/contact`) or a dynamic
path that contains wildcards (e.g. `/wiki/<page>`). The wildcard syntax
and details on the matching order are described in docs:`routing`.
z[^/]+r<><00>cFcsRg<00>_i<00>_i<00>_i<00>_i<00>_i<00>_|<01>_<06>fdd<02>dd<02>dd<02>dd<02>d<06><04>_dS)Ncst|p
<EFBFBD>j<01>ddfS)N)r<><00>default_pattern)<01>conf)rQrrr)sz!Router.__init__.<locals>.<lambda>cSsdtdd<03>fS)Nz-?\d+cSs tt|<00><01>S)N)<02>str<74>int)r(rrrr)r%z3Router.__init__.<locals>.<lambda>.<locals>.<lambda>)r<>)r<>rrrr)r%cSsdtdd<03>fS)Nz-?[\d.]+cSs tt|<00><01>S)N)r<><00>float)r(rrrr)r%z3Router.__init__.<locals>.<lambda>.<locals>.<lambda>)r<>)r<>rrrr)r%cSsdS)N)z.+?NNr)r<>rrrr) r%)r<>r<>r<><00>path)<08>rules<65>_groups<70>builder<65>static<69> dyna_routes<65> dyna_regexes<65> strict_order<65>filters)rQrLr)rQrrls
zRouter.__init__cCs||j|<dS)z<> Add a filter. The provided function is called with the configuration
string as parameter and must return a (regexp, to_python, to_url) tuple.
The first element is a string, the last two are callables or None. N)r<>)rQ<00>namerorrr<00>
add_filter"szRouter.add_filterz<72>(\\*)(?:(?::([a-zA-Z_][a-zA-Z_0-9]*)?()(?:#(.*?)#)?)|(?:<([a-zA-Z_][a-zA-Z_0-9]*)?(?::([a-zA-Z_]*)(?::((?:\\.|[^\\>]+)+)?)?)?>))c cs<>d\}}x<>|j<00>|<01>D]<5D>}||||<04><02><00>7}|<04><03>}t|d<00>drn||<04>d<02>t|d<00>d<00>7}|<04><06>}q|r~|ddfV|ddkr<>|dd<05>n
|dd<04>\}}}||p<>d|p<>dfV|<04><06>d}}qW|t|<01>ks<>|r<>|||d<00>ddfVdS) N)r<00>rr<00><00>r!r r<>)<07> rule_syntax<61>finditer<65>start<72>groupsr<73>r<><00>end) rQ<00>rule<6C>offset<65>prefix<69>match<63>gr<67>Zfiltrr<72>rrr<00> _itertokens-s *zRouter._itertokensNcs<d}g}d}g<00>g}d} x<>|<00>|<01>D]<5D>\}
} } | r<>d} | dkrD|j} |j| | <0C>\} }}|
sz|d| 7}d|}
|d7}n|d |
| f7}|<06>|
<EFBFBD>|r<><72><00>|
|f<02>|<08>|
|p<>tf<02>q$|
r$|t<05>|
<EFBFBD>7}|<08>d
|
f<02>q$W||j|<|r<>||j|<| <09>r.|j<08>s.|j <09>
|i<00>|d
f|j ||<00> |<01><d
Syt<05> d |<00>}|j <0A>Wn*tjk
<EFBFBD>rptd |t<10>f<00><01>YnX<00><00>r<><72><00>fd d<0E>}n|j<11>r<><72>fdd<0E>}nd
}t|<07>}||||f}||f|jk<06>r<>t<14>r<>d}t<15>|||ft<17>||j||j||f<n0|j<18>
|g<00><02>|<13>t|j|<00>d|j||f<|<00>|<02>d
S)z< Add a new rule or replace the target for an existing rule. rr<>TFr z(?:%s)zanon%dr!z
(?P<%s>%s)Nz^(%s)$zCould not add Route: %s (%s)c sV<00>|<00><01><00>}xD<78>D]<\}}y|||<00>||<Wqtk
rLtdd<02><02>YqXqW|S)Ni<4E>zPath has wrong format.)<03> groupdict<63>
ValueError<EFBFBD> HTTPError)r<><00>url_argsr<73>Zwildcard_filter)r<><00>re_matchrr<00>getargshs zRouter.add.<locals>.getargscs <00>|<00><01><00>S)N)r<>)r<>)r<>rrr<>qsz3Route <%s %s> overwrites a previously defined route)r<><00>default_filterr<72>r r<>r<><00>escaper<65>r<>r<><00>
setdefault<EFBFBD>build<6C>compiler<65><00>errorr<72>r$<00>
groupindexr<EFBFBD>r<><00>DEBUGr]r^<00>RuntimeWarningr<67>r<><00>_compile)rQr<><00>method<6F>targetr<74><00>anons<6E>keys<79>patternr<6E>Z is_staticrj<00>moder<65><00>maskZ in_filterZ
out_filterZ
re_patternr<EFBFBD><00>flatpatZ
whole_rule<EFBFBD>msgr)r<>r<>r<00>add>sf 




 z
Router.addc Cs<>|j|}g}|j|<|j}xrtdt|<02>|<04>D]^}||||<00>}dd<03>|D<00>}d<04>dd<03>|D<00><01>}t<06>|<07>j}dd<07>|D<00>}|<03> ||f<02>q0WdS)Nrcss|]\}}}}|VqdS)Nr)<03>.0<EFBFBD>_r<5F>rrr<00> <genexpr><3E>sz"Router._compile.<locals>.<genexpr><3E>|css|]}d|VqdS)z(^%s$)Nr)r<>r<>rrrr<><00>scSsg|]\}}}}||f<02>qSrr)r<>r<>r<>r<>rrr<00>
<listcomp><3E>sz#Router._compile.<locals>.<listcomp>)
r<EFBFBD>r<><00>_MAX_GROUPS_PER_PATTERN<52>ranger<65><00>joinr<6E>r<>r<>r ) rQr<>Z all_rulesZ
comborulesZ maxgroupsr(Zsome<6D>combinedr<64>rrrr<><00>s
 zRouter._compilecs<>|j<00>|<01>}|std|<01><02>yRx t|<02>D]\}}|<06>d|<q&Wd<03><04>fdd<05>|D<00><01>}<07>s^|S|dt<05><00>Stk
r<EFBFBD>tdt<07>jd<00><01>YnXd S)
z2 Build an URL by filling the wildcards in a rule. zNo route with that name.zanon%dr<64>cs&g|]\}}|r|<02><00>|<01><01>n|<02>qSr)<01>pop)r<><00>n<>f)<01>queryrrr<><00>sz Router.build.<locals>.<listcomp><3E>?zMissing URL argument: %rrN) r<><00>getr<74><00> enumerater<65>r-<00>KeyErrorr$<00>args)rQ<00>_namer<65>r<>r<><00>irt<00>urlr)r<>rr<><00>s 
z Router.buildcCs<>|d<00><00>}|dpd}d}|dkr2d|ddg}n
d|dg}x<>|D]<5D>}||jkr<>||j|kr<>|j||\}}||r~||<03>nifS||jkrBxH|j|D]:\}} ||<03>}
|
r<EFBFBD>| |
jd \}}||r<>||<03>nifSq<>WqBWtg<00>} t|<05>} x.t|j<01>| D]}||j|kr<>| <0B>|<02>q<>WxNt|j<02>| | D]8}x0|j|D]"\}} ||<03>}
|
<EFBFBD>r@| <0B>|<06><00>q@W<00>q0W| <0B>r<>d
<EFBFBD>t| <0B><01>} td d | d <0A><03>tddt |<03><00><02>dS)zD Return a (target, url_agrs) tuple or raise HTTPError(400/404/405). <20>REQUEST_METHOD<4F> PATH_INFO<46>/N<>HEAD<41>PROXY<58>GET<45>ANYr!<00>,i<>zMethod not allowed.)<01>Allowi<77>z Not found: )
<EFBFBD>upperr<72>r<><00> lastindexrer<>r<><00>sortedr<64><00>repr)rQ<00>environ<6F>verbr<62>r<><00>methodsr<73>r<>r<>r<>r<><00>allowedZnocheckZ allow_headerrrrr<><00>s<  


z Router.match)F)N)rSrTrUrwr<>r<>r<>rlr<>r<>r<>r<>r<>r<>r<>r<>r<>rrrrr<><00>s



F  r<>c@s|eZdZdZddd<04>Zdd<06>Zedd<08><00>Zd d
<EFBFBD>Zd d <0C>Z e
d d<0E><00>Z dd<10>Z dd<12>Z dd<14>Zdd<16>Zddd<18>Zdd<1A>ZdS)<1D>Routez<65> This class wraps a route callback along with route specific metadata and
configuration and applies Plugins on demand. It is also responsible for
turing an URL path rule into a regular expression usable by the Router.
Nc KsL||_||_||_||_|pd|_|p(g|_|p2g|_t<07>j|dd<02>|_ dS)NT)<01>make_namespaces)
<EFBFBD>appr<70>r<><00>callbackr<6B><00>plugins<6E>skiplist<73>
ConfigDict<EFBFBD> load_dict<63>config) rQr<>r<>r<>r<>r<>r<>r<>r<>rrrrl<00>s


zRoute.__init__cOstd<01>|j||<02>S)Nz<4E>Some APIs changed to return Route() instances instead of callables. Make sure to use the Route.call method and not to call Route instances directly.)rb<00>call)rQr<r[rrrr9<00>szRoute.__call__cCs|<00><00>S)z<> The route callback with all plugins applied. This property is
created on demand and then cached to speed up subsequent requests.)<01>_make_callback)rQrrrr<><00>sz
Route.callcCs|j<00>dd<02>dS)zk Forget any cached values. The next time :attr:`call` is accessed,
all plugins are re-applied. r<>N)ryr<>)rQrrr<00>reset<65>sz Route.resetcCs
|jdS)z: Do all on-demand work immediately (useful for debugging).N)r<>)rQrrr<00>prepare<72>sz Route.preparec
Cs0td<01>t|j|j|j|j|j|j|j|j d<02>S)Nz=Switch to Plugin API v2 and access the Route object directly.)r<>r<>r<>r<>r<>r<><00>apply<6C>skip)
rbrfr<>r<>r<>r<>r<>r<>r<>r<>)rQrrr<00>_context<78>s zRoute._contextccs<>t<00>}xxt|jj|j<00>D]b}d|jkr*Pt|dd<03>}|rN||jks||krNq||jkst|<02>|jkrhq|rv|<01>|<03>|VqWdS)z) Yield all Plugins affecting this route. Tr<54>FN)re<00>reversedr<64>r<>r<>rp<00>typer<65>)rQ<00>uniquer<65>r<>rrr<00> all_plugins<6E>s
 
zRoute.all_pluginsc Cs<>|j}x<>|<00><01>D]v}yBt|d<01>rLt|dd<03>}|dkr8|n|j}|<02>||<04>}n||<01>}Wntk
rn|<00><07>SX||jk rt||j<00>qW|S)Nr<4E><00>apir!) r<>r<>r:rpr<>r<>r~r<>rW)rQr<><00>pluginr<6E><00>contextrrrr<> s
  

zRoute._make_callbackcCsT|j}t|trdnd|<01>}tr"dnd}x(t||<02>rNt||<02>rNt||<02>dj}q(W|S)zq Return the callback. If the callback is a decorated function, try to
recover the original function. <20>__func__Zim_func<6E> __closure__Z func_closurer)r<>rp<00>py3kr:<00> cell_contents)rQroZ closure_attrrrr<00>get_undecorated_callbacks  zRoute.get_undecorated_callbackcCst|<00><01><00>dS)z<> Return a list of argument names the callback (most likely) accepts
as keyword arguments. If the callback is a decorated function, try
to recover the original function before inspection. r)rr)rQrrr<00>get_callback_args#szRoute.get_callback_argscCs,x&|j|jjfD]}||kr||SqW|S)zp Lookup a config field and return its value, first checking the
route.config, then route.app.config.)r<>r<>Zconifg)rQrjr r<>rrr<00>
get_config)s zRoute.get_configcCs|<00><00>}d|j|j|fS)Nz
<%s %r %r>)rr<>r<>)rQ<00>cbrrr<00>__repr__0szRoute.__repr__)NNN)N)rSrTrUrwrlr9rxr<>r<>r<><00>propertyr<79>r<>r<>rrrr rrrrr<><00>s
   

r<>c@seZdZdZdCdd<04>Zedd<06>ZdZdZe d d
<EFBFBD><00>Z
d d <0C>Z d d<0E>Z dd<10>Z dd<12>Zdd<14>Zdd<16>Zdd<18>Zdd<1A>ZdDdd<1D>Zdd<1F>Zd d!<21>Zd"d#<23>Zd$d%<25>Zd&d'<27>ZdEd)d*<2A>ZdFd+d,<2C>ZdGd.d/<2F>ZdHd1d2<64>ZdId4d5<64>ZdJd7d8<64>Zd9d:<3A>Zd;d<<3C>Z dKd=d><3E>Z!d?d@<40>Z"dAdB<64>Z#dS)L<>Bottlea^ Each Bottle object represents a single, distinct web application and
consists of routes, callbacks, plugins, resources and configuration.
Instances are callable WSGI applications.
:param catchall: If true (default), handle all exceptions. Turn off to
let debugging middleware handle exceptions.
TcCs<>t<00>|_t<02>|jd<01>|j_|j<01>ddt<07>|j<01>ddt<07>||jd<||jd<t<08>|_ g|_
t <0B>|_ i|_ g|_|jdr<>|<00>t<10><00>|<00>t<11><00>dS)Nr<4E><00>autojson<6F>validate<74>catchall)r<>r<>rV<00>partial<61> trigger_hook<6F>
_on_change<EFBFBD>meta_set<65>bool<6F>ResourceManager<65> resources<65>routesr<73><00>router<65> error_handlerr<72><00>install<6C>
JSONPlugin<EFBFBD>TemplatePlugin)rQrr rrrrlGs


 zBottle.__init__r<5F>r)<04>before_request<73> after_request<73> app_resetr<74>rcCstdd<02>|jD<00><01>S)Ncss|]}|gfVqdS)Nr)r<>r<>rrrr<>fsz Bottle._hooks.<locals>.<genexpr>)rf<00>_Bottle__hook_names)rQrrr<00>_hooksdsz Bottle._hookscCs2||jkr|j|<00>d|<02>n|j|<00>|<02>dS)a<> Attach a callback to a hook. Three hooks are currently implemented:
before_request
Executed once before each request. The request context is
available, but no routing has happened yet.
after_request
Executed once after each request regardless of its outcome.
app_reset
Called whenever :meth:`Bottle.reset` is called.
rN)<04>_Bottle__hook_reversedr <00>insertr )rQr<>rorrr<00>add_hookhs
zBottle.add_hookcCs0||jkr,||j|kr,|j|<00>|<02>dSdS)z Remove a callback from a hook. TN)r <00>remove)rQr<>rorrr<00> remove_hookxszBottle.remove_hookcs"<00><00>fdd<02>|j|dd<03>D<00>S)z. Trigger a hook and return a list of results. csg|]}|<01><00><01><01>qSrr)r<><00>hook)r<><00>kwargsrrr<><00>sz'Bottle.trigger_hook.<locals>.<listcomp>N)r )rQZ _Bottle__namer<65>r'r)r<>r'rr~szBottle.trigger_hookcs<00><00>fdd<02>}|S)ze Return a decorator that attaches a callback to a hook. See
:meth:`add_hook` for details.cs<00><01><00>|<00>|S)N)r#)ro)r<>rQrr<00> decorator<6F>s zBottle.hook.<locals>.decoratorr)rQr<>r(r)r<>rQrr&<00>sz Bottle.hookc s<>t<00>t<01>rtdd<02>dd<04>|<01>d<05>D<00>}|s4td<06><01>t|<04><01><01><00>fdd<08>}|<03>d d<02>|<03>d
d <0B>|<03>d |<01>d <0A><02>||d<|jdd<05>|<04>f|<03>|<01> d<05>s<>|jdd<05>|<04>f|<03>dS)a<> Mount an application (:class:`Bottle` or plain WSGI) to a specific
URL prefix. Example::
root_app.mount('/admin/', admin_app)
:param prefix: path prefix or `mount-point`. If it ends in a slash,
that slash is mandatory.
:param app: an instance of :class:`Bottle` or a WSGI application.
All other parameters are passed to the underlying :meth:`route` call.
z*Parameter order of Bottle.mount() changed.TcSsg|] }|r|<01>qSrr)r<>r<>rrrr<><00>sz Bottle.mount.<locals>.<listcomp>r<>zEmpty path prefix.c shzTt<00><01><02>tg<00><01>d<03>fdd<02> }<00>tj|<00>}|rF<72>jrFt<05><06>j|<01>}|pN<70>j<04>_<04>St<00><01> <00>XdS)NcsD|rz t|<02>Wdd}X|<00>_x|D]\}}<04><00>||<04>q$W<00>jjS)N)r=<00>status<75>
add_header<EFBFBD>bodyr )r)<00>
headerlistr#r<>rt)<01>rsrr<00>start_response<73>s z@Bottle.mount.<locals>.mountpoint_wrapper.<locals>.start_response)N)<07>request<73>
path_shift<EFBFBD> HTTPResponser<65>r+<00> itertools<6C>chain)r.r+)r<><00>
path_depth)r-r<00>mountpoint_wrapper<65>s
 
 z(Bottle.mount.<locals>.mountpoint_wrapperr<72>r<>r<>Z
mountpoint)r<>r<>r<>z /%s/<:re:.*>N)
rF<00>
basestringrb<00>splitr<74>r<>r<><00>router<65><00>endswith)rQr<>r<><00>options<6E>segmentsr5r)r<>r4r<00>mount<6E>s

  
z Bottle.mountcCs,t|t<01>r|j}x|D]}|<00>|<02>qWdS)z<> Merge the routes of another :class:`Bottle` application or a list of
:class:`Route` objects into this application. The routes keep their
'owner', meaning that the :data:`Route.app` attribute is not
changed. N)rFr r<00> add_route)rQrr8rrr<00>merge<67>s

z Bottle.mergecCsFt|d<01>r|<01>|<00>t|<01>s.t|d<02>s.td<03><01>|j<04>|<01>|<00><06>|S)z<> Add a plugin to the list of plugins and prepare it for being
applied to all routes of this application. A plugin may be a simple
decorator or an object that implements the :class:`Plugin` API.
<20>setupr<70>z.Plugins must be callable or implement .apply())r:r?<00>callable<6C> TypeErrorr<72>r r<>)rQr<>rrrr<00>s
 zBottle.installcCs<>g|}}xttt|j<02><01>ddd<02>D]X\}}|dksX||ksX|t|<01>ksXt|dd<03>|kr$|<02>|<01>|j|=t|d<05>r$|<01><07>q$W|r<>|<00><08>|S)a) Uninstall plugins. Pass an instance to remove a specific plugin, a type
object to remove all plugins that match that type, a string to remove
all plugins with a matching ``name`` attribute or ``True`` to remove all
plugins. Return the list of removed plugins. N<><4E><EFBFBD><EFBFBD><EFBFBD>Tr<54>rR) rdr<>r<>r<>rpr r:rRr<>)rQr<><00>removedr$r<>rrr<00> uninstall<6C>s
"

zBottle.uninstallNcCsl|dkr|j}nt|t<02>r"|g}n |j|g}x|D] }|<01><03>q4Wtr^x|D] }|<01><05>qNW|<00>d<02>dS)z<> Reset all routes (force plugins to be re-applied) and clear all
caches. If an ID or route object is given, only that specific route
is affected. Nr)rrFr<>r<>r<>r<>r)rQr8rrrrr<><00>s
 

z Bottle.resetcCs,x |jD]}t|d<01>r|<01><02>qWd|_dS)z2 Close the application and all installed plugins. rRTN)r<>r:rR<00>stopped)rQr<>rrrrR<00>s 
z Bottle.closecKst|f|<01>dS)z- Calls :func:`run` with the same parameters. N)<01>run)rQr'rrrrF<00>sz
Bottle.runcCs |j<00>|<01>S)z<> Search for a matching route and return a (:class:`Route` , urlargs)
tuple. The second value is a dictionary with parameters extracted
from the URL. Raise :exc:`HTTPError` (404/405) on a non-match.)rr<>)rQr<>rrrr<><00>sz Bottle.matchcKs>tj<01>dd<02><02>d<03>d}|jj|f|<02><01>d<03>}ttd|<03>|<04>S)z, Return a string that matches a named route <20> SCRIPT_NAMEr<45>r<>)r/r<>r<><00>striprr<><00>lstripr+)rQZ routename<6D>kargsZ
scriptname<EFBFBD>locationrrr<00>get_url<72>szBottle.get_urlcCs6|j<00>|<01>|jj|j|j||jd<01>tr2|<01><08>dS)zS Add a route object, but do not change the :data:`Route.app`
attribute.)r<>N) rr rr<>r<>r<>r<>r<>r<>)rQr8rrrr=s zBottle.add_router<65>c  sJt<00><03>rd<01><00>}t|<05><01>t|<06><01><06><00><01><02><03><04><05>fdd<03>}|rF||<03>S|S)a A decorator to bind a function to a request URL. Example::
@app.route('/hello/:name')
def hello(name):
return 'Hello %s' % name
The ``:name`` part is a wildcard. See :class:`Router` for syntax
details.
:param path: Request path or a list of paths to listen to. If no
path is specified, it is automatically generated from the
signature of the function.
:param method: HTTP method (`GET`, `POST`, `PUT`, ...) or a list of
methods to listen to. (default: `GET`)
:param callback: An optional shortcut to avoid the decorator
syntax. ``route(..., callback=func)`` equals ``route(...)(func)``
:param name: The name for this route. (default: None)
:param apply: A decorator or plugin or a list of plugins. These are
applied to the route callback in addition to installed plugins.
:param skip: A list of plugins, plugin classes or names. Matching
plugins are not installed to this route. ``True`` skips all.
Any additional keyword arguments are stored as route-specific
configuration and passed to plugins (see :meth:`Plugin.apply`).
Ncsrt|t<01>rt|<00>}xZt<03><03>p"t|<00>D]F}x@t<03><01>D]4}|<02><05>}t<06>|||f<04><02><04>d<01><03><00><02>}<03><05>|<03>q2Wq$W|S)N)r<>r<>r<>)rFr6<00>loadrg<00> yieldroutesr<73>r<>r=)r<>r<>r<>r8)r<>r<>r<>r<>r<>rQr<>rrr(&s
zBottle.route.<locals>.decorator)r@rg) rQr<>r<>r<>r<>r<>r<>r<>r(r)r<>r<>r<>r<>r<>rQr<>rr8s 

z Bottle.routecKs|j||f|<03>S)z Equals :meth:`route`. )r8)rQr<>r<>r:rrrr<>2sz
Bottle.get<65>POSTcKs|j||f|<03>S)z8 Equals :meth:`route` with a ``POST`` method parameter. )r8)rQr<>r<>r:rrr<00>post6sz Bottle.post<73>PUTcKs|j||f|<03>S)z7 Equals :meth:`route` with a ``PUT`` method parameter. )r8)rQr<>r<>r:rrr<00>put:sz
Bottle.put<75>DELETEcKs|j||f|<03>S)z: Equals :meth:`route` with a ``DELETE`` method parameter. )r8)rQr<>r<>r:rrr<00>delete>sz Bottle.delete<74><65>cs<00><00>fdd<02>}|S)z< Decorator: Register an output handler for a HTTP error codecs|<00>jt<01><00><|S)N)rr<>)<01>handler)<02>coderQrrrYDszBottle.error.<locals>.wrapperr)rQrWrYr)rWrQrr<>Bsz Bottle.errorcCsttt|d<01><02>S)N)<01>e)rK<00>template<74>ERROR_PAGE_TEMPLATE)rQ<00>resrrr<00>default_error_handlerIszBottle.default_error_handlerc
CsH|d}|d<trHy|<02>d<03><01>d<04>|d<Wntk
rFtdd<06>SXyj||d<t<05>|<01>t<07><06>z>|<00>d<08>|j <09>
|<01>\}}||d <||d
<||d <|j f|<04>S|<00>d <0C>XWn<>t k
r<EFBFBD>t <0A>Stk
r<EFBFBD>|<03><0F>|<00>|<01>Stttfk
<EFBFBD>r<00>Yn@tk
<EFBFBD>rB|j<15>s<1E>t<16>}|d <00>|<05>tddt <0A>|<05>SXdS)Nr<4E>zbottle.raw_pathr0rEi<>z#Invalid path string. Expected UTF-8z
bottle.apprz route.handlez bottle.routezroute.url_argsrz wsgi.errorsi<73>zInternal Server Error)rrHrM<00> UnicodeErrorr<72>r/<00>bind<6E>responserrr<>r<>r1r$r~r<><00>_handle<6C>KeyboardInterrupt<70>
SystemExit<EFBFBD> MemoryError<6F> Exceptionrrr')rQr<>r<>r8r<>Z
stacktracerrrr`Ls> 

 
zBottle._handlec
Csd|sdtkrdtd<gSt|ttf<02>rNt|dttf<02>rN|ddd<02><00>|<01>}t|t<05>rd|<01>tj<08>}t|t<04>r<>dtkr<>t |<01>td<|gSt|t
<EFBFBD>r<>|<01> t<00>|j <0C> |j|j<0F>|<01>}|<00>|<01>St|t<11>r<>|<01> t<00>|<00>|j<12>St|d<03><02>r"dtjk<06>rtjd|<01>St|d<05><02>st|d<06><02>s"t|<01>Sy*t|<01>}t|<03>}x|<04>sHt|<03>}<04>q6WWn<>tk
<EFBFBD>rh|<00>d<07>Stk
<EFBFBD>r<>t<1A>}YnNtttfk
<EFBFBD>r<><00>Yn2tk
<EFBFBD>r<>|j<1F>s<><73>t
dd t<1A>t <20><00>}YnXt|t<11><02>r<>|<00>|<04>St|t<04><02>rt!<21>"|g|<03>}nFt|t<05><02>r,d
d <0B>}t#|t!<21>"|g|<03><02>}nd t$|<04>}|<00>t
d|<07><02>St|d<05><02>r`t%||j&<26>}|S) z<> Try to convert the parameter into something WSGI compatible and set
correct HTTP headers when possible.
Support: False, str, unicode, dict, HTTPResponse, HTTPError, file-like,
iterable of strings and iterable of unicodes
zContent-Lengthr<00>readzwsgi.file_wrapperrR<00>__iter__r<5F>i<>zUnhandled exceptioncSs |<00>tj<02>S)N)rHr_<00>charset)r(rrrr)<00>r%zBottle._cast.<locals>.<lambda>zUnsupported response type: %s)'r_rFrcrdrIrGr<>rHrgr<>r<>r<>rr<><00> status_coder\<00>_castr1r+r:r/r<><00>WSGIFileWrapper<65>iterrB<00> StopIterationr$rarbrcrdrrr2r3r>r<><00>
_closeiterrR)rQ<00>out<75>peekZiout<75>firstZnew_iter<65>encoderr<72>rrrriosh
 
 




   

 
     z Bottle._castc
Cs<>yN|<00>|<00>|<01><01>}tjdks(|ddkr>t|d<04>r:|<03><05>g}|tjtj<07>|Stt t
fk
rj<00>Yn~t k
r<EFBFBD>|j s<><73>dt |<01>dd<07><02>}tr<>|dt tt<11><00><01>t t<12><00>f7}|d <00>|<04>d
g}|d |t<14><15><00>t|<04>gSXd S) z The bottle WSGI-interface. )<04>d<00>e<00><>i0r<>r<>rRz4<h1>Critical error while processing request: %s</h1>r<>r<>zD<h2>Error:</h2>
<pre>
%s
</pre>
<h2>Traceback:</h2>
<pre>
%s
</pre>
z wsgi.errors)z Content-Typeztext/html; charset=UTF-8z500 INTERNAL SERVER ERRORN)rir`r_<00> _status_coder:rR<00> _status_liner,rarbrcrdr<00> html_escaper<65>r<>r<>r$rr'r"r#rK)rQr<>r.rnrN<00>headersrrr<00>wsgi<67>s.
 
z Bottle.wsgicCs |<00>||<02>S)z9 Each instance of :class:'Bottle' is a WSGI application. )ry)rQr<>r.rrrr9<00>szBottle.__call__)TT)N)Nr<4E>NNNN)Nr<4E>)NrO)NrQ)NrS)rU)N)$rSrTrUrwrlrhrrr!rxr r#r%rr&r<r>rrDr<>rRrFr<>rLr=r8r<>rPrRrTr<>r\r`riryr9rrrrr >s@

 0
 

)




#
Hr c@s<>eZdZdZdZdZdqdd<06>Zedddd <09>d
d <0B><00>Zedd dd <09>d d<0E><00>Z edddd <09>dd<11><00>Z
e dd<13><00>Z e dd<15><00>Z edddd <09>dd<18><00>Zdrdd<1A>Zedddd <09>dd<1D><00>Zdsdd<1F>Zedd dd <09>d!d"<22><00>Zedd#dd <09>d$d%<25><00>Zedd&dd <09>d'd(<28><00>Zedd)dd <09>d*d+<2B><00>Zedd,dd <09>d-d.<2E><00>Zd/d0<64>Zd1d2<64>Zedd3dd <09>d4d5<64><00>Zd6d7<64>Ze d8d9<64><00>Ze d:d;<3B><00>ZeZedd<dd <09>d=d><3E><00>Ze d?d@<40><00>ZeddAdd <09>dBdC<64><00>Z e dDdE<64><00>Z!e dFdG<64><00>Z"e dHdI<64><00>Z#dtdKdL<64>Z$e dMdN<64><00>Z%e dOdP<64><00>Z&e dQdR<64><00>Z'e dSdT<64><00>Z(e dUdV<64><00>Z)e dWdX<64><00>Z*e dYdZ<64><00>Z+d[d\<5C>Z,dud]d^<5E>Z-d_d`<60>Z.dadb<64>Z/dcdd<64>Z0dedf<64>Z1dgdh<64>Z2didj<64>Z3dkdl<64>Z4dmdn<64>Z5dodp<64>Z6dS)v<> BaseRequestad A wrapper for WSGI environment dictionaries that adds a lot of
convenient access methods and properties. Most of them are read-only.
Adding new attributes to a request actually adds them to the environ
dictionary (as 'bottle.request.ext.<name>'). This is the recommended
way to store and access request-specific data.
r<>i<00>NcCs |dkr in||_||jd<dS)z! Wrap a WSGI environ dictionary. Nzbottle.request)r<>)rQr<>rrrrl<00>szBaseRequest.__init__z
bottle.appT)rkcCs td<01><01>dS)z+ Bottle application handling this request. z0This request is not connected to an application.N)<01> RuntimeError)rQrrrr<><00>szBaseRequest.appz bottle.routecCs td<01><01>dS)z= The bottle :class:`Route` object that matches this request. z)This request is not connected to a route.N)r{)rQrrrr8<00>szBaseRequest.routezroute.url_argscCs td<01><01>dS)z' The arguments extracted from the URL. z)This request is not connected to a route.N)r{)rQrrrr<><00>szBaseRequest.url_argscCsd|j<00>dd<03><02>d<01>S)z<> The value of ``PATH_INFO`` with exactly one prefixed slash (to fix
broken clients and avoid the "empty path" edge case). r<>r<>r<>)r<>r<>rI)rQrrrr<>szBaseRequest.pathcCs|j<00>dd<02><02><02>S)z6 The ``REQUEST_METHOD`` value as an uppercase string. r<>r<>)r<>r<>r<>)rQrrrr<>szBaseRequest.methodzbottle.request.headerscCs
t|j<01>S)zf A :class:`WSGIHeaderDict` that provides case-insensitive access to
HTTP request headers. )<02>WSGIHeaderDictr<74>)rQrrrrx szBaseRequest.headerscCs|j<00>||<02>S)zA Return the value of a request header, or a given default value. )rxr<>)rQr<>r rrr<00>
get_headerszBaseRequest.get_headerzbottle.request.cookiescCs(t|j<01>dd<02><02><01><03>}tdd<04>|D<00><01>S)z<> Cookies parsed into a :class:`FormsDict`. Signed cookies are NOT
decoded. Use :meth:`get_cookie` if you expect signed cookies. Z HTTP_COOKIEr<45>css|]}|j|jfVqdS)N)rjrt)r<><00>crrrr<>sz&BaseRequest.cookies.<locals>.<genexpr>)r2r<>r<><00>values<65> FormsDict)rQ<00>cookiesrrrr<>szBaseRequest.cookiescCsB|j<00>|<01>}|r:|r:t||<03>}|r6|d|kr6|dS|S|p@|S)a Return the content of a cookie. To read a `Signed Cookie`, the
`secret` must match the one used to create the cookie (see
:meth:`BaseResponse.set_cookie`). If anything goes wrong (missing
cookie or wrong signature), return a default value. rr!)r<>r<><00> cookie_decode)rQrjr <00>secretrt<00>decrrr<00>
get_cookies
 
zBaseRequest.get_cookiezbottle.request.querycCs@t<00>}|jd<t|j<01>dd<03><02>}x|D]\}}|||<q(W|S)a The :attr:`query_string` parsed into a :class:`FormsDict`. These
values are sometimes called "URL arguments" or "GET parameters", but
not to be confused with "URL wildcards" as they are provided by the
:class:`Router`. z
bottle.get<65> QUERY_STRINGr<47>)r<>r<><00>
_parse_qslr<EFBFBD>)rQr<><00>pairsrjrtrrrr<>)s
 zBaseRequest.queryzbottle.request.formscCs4t<00>}x(|j<01><02>D]\}}t|t<04>s|||<qW|S)a Form values parsed from an `url-encoded` or `multipart/form-data`
encoded POST or PUT request body. The result is returned as a
:class:`FormsDict`. All keys and values are strings. File uploads
are stored separately in :attr:`files`. )r<>rO<00>allitemsrF<00>
FileUpload)rQ<00>formsr<73><00>itemrrrr<>5s

 zBaseRequest.formszbottle.request.paramscCsJt<00>}x|j<01><02>D]\}}|||<qWx|j<03><02>D]\}}|||<q2W|S)z<> A :class:`FormsDict` with the combined values of :attr:`query` and
:attr:`forms`. File uploads are stored in :attr:`files`. )r<>r<>r<>r<>)rQ<00>paramsrjrtrrrr<>As   zBaseRequest.paramszbottle.request.filescCs4t<00>}x(|j<01><02>D]\}}t|t<04>r|||<qW|S)z<> File uploads parsed from `multipart/form-data` encoded POST or PUT
request body. The values are instances of :class:`FileUpload`.
)r<>rOr<>rFr<>)rQ<00>filesr<73>r<>rrrr<>Ls

 zBaseRequest.fileszbottle.request.jsoncCs@|j<00>dd<02><02><02><00>d<03>d}|dkr<|<00><04>}|s4dSt|<02>SdS)z<> If the ``Content-Type`` header is ``application/json``, this
property holds the parsed content of the request body. Only requests
smaller than :attr:`MEMFILE_MAX` are processed to avoid memory
exhaustion. <20> CONTENT_TYPEr<45><00>;rzapplication/jsonN)r<>r<><00>lowerr7<00>_get_body_string<6E>
json_loads)rQ<00>ctype<70>brrr<00>jsonXszBaseRequest.jsonccs@td|j<01>}x.|r:|t||<02><02>}|s&P|V|t|<04>8}qWdS)Nr)<04>max<61>content_length<74>minr<6E>)rQre<00>bufsize<7A>maxread<61>partrrr<00>
_iter_bodyfs zBaseRequest._iter_bodyccs.tdd<02>}td<03>td<04>td<05>}}}<06>x|d<06>}x<|dd<00>|krn|d<06>}||7}|s\|<03>t|<07>|kr4|<03>q4W|<07>|<05>\} }
}
ytt| <09><06><00>d<08>} Wntk
r<EFBFBD>|<03>YnX| d kr<>P|} xV| d k<04>r| s<>|t| |<02><02>} | d| <0B>| | d<00>} } | <0A>s|<03>| V| t| <0A>8} q<>W|d
<EFBFBD>|kr*|<03>q*WdS) Ni<4E>z*Error while parsing chunked transfer body.z
r<EFBFBD>r<>r!<00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rr) r<>rKr<><00> partitionr<6E><00>tonatrHr<>r<>)rQrer<>rNZrnZsem<65>bs<62>headerr~<00>sizer<65>r<><00>buffr<66>rrr<00> _iter_chunkedns:
 
  zBaseRequest._iter_chunkedzbottle.request.bodycCs<>|jr |jn|j}|jdj}t<05>dd}}}x\|||j<06>D]L}|<03>|<06>|t|<06>7}|s>||jkr>t dd<05>|}}|<03>|<07>
<EFBFBD><00>~d}q>W||jd<|<03> d<02>|S)Nz
wsgi.inputrFzw+b)r<>T) <0C>chunkedr<64>r<>r<>rer4<00> MEMFILE_MAXr'r<>r<00>getvalue<75>seek)rQZ body_iterZ read_funcr+Z body_sizeZ is_temp_filer<65><00>tmprrr<00>_body<64>s 
 

zBaseRequest._bodycCsT|j}||jkrtdd<02><02>|dkr,|jd}|j<03>|<01>}t|<02>|jkrPtdd<02><02>|S)z~ read body until content-length or MEMFILE_MAX into a string. Raise
HTTPError(413) on requests that are to large. i<>zRequest to largerr!)r<>r<>r<>r+rer<>)rQ<00>clenrrrrr<><00>s


 
zBaseRequest._get_body_stringcCs|j<00>d<01>|jS)al The HTTP request body as a seek-able file-like object. Depending on
:attr:`MEMFILE_MAX`, this is either a temporary file or a
:class:`io.BytesIO` instance. Accessing this property for the first
time reads and replaces the ``wsgi.input`` environ variable.
Subsequent accesses just do a `seek(0)` on the file object. r)r<>r<>)rQrrrr+<00>s zBaseRequest.bodycCsd|j<00>dd<03><02><02>kS)z( True if Chunked transfer encoding was. r<>ZHTTP_TRANSFER_ENCODINGr<47>)r<>r<>r<>)rQrrrr<><00>szBaseRequest.chunkedzbottle.request.postc Cst<00>}|j<01>d<01>sBtt|<00><05>d<02><02>}x|D]\}}|||<q*W|Sddi}x$dD]}||jkrP|j|||<qPWt|j|dd<07>}t r<>t
|dd d
d <0B>|d<n t r<>d |d <t j f|<06>}||d <|jp<>g}x<|D]4}|jr<>t|j|j|j|j<13>||j<q<>|j||j<q<>W|S)z<> The values of :attr:`forms` and :attr:`files` combined into a single
:class:`FormsDict`. Values are either strings (form values) or
instances of :class:`cgi.FieldStorage` (file uploads).
z
multipart/r0r<>r<>)r<>r<><00>CONTENT_LENGTHT)<03>fpr<70><00>keep_blank_valuesr<73>rE<00>
)r1<00>newliner1z_cgi.FieldStorage)r<><00> content_type<70>
startswithr<EFBFBD>r<>r<>r<>rfr+<00>py31rPr<00>cgi<67> FieldStoragerd<00>filenamer<65><00>filer<65>rxrt) rQrPr<>rjrtZsafe_envr<76>rr<>rrrrO<00>s2  


 


zBaseRequest.POSTcCs
|j<00><01>S)z<> The full request URI including hostname and scheme. If your app
lives behind a reverse proxy or load balancer and you get confusing
results, make sure that the ``X-Forwarded-Host`` header is set
correctly. )<02>urlparts<74>geturl)rQrrrr<><00>szBaseRequest.urlzbottle.request.urlpartscCs<>|j}|<01>d<01>p|<01>dd<03>}|<01>d<04>p.|<01>d<05>}|sn|<01>dd<07>}|<01>d<08>}|rn||dkr\d nd
krn|d |7}t|j<03>}t||||<01>d <0C>d <0A>S)z<> The :attr:`url` string as an :class:`urlparse.SplitResult` tuple.
The tuple contains (scheme, host, path, query_string and fragment),
but the fragment is always empty because it is not visible to the
server. ZHTTP_X_FORWARDED_PROTOzwsgi.url_scheme<6D>httpZHTTP_X_FORWARDED_HOSTZ HTTP_HOSTZ SERVER_NAMEz 127.0.0.1Z SERVER_PORT<52>80<38>443<34>:r<>r<>)r<>r<><00>urlquote<74>fullpath<74>UrlSplitResult)rQ<00>envr<76><00>host<73>portr<74>rrrr<><00>s 
 
zBaseRequest.urlpartscCst|j|j<02>d<01><01>S)z: Request path including :attr:`script_name` (if present). r<>)r+<00> script_namer<65>rI)rQrrrr<><00>szBaseRequest.fullpathcCs|j<00>dd<02>S)zh The raw :attr:`query` part of the URL (everything in between ``?``
and ``#``) as a string. r<>r<>)r<>r<>)rQrrr<00> query_string<6E>szBaseRequest.query_stringcCs(|j<00>dd<02><02>d<03>}|r$d|dSdS)z<> The initial portion of the URL's `path` that was removed by a higher
level (server or routing middleware) before the application was
called. This script path is returned with leading and tailing
slashes. rGr<>r<>)r<>r<>rH)rQr<>rrrr<>szBaseRequest.script_namer!cCs,|j<00>dd<02>}t||j|<01>\|d<|d<dS)z<> Shift path segments from :attr:`path` to :attr:`script_name` and
vice versa.
:param shift: The number of path segments to shift. May be negative
to change the shift direction. (default: 1)
rGr<>r<>N)r<>r<>r0r<>)rQ<00>shift<66>scriptrrrr0 szBaseRequest.path_shiftcCst|j<01>d<01>pd<02>S)z<> The request body length as an integer. The client is responsible to
set this header. Otherwise, the real length of the body is unknown
and -1 is returned. In this case, :attr:`body` will be empty. r<>rB)r<>r<>r<>)rQrrrr<>szBaseRequest.content_lengthcCs|j<00>dd<02><02><02>S)zA The Content-Type header as a lowercase-string (default: empty). r<>r<>)r<>r<>r<>)rQrrrr<>szBaseRequest.content_typecCs|j<00>dd<02>}|<01><02>dkS)z<> True if the request was triggered by a XMLHttpRequest. This only
works with JavaScript libraries that support the `X-Requested-With`
header (most of the popular libraries do). ZHTTP_X_REQUESTED_WITHr<48>Zxmlhttprequest)r<>r<>r<>)rQZrequested_withrrr<00>is_xhrszBaseRequest.is_xhrcCs|jS)z9 Alias for :attr:`is_xhr`. "Ajax" is not the right term. )r<>)rQrrr<00>is_ajax'szBaseRequest.is_ajaxcCs6t|j<01>dd<02><02>}|r|S|j<01>d<03>}|r2|dfSdS)a<> HTTP authentication data as a (user, password) tuple. This
implementation currently supports basic (not digest) authentication
only. If the authentication happened at a higher level (e.g. in the
front web-server or a middleware), the password field is None, but
the user field is looked up from the ``REMOTE_USER`` environ
variable. On any errors, None is returned. ZHTTP_AUTHORIZATIONr<4E>Z REMOTE_USERN)<03>
parse_authr<EFBFBD>r<>)rQ<00>basicZruserrrr<00>auth,s zBaseRequest.authcCs>|j<00>d<01>}|r$dd<03>|<01>d<04>D<00>S|j<00>d<05>}|r:|gSgS)a( A list of all IPs that were involved in this request, starting with
the client IP and followed by zero or more proxies. This does only
work if all proxies support the ```X-Forwarded-For`` header. Note
that this information can be forged by malicious clients. ZHTTP_X_FORWARDED_FORcSsg|] }|<01><00><00>qSr)rH)r<><00>iprrrr<>Asz,BaseRequest.remote_route.<locals>.<listcomp>r<>Z REMOTE_ADDR)r<>r<>r7)rQ<00>proxy<78>remoterrr<00> remote_route:s
  zBaseRequest.remote_routecCs|j}|r|dSdS)zg The client IP as a string. Note that this information can be forged
by malicious clients. rN)r<>)rQr8rrr<00> remote_addrEszBaseRequest.remote_addrcCst|j<01><02><00>S)zD Return a new :class:`Request` with a shallow :attr:`environ` copy. )<03>Requestr<74><00>copy)rQrrrr<>LszBaseRequest.copycCs|j<00>||<02>S)N)r<>r<>)rQrtr rrrr<>Pr%zBaseRequest.getcCs
|j|S)N)r<>)rQrjrrr<00> __getitem__Qr%zBaseRequest.__getitem__cCsd||<|j|=dS)Nr<4E>)r<>)rQrjrrr<00> __delitem__RszBaseRequest.__delitem__cCs
t|j<01>S)N)rkr<>)rQrrrrfSr%zBaseRequest.__iter__cCs
t|j<01>S)N)r<>r<>)rQrrr<00>__len__Tr%zBaseRequest.__len__cCs
|j<00><01>S)N)r<>r<>)rQrrrr<>Ur%zBaseRequest.keyscCsp|j<00>d<01>rtd<02><01>||j|<d}|dkr0d}n|dkr>d}n|<01>d<08>rLd }x|D]}|j<00>d
|d <0B>qRWd S) zA Change an environ value and clear all caches that depend on it. zbottle.request.readonlyz$The environ dictionary is read-only.rz
wsgi.input)r+r<>r<>r<>rPr<>r<>)r<>r<><00>HTTP_)rxr<>zbottle.request.N)r<>r<>r<>r<>r<>)rQrjrtZtodeleterrr<00> __setitem__Vs 


zBaseRequest.__setitem__cCsd|jj|j|jfS)Nz <%s: %s %s>)<04> __class__rSr<>r<>)rQrrrr iszBaseRequest.__repr__cCsLy&|jd|}t|d<02>r$|<02>|<00>S|Stk
rFtd|<00><01>YnXdS)z@ Search in self.environ for additional user defined attributes. zbottle.request.ext.%srszAttribute %r not defined.N)r<>r:rsr<>rX)rQr<><00>varrrr<00> __getattr__ls
zBaseRequest.__getattr__cCs(|dkrt<00>|||<02>S||jd|<dS)Nr<4E>zbottle.request.ext.%s)<03>object<63> __setattr__r<5F>)rQr<>rtrrrr<>tszBaseRequest.__setattr__)N)N)NN)r!)N)7rSrTrUrw<00> __slots__r<5F>rlrhr<>r8r<>r
r<>r<>rxr}r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r+r<>r<>rOr<>r<>r<>r<>r<>r0r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rfr<>r<>r<>r r<>r<>rrrrrz<00>sd
  

    
#   
     
rzcCs4d|ksd|ksd|kr$td|<00><01>|<00><01><00>dd<06>S)Nr<4E><00> <0A>z4Header names must not contain control characters: %rr<72><00>-)r<><00>title<6C>replace)rjrrr<00>_hkeyys r<>cCs0t|<00>}d|ks d|ks d|kr,td|<00><01>|S)Nr<4E>r<>r<>z4Header value must not contain control characters: %r)r<>r<>)rtrrr<00>_hvals r<>c@s.eZdZd dd<04>Zdd<06>Zdd<08>Zd d
<EFBFBD>ZdS) <0C>HeaderPropertyNr<4E>cCs.|||_|_|||_|_d|<01><04>|_dS)NzCurrent value of the %r header.)r<>r <00>reader<65>writerr<72>rw)rQr<>r<>r<>r rrrrl<00>szHeaderProperty.__init__cCs0|dkr |S|<01>|j|j<02>}|jr,|<00>|<03>S|S)N)r}r<>r r<>)rQrqrrrtrrrrs<00>szHeaderProperty.__get__cCs|jr|<00>|<02>n|||j<dS)N)r<>r<>)rQrqrtrrrru<00>szHeaderProperty.__set__cCs ||j=dS)N)r<>)rQrqrrrrv<00>szHeaderProperty.__delete__)NNr<4E>)rSrTrUrlrsrurvrrrrr<><00>s
r<>c@s4eZdZdZdZdZed<04>ed<05>d<06>Zd?d d
<EFBFBD>Zd@d d <0C>Z d d<0E>Z
dd<10>Z e dd<12><00>Z e dd<14><00>Zdd<16>Zdd<18>Ze eedd<19>Z[[e dd<1B><00>Zdd<1D>Zdd<1F>Zd d!<21>Zd"d#<23>ZdAd$d%<25>Zd&d'<27>Zd(d)<29>Zd*d+<2B>Ze d,d-<2D><00>Zed.<2E>Zed/ed0<64>Zed1d2d3<64>d4d3<64>d5<64>Z e dBd7d8<64><01>Z!dCd9d:<3A>Z"d;d<<3C>Z#d=d><3E>Z$dS)D<> BaseResponsea<65> Storage class for a response body as well as headers and cookies.
This class does support dict-like case-insensitive item-access to
headers, but is NOT a dict. Most notably, iterating over a response
yields parts of the body and not the headers.
:param body: The response body as one of the supported types.
:param status: Either an HTTP status code (e.g. 200) or a status line
including the reason phrase (e.g. '200 OK').
:param headers: A dictionary or a list of name-value pairs.
Additional keyword arguments are added to the list of headers.
Underscores in the header name are replaced with dashes.
<20><>ztext/html; charset=UTF-8)z Content-Type)r<>zContent-EncodingzContent-LanguagezContent-Lengthz Content-Rangez Content-Typez Content-Md5z Last-Modified)rti0r<>NcKs|d|_i|_||_|p|j|_|rRt|t<06>r4|<03><07>}x|D]\}}|<00>||<06>q:W|rxx |<04><07>D]\}}|<00>||<06>q`WdS)N) <09>_cookies<65>_headersr+<00>default_statusr)rFrf<00>itemsr*)rQr+r)rx<00> more_headersr<73>rtrrrrl<00>s 
zBaseResponse.__init__cCsf|pt}t|t<00>st<02>|<01>}|j|_tdd<02>|j<05><06>D<00><01>|_|jrbt<08>|_|j<07> |jj
dd<04><01>|S)z Returns a copy of self. css"|]\}}||dd<00>fVqdS)Nr)r<><00>k<>vrrrr<><00>sz$BaseResponse.copy.<locals>.<genexpr>r<>)r<>) r<><00>
issubclass<EFBFBD>AssertionErrorr)rfr<>r<>r<>r2rM<00>output)rQrrr<>rrrr<><00>szBaseResponse.copycCs
t|j<01>S)N)rkr+)rQrrrrf<00>szBaseResponse.__iter__cCst|jd<01>r|j<01><02>dS)NrR)r:r+rR)rQrrrrR<00>s zBaseResponse.closecCs|jS)z; The HTTP status line as a string (e.g. ``404 Not Found``).)rv)rQrrr<00> status_line<6E>szBaseResponse.status_linecCs|jS)z/ The HTTP status code as an integer (e.g. 404).)ru)rQrrrrh<00>szBaseResponse.status_codecCs<>t|t<01>r|t<02>|<01>}}n*d|kr>|<01><04>}t|<01><05>d<00>}ntd<03><01>d|krZdksdntd<06><01>||_t|pvd|<00>|_ dS)N<> rz+String status line without a reason phrase.rri<>zStatus code out of range.z
%d Unknown)
rFr<><00>_HTTP_STATUS_LINESr<53>rHr7r<>rur<>rv)rQr)rWrrr<00> _set_status<75>s
zBaseResponse._set_statuscCs|jS)N)rv)rQrrr<00> _get_status<75>szBaseResponse._get_statusaQ A writeable property to change the HTTP response status. It accepts
either a numeric code (100-999) or a string with a custom reason
phrase (e.g. "404 Brain not found"). Both :data:`status_line` and
:data:`status_code` are updated accordingly. The return value is
always a status string. cCst<00>}|j|_|S)zl An instance of :class:`HeaderDict`, a case-insensitive dict-like
view on the response headers. )<03>
HeaderDictr<EFBFBD>rf)rQZhdictrrrrx<00>szBaseResponse.headerscCst|<01>|jkS)N)r<>r<>)rQr<>rrr<00> __contains__<5F>r%zBaseResponse.__contains__cCs|jt|<01>=dS)N)r<>r<>)rQr<>rrrr<><00>r%zBaseResponse.__delitem__cCs|jt|<01>dS)NrB)r<>r<>)rQr<>rrrr<>r%zBaseResponse.__getitem__cCst|<02>g|jt|<01><dS)N)r<>r<>r<>)rQr<>rtrrrr<>r%zBaseResponse.__setitem__cCs|j<00>t|<01>|g<01>dS)z| Return the value of a previously defined header. If there is no
header with that name, return a default value. rB)r<>r<>r<>)rQr<>r rrrr}szBaseResponse.get_headercCst|<02>g|jt|<01><dS)zh Create a new response header, replacing any previously defined
headers with the same name. N)r<>r<>r<>)rQr<>rtrrr<00>
set_headerszBaseResponse.set_headercCs |j<00>t|<01>g<00><02>t|<02><01>dS)z= Add an additional response header, not removing duplicates. N)r<>r<>r<>r r<>)rQr<>rtrrrr* szBaseResponse.add_headercCs|jS)zx Yield (header, value) tuples, skipping headers that are not
allowed with the current response status code. )r,)rQrrr<00> iter_headersszBaseResponse.iter_headerscs<>g}t|j<01><02><00>}d|jkr.|<02>d|jgf<02>|j|jkrX|j|j<00><00>fdd<03>|D<00>}|dd<03>|D<00>7}|jr<>x(|j<07><08>D]}|<01>dt |<03>
<EFBFBD><00>f<02>q|Wt r<>dd<03>|D<00>}|S)z. WSGI conform list of (header, value) tuples. z Content-Typecsg|]}|d<00>kr|<01>qS)rr)r<><00>h)<01> bad_headersrrr<>sz+BaseResponse.headerlist.<locals>.<listcomp>cSs"g|]\}}|D] }||f<02>qqSrr)r<>r<><00>vals<6C>valrrrr<> sz
Set-CookiecSs$g|]\}}||<02>d<00><01>d<01>f<02>qS)rEr0)rHrM)r<>r<>r<>rrrr<>%s) rdr<>r<>r <00>default_content_typerurr<>rr<><00> OutputStringr)rQrnrxr~r)rrr,s
  zBaseResponse.headerlistz Content-TypezContent-Length)r<>ZExpirescCst<00>t|<00><01>S)N)r<00>utcfromtimestamp<6D>
parse_date)r(rrrr)+r%zBaseResponse.<lambda>cCst|<00>S)N)<01> http_date)r(rrrr),r%)r<>r<><00>UTF-8cCs,d|jkr(|j<00>d<01>d<00>d<03>d<00><02>S|S)zJ Return the charset specified in the content-type header (default: utf8). zcharset=rBr<>r)r<>r7rH)rQr rrrrg.s
zBaseResponse.charsetcKs<>|jst<01>|_|r&tt||f|<03><02>}nt|t<05>s8td<01><01>t|<02>dkrLtd<03><01>||j|<x<>|<04> <09>D]<5D>\}}|dkr<>t|t
<EFBFBD>r<>|j |j dd}|dkr<>t|t tf<02>r<>|<02><0F>}nt|ttf<02>r<>t<12>|<02>}t<12>d|<02>}||j||<05>d d
<EFBFBD><q`Wd S) a<> Create a new cookie or replace an old one. If the `secret` parameter is
set, create a `Signed Cookie` (described below).
:param name: the name of the cookie.
:param value: the value of the cookie.
:param secret: a signature key required for signed cookies.
Additionally, this method accepts all RFC 2109 attributes that are
supported by :class:`cookie.Morsel`, including:
:param max_age: maximum age in seconds. (default: None)
:param expires: a datetime object or UNIX timestamp. (default: None)
:param domain: the domain that is allowed to read the cookie.
(default: current domain)
:param path: limits the cookie to a given path (default: current path)
:param secure: limit the cookie to HTTPS connections (default: off).
:param httponly: prevents client-side javascript to read this cookie
(default: off, requires Python 2.6 or newer).
If neither `expires` nor `max_age` is set (default), the cookie will
expire at the end of the browser session (as soon as the browser
window is closed).
Signed cookies may store any pickle-able object and are
cryptographically signed to prevent manipulation. Keep in mind that
cookies are limited to 4kb in most browsers.
Warning: Signed cookies are not encrypted (the client can still see
the content) and not copy-protected (the client can restore an old
cookie). The main intention is to make pickling and unpickling
save, not to store secret information at client side.
z)Secret key missing for non-string Cookie.izCookie value to long.<2E>max_age<67>i<00>expiresz%a, %d %b %Y %H:%M:%S GMTr<54>r<>N)r<>r2r7<00> cookie_encoderFr6rAr<>r<>r<>r<00>seconds<64>days<79>datedater<00> timetupler<65>r<><00>time<6D>gmtime<6D>strftimer<65>)rQr<>rtr<>r:rjrrr<00>
set_cookie5s(!
 



 zBaseResponse.set_cookiecKs$d|d<d|d<|j|df|<02>dS)zq Delete a cookie. Be sure to use the same `domain` and `path`
settings as used to create the cookie. rBr
rr r<>N)r)rQrjr'rrr<00> delete_cookiemszBaseResponse.delete_cookiecCs4d}x*|jD] \}}|d|<02><01>|<03><02>f7}q W|S)Nr<4E>z%s: %s
)r,r<>rH)rQrnr<>rtrrrr tszBaseResponse.__repr__)r<>NN)N)N)r )N)%rSrTrUrwr<>rrerrlr<>rfrRr
r<>rhr<>r<>r)rxr<>r<>r<>r<>r}r<>r*r<>r,r<>r<>r<>r<>r rgrrr rrrrr<><00>sH 

    
    
8r<>csF|r td<01>t<01><02><00><00>fdd<03>}<01>fdd<05>}<02>fdd<07>}t|||d<08>S) Nz3local_property() is deprecated and will be removed.cs(y<06>jStk
r"td<01><01>YnXdS)Nz Request context not initialized.)r<>rXr{)rQ)<01>lsrr<00>fget~szlocal_property.<locals>.fgetcs
|<01>_dS)N)r<>)rQrt)rrr<00>fset<65>r%zlocal_property.<locals>.fsetcs<00>`dS)N)r<>)rQ)rrr<00>fdel<65>r%zlocal_property.<locals>.fdelzThread-local property)rb<00> threading<6E>localr
)r<>rrrr)rr<00>local_property{s   rc@seZdZdZejZe<07>ZdS)<03> LocalRequestaT A thread-local subclass of :class:`BaseRequest` with a different
set of attributes for each thread. There is usually only one global
instance of this class (:data:`request`). If accessed during a
request/response cycle, this instance always refers to the *current*
request (even on a multithreaded server). N) rSrTrUrwrzrlr^rr<>rrrrr<00>src@s4eZdZdZejZe<07>Ze<07>Z e<07>Z
e<07>Z e<07>Z dS)<03> LocalResponsea+ A thread-local subclass of :class:`BaseResponse` with a different
set of attributes for each thread. There is usually only one global
instance of this class (:data:`response`). Its attributes are used
to build the HTTP response at the end of the request/response cycle.
N) rSrTrUrwr<>rlr^rrvrur<>r<>r+rrrrr<00>srcs&eZdZd<07>fdd<04> Zdd<06>Z<04>ZS)r1r<>Nc stt|<00>j|||f|<04>dS)N)<03>superr1rl)rQr+r)rxr<>)r<>rrrl<00>szHTTPResponse.__init__cCs,|j|_|j|_|j|_|j|_|j|_dS)N)rurvr<>r<>r+)rQr_rrrr<><00>s
zHTTPResponse.apply)r<>NN)rSrTrUrlr<><00> __classcell__rr)r<>rr1<00>sr1cs"eZdZdZd<05>fdd<04> Z<04>ZS)r<>i<>Nc s&||_||_tt|<00>j||f|<05>dS)N)<05> exception<6F> tracebackr r<>rl)rQr)r+r"r#r:)r<>rrrl<00>szHTTPError.__init__)NNNN)rSrTrUr<>rlr!rr)r<>rr<><00>sr<>c@s eZdZdS)<02> PluginErrorN)rSrTrUrrrrr$<00>sr$c@s(eZdZdZdZefdd<04>Zdd<06>ZdS)rr<>rcCs
||_dS)N)r)rQrrrrrl<00>szJSONPlugin.__init__cs |j<00><01>s<0E>S<00><00>fdd<02>}|S)Ncsry<0E>||<01>}Wntk
r(t<01>}YnXt|t<03>rF<72>|<02>}dt_|St|t<06>rnt|jt<03>rn<72>|j<07>|_d|_|S)Nzapplication/json)r<>r$rFrfr_r<>r1r+)r<r[<00>rvZ json_response)r<>rrrrY<00>s 
 z!JSONPlugin.apply.<locals>.wrapper)r)rQr<>r8rYr)r<>rrr<><00>s
zJSONPlugin.applyN)rSrTrUr<>r<>rrlr<>rrrrr<00>s rc@s eZdZdZdZdZdd<05>ZdS)ra This plugin applies the :func:`view` decorator to all routes with a
`template` config parameter. If the parameter is a tuple, the second
element must be a dict with additional options (e.g. `template_engine`)
or default variables for the template. rYrcCs\|j<00>d<01>}t|ttf<02>r>t|<03>dkr>t|df|d<00>|<01>St|t<07>rTt|<03>|<01>S|SdS)NrYrrr!)r<>r<>rFrcrdr<><00>viewr<77>)rQr<>r8r<>rrrr<><00>s  
 zTemplatePlugin.applyN)rSrTrUrwr<>r<>r<>rrrrr<00>src@s&eZdZdd<02>Zddd<05>Zdd<07>ZdS) <09>_ImportRedirectcCsJ||_||_tj<03>|t<05>|<01><01>|_|jj<08> t
gg|d<01><04>tj <0B> |<00>dS)z@ Create a virtual package that redirects imports (see PEP 302). )<04>__file__<5F>__path__<5F>__all__<5F>
__loader__N) r<><00>impmaskr"<00>modulesr<73><00>imp<6D>
new_module<EFBFBD>modulery<00>updater(<00> meta_pathr )rQr<>r,rrrrl<00>s   z_ImportRedirect.__init__NcCs.d|kr dS|<01>dd<02>d}||jkr*dS|S)N<>.r!r)<02>rsplitr<74>)rQ<00>fullnamer<65>Zpacknamerrr<00> find_module<6C>s 
z_ImportRedirect.find_modulecCsb|tjkrtj|S|<01>dd<02>d}|j|}t|<03>tj|}tj|<t|j||<04>||_|S)Nr3r!)r"r-r4r,<00>
__import__r{r0r+)rQr5<00>modnameZrealnamer0rrr<00> load_modules

z_ImportRedirect.load_module)N)rSrTrUrlr6r9rrrrr'<00>s
r'c@s<>eZdZdZdd<03>Zdd<05>Zdd<07>Zdd <09>Zd
d <0B>Zd d <0A>Z dd<0F>Z
dd<11>Z e rzdd<13>Z dd<15>Zdd<17>Ze Ze ZeZeZn8dd<13>Z dd<15>Zdd<1B>Zdd<1D>Zdd<1F>Zd d!<21>Zd"d<17>Zd-d%d&<26>Zd'd(<28>Zd)d*<2A>Zd+d,<2C>ZeZeZd#S).<2E> MultiDictz<74> This dict stores multiple values per key, but behaves exactly like a
normal dict in that it returns only the newest value for any given key.
There are special methods available to access the full list of values.
cOs"tdd<02>t||<02><01><01>D<00><01>|_dS)Ncss|]\}}||gfVqdS)Nr)r<>r<>r<>rrrr<>sz%MultiDict.__init__.<locals>.<genexpr>)rfr<>)rQr<r<>rrrrlszMultiDict.__init__cCs
t|j<01>S)N)r<>rf)rQrrrr<> r%zMultiDict.__len__cCs
t|j<01>S)N)rkrf)rQrrrrf!r%zMultiDict.__iter__cCs
||jkS)N)rf)rQrjrrrr<>"r%zMultiDict.__contains__cCs |j|=dS)N)rf)rQrjrrrr<>#r%zMultiDict.__delitem__cCs|j|dS)NrB)rf)rQrjrrrr<>$r%zMultiDict.__getitem__cCs|<00>||<02>dS)N)r )rQrjrtrrrr<>%r%zMultiDict.__setitem__cCs
|j<00><01>S)N)rfr<>)rQrrrr<>&r%zMultiDict.keyscCsdd<02>|j<00><01>D<00>S)Ncss|]}|dVqdS)rBNr)r<>r<>rrrr<>)sz#MultiDict.values.<locals>.<genexpr>)rfr)rQrrrr)r%zMultiDict.valuescCsdd<02>|j<00><01>D<00>S)Ncss|]\}}||dfVqdS)rBNr)r<>r<>r<>rrrr<>*sz"MultiDict.items.<locals>.<genexpr>)rfr<>)rQrrrr<>*r%zMultiDict.itemscCsdd<02>|j<00><01>D<00>S)Ncss$|]\}}|D]}||fVqqdS)Nr)r<>r<><00>vlr<6C>rrrr<>,sz%MultiDict.allitems.<locals>.<genexpr>)rfr<>)rQrrrr<>+szMultiDict.allitemscCsdd<02>|j<00><01>D<00>S)NcSsg|] }|d<00>qS)rBr)r<>r<>rrrr<>3sz$MultiDict.values.<locals>.<listcomp>)rfr)rQrrrr3r%cCsdd<02>|j<00><01>D<00>S)NcSsg|]\}}||df<02>qS)rBr)r<>r<>r<>rrrr<>4sz#MultiDict.items.<locals>.<listcomp>)rfr<>)rQrrrr<>4r%cCs
|j<00><01>S)N)rf<00>iterkeys)rQrrrr<5r%zMultiDict.iterkeyscCsdd<02>|j<00><01>D<00>S)Ncss|]}|dVqdS)rBNr)r<>r<>rrrr<>6sz'MultiDict.itervalues.<locals>.<genexpr>)rf<00>
itervalues)rQrrrr=6r%zMultiDict.itervaluescCsdd<02>|j<00><01>D<00>S)Ncss|]\}}||dfVqdS)rBNr)r<>r<>r<>rrrr<>8sz&MultiDict.iteritems.<locals>.<genexpr>)rf<00> iteritems)rQrrrr>7szMultiDict.iteritemscCsdd<02>|j<00><01>D<00>S)Ncss$|]\}}|D]}||fVqqdS)Nr)r<>r<>r;r<>rrrr<>:sz)MultiDict.iterallitems.<locals>.<genexpr>)rfr>)rQrrr<00> iterallitems9szMultiDict.iterallitemscCsdd<02>|j<00><01>D<00>S)NcSs"g|]\}}|D] }||f<02>qqSrr)r<>r<>r;r<>rrrr<><sz&MultiDict.allitems.<locals>.<listcomp>)rfr>)rQrrrr<>;sNrBcCs8y|j||}|r||<05>S|Stk
r2YnX|S)a<> Return the most recent value for a key.
:param default: The default value to be returned if the key is not
present or the type conversion fails.
:param index: An index for the list of available values.
:param type: If defined, this callable is used to cast the value
into a specific type. Exception are suppressed and result in
the default value to be returned.
)rfrd)rQrjr <00>indexr<78>rrrrr<>>s
z MultiDict.getcCs|j<00>|g<00><02>|<02>dS)z5 Add a new value to the list of values for this key. N)rfr<>r )rQrjrtrrrr OszMultiDict.appendcCs|g|j|<dS)z1 Replace the list of values with a single value. N)rf)rQrjrtrrrr<>SszMultiDict.replacecCs|j<00>|<01>pgS)z5 Return a (possibly empty) list of values for a key. )rfr<>)rQrjrrr<00>getallWszMultiDict.getall)NrBN)rSrTrUrwrlr<>rfr<>r<>r<>r<>r<>rrr<>r<>r<r=r>r?r<>r r<>rAZgetone<6E>getlistrrrrr:s<
r:csLeZdZdZdZdZd dd<06>Zddd<08>Zdd d
<EFBFBD>Ze <09>f<01>fd d <0C> Z
<EFBFBD>Z S)r<>a<> This :class:`MultiDict` subclass is used to store request form data.
Additionally to the normal dict-like item access methods (which return
unmodified data as native strings), this container also supports
attribute-like access to its values. Attributes are automatically de-
or recoded to match :attr:`input_encoding` (default: 'utf8'). Missing
attributes default to an empty string. rETNcCsHt|t<01>r&|jr&|<01>d<01><01>|p"|j<05>St|t<06>r@|<01>|p<|j<05>S|SdS)Nr0)rFrG<00>recode_unicoderHrM<00>input_encodingrI)rQr8r1rrr<00>_fixns

zFormsDict._fixcCsRt<00>}|p|j}|_d|_x0|<00><03>D]$\}}|<02>|<00>||<03>|<00>||<03><02>q&W|S)z<> Returns a copy with all keys and values de- or recoded to match
:attr:`input_encoding`. Some libraries (e.g. WTForms) want a
unicode dictionary. F)r<>rDrCr<>r rE)rQr1r<>rJrjrtrrrrMvs  zFormsDict.decodec Cs.y|<00>|||<03>Sttfk
r(|SXdS)z7 Return the value as a unicode string, or the default. N)rEr]r<>)rQr<>r r1rrr<00>
getunicode<EFBFBD>szFormsDict.getunicodecs2|<01>d<01>r$|<01>d<01>r$tt|<00><02>|<01>S|j||d<02>S)N<>__)r )r<>r9r r<>r<>rF)rQr<>r )r<>rrr<><00>szFormsDict.__getattr__)N)N)NN) rSrTrUrwrDrCrErMrFrGr<>r!rr)r<>rr<>`s

r<>c@sbeZdZdZdd<03>Zdd<05>Zdd<07>Zdd <09>Zd
d <0B>Zd d <0A>Z dd<0F>Z
dd<11>Z ddd<15>Z dd<17>Z dS)r<>zz A case-insensitive version of :class:`MultiDict` that defaults to
replace the old value instead of appending it. cOsi|_|s|r|j||<02>dS)N)rfr1)rQr<r[rrrrl<00>szHeaderDict.__init__cCst|<01>|jkS)N)r<>rf)rQrjrrrr<><00>r%zHeaderDict.__contains__cCs|jt|<01>=dS)N)rfr<>)rQrjrrrr<><00>r%zHeaderDict.__delitem__cCs|jt|<01>dS)NrB)rfr<>)rQrjrrrr<><00>r%zHeaderDict.__getitem__cCst|<02>g|jt|<01><dS)N)r<>rfr<>)rQrjrtrrrr<><00>r%zHeaderDict.__setitem__cCs |j<00>t|<01>g<00><02>t|<02><01>dS)N)rfr<>r<>r r<>)rQrjrtrrrr <00>r%zHeaderDict.appendcCst|<02>g|jt|<01><dS)N)r<>rfr<>)rQrjrtrrrr<><00>r%zHeaderDict.replacecCs|j<00>t|<01><01>pgS)N)rfr<>r<>)rQrjrrrrA<00>r%zHeaderDict.getallNrBcCst<00>|t|<01>||<03>S)N)r:r<>r<>)rQrjr r@rrrr<><00>szHeaderDict.getcCs.x(dd<02>|D<00>D]}||jkr|j|=qWdS)Ncss|]}t|<01>VqdS)N)r<>)r<>r<>rrrr<><00>sz$HeaderDict.filter.<locals>.<genexpr>)rf)rQ<00>namesr<73>rrr<00>filter<65>s
zHeaderDict.filter)NrB)rSrTrUrwrlr<>r<>r<>r<>r r<>rAr<>rIrrrrr<><00>s
r<>c@sfeZdZdZdZdd<04>Zdd<06>Zddd <09>Zd
d <0B>Zd d <0A>Z dd<0F>Z
dd<11>Z dd<13>Z dd<15>Z dd<17>ZdS)r|a  This dict-like class wraps a WSGI environ dict and provides convenient
access to HTTP_* fields. Keys and values are native strings
(2.x bytes or 3.x unicode) and keys are case-insensitive. If the WSGI
environment contains non-native string values, these are de- or encoded
using a lossless 'latin1' character set.
The API will remain stable even on changes to the relevant PEPs.
Currently PEP 333, 444 and 3333 are supported. (PEP 444 is the only one
that uses non-native strings.)
)r<>r<>cCs
||_dS)N)r<>)rQr<>rrrrl<00>szWSGIHeaderDict.__init__cCs&|<01>dd<02><02><01>}||jkr|Sd|S)z6 Translate header field name to CGI/WSGI environ key. r<>r<>r<>)r<>r<><00>cgikeys)rQrjrrr<00>_ekey<65>s
zWSGIHeaderDict._ekeyNcCs|j<00>|<00>|<01>|<02>S)z: Return the header value as is (may be bytes or unicode). )r<>r<>rK)rQrjr rrr<00>raw<61>szWSGIHeaderDict.rawcCst|j|<00>|<01>d<01>S)Nr0)r<>r<>rK)rQrjrrrr<><00>szWSGIHeaderDict.__getitem__cCstd|j<00><01>dS)Nz%s is read-only.)rAr<>)rQrjrtrrrr<><00>szWSGIHeaderDict.__setitem__cCstd|j<00><01>dS)Nz%s is read-only.)rAr<>)rQrjrrrr<><00>szWSGIHeaderDict.__delitem__ccs\xV|jD]L}|dd<01>dkr8|dd<00><00>dd<04><02><02>Vq||jkr|<01>dd<04><02><02>VqWdS)N<>r<>r<>r<>)r<>r<>r<>rJ)rQrjrrrrf<00>s
 
zWSGIHeaderDict.__iter__cCsdd<02>|D<00>S)NcSsg|]}|<01>qSrr)r<>r(rrrr<><00>sz'WSGIHeaderDict.keys.<locals>.<listcomp>r)rQrrrr<><00>r%zWSGIHeaderDict.keyscCs t|<00><01><00>S)N)r<>r<>)rQrrrr<><00>r%zWSGIHeaderDict.__len__cCs|<00>|<01>|jkS)N)rKr<>)rQrjrrrr<><00>r%zWSGIHeaderDict.__contains__)N)rSrTrUrwrJrlrKrLr<>r<>r<>rfr<>r<>r<>rrrrr|<00>s

r|c@s<>eZdZdZdZGdd<04>de<05>Zdd<06>Zdd<08>Zd&d d <0C>Z d d<0E>Z
dd<10>Z dd<12>Z dd<14>Z dd<16>Zd'dd<19>Zdd<1B>Zdd<1D>Zdd<1F>Zd d!<21>Zd"d#<23>Zd$d%<25>ZdS)(r<>aH A dict-like configuration storage with additional support for
namespaces, validators, meta-data, on_change listeners and more.
This storage is optimized for fast read access. Retrieving a key
or using non-altering dict methods (e.g. `dict.get()`) has no overhead
compared to a native dict.
)<02>_metarc@s|eZdZdd<02>Zdd<04>Zdd<06>Zdd<08>Zd d
<EFBFBD>Zd d <0C>Zd d<0E>Z dd<10>Z
dd<12>Z dd<14>Z dd<16>Z dd<18>Zdd<1A>Zdd<1C>ZdS)zConfigDict.NamespacecCs||_||_dS)N)<02>_config<69>_prefix)rQr<><00> namespacerrrrl<00>szConfigDict.Namespace.__init__cCstd<01>|j|jd|S)Nz}Accessing namespaces as dicts is discouraged. Only use flat item access: cfg["names"]["pace"]["key"] -> cfg["name.space.key"]r3)rbrOrP)rQrjrrrr<><00>sz ConfigDict.Namespace.__getitem__cCs||j|jd|<dS)Nr3)rOrP)rQrjrtrrrr<><00>sz ConfigDict.Namespace.__setitem__cCs|j|jd|=dS)Nr3)rOrP)rQrjrrrr<><00>sz ConfigDict.Namespace.__delitem__ccsB|jd}x2|jD](}|<02>d<01>\}}}||jkr|r|VqWdS)Nr3)rPrO<00>
rpartition)rQZ ns_prefixrj<00>ns<6E>dotr<74>rrrrf<00>s

 zConfigDict.Namespace.__iter__cCsdd<02>|D<00>S)NcSsg|]}|<01>qSrr)r<>r(rrrr<><00>sz-ConfigDict.Namespace.keys.<locals>.<listcomp>r)rQrrrr<><00>r%zConfigDict.Namespace.keyscCs t|<00><01><00>S)N)r<>r<>)rQrrrr<><00>r%zConfigDict.Namespace.__len__cCs|jd||jkS)Nr3)rPrO)rQrjrrrr<><00>r%z!ConfigDict.Namespace.__contains__cCs
d|jS)Nz<Config.Namespace %s.*>)rP)rQrrrr <00>r%zConfigDict.Namespace.__repr__cCs
d|jS)Nz<Config.Namespace %s.*>)rP)rQrrr<00>__str__<5F>r%zConfigDict.Namespace.__str__cCs\td<01>||kr8|d<00><01>r8t<02>|j|jd|<00>||<||krR|<01>d<04>rRt|<01><01>|<00>|<01>S)NzAttribute access is deprecated.rr3rG) rb<00>isupperr<72><00> NamespacerOrPr<>rXr<>)rQrjrrrr<>s z ConfigDict.Namespace.__getattr__cCsd|dkr||j|<dStd<02>tt|<01>r0td<03><01>||krX||rXt|||j<06>rXtd<04><01>|||<dS)N)rOrPz#Attribute assignment is deprecated.zRead-only attribute.zNon-empty namespace attribute.)ryrbr:rArXrFr<>)rQrjrtrrrr<> s

 z ConfigDict.Namespace.__setattr__cCsL||krH|<00>|<01>}t||j<02>rH|d}x |D]}|<01>|<03>r,|||=q,WdS)Nr3)r<>rFr<>r<>)rQrjrr<>rrr<00> __delattr__s
 

z ConfigDict.Namespace.__delattr__cOstd<01>|j||<02>|S)Nz8Calling ConfDict is deprecated. Use the update() method.)rbr1)rQr<r[rrrr9s zConfigDict.Namespace.__call__N)rSrTrUrlr<>r<>r<>rfr<>r<>r<>r rUr<>r<>rXr9rrrrrW<00>s  rWcOs0i|_dd<02>|_|s|r,td<03>|j||<02>dS)NcSsdS)Nr)r<>rtrrrr)$r%z%ConfigDict.__init__.<locals>.<lambda>z-Constructor does no longer accept parameters.)rNrrbr1)rQr<r[rrrrl"s

zConfigDict.__init__cCsZt<00>}|<02>|<01>xD|<02><02>D]8}x2|<02>|<03>D]$\}}|dkrF|d|}|||<q*WqW|S)a Load values from an *.ini style config file.
If the config file contains sections, their names are used as
namespaces for the values within. The two special sections
``DEFAULT`` and ``bottle`` refer to the root namespace (no prefix).
)<02>DEFAULT<4C>bottler3)r5re<00>sectionsr<73>)rQr<>r<><00>sectionrjrtrrr<00> load_config)s
 zConfigDict.load_configr<67>Fc Cs<>||fg}x<>|r<>|<04><00>\}}t|t<02>s6tdt|<06><00><01>xx|<01><05>D]l\}}t|t<06>sbtdt|<06><00><01>|rr|d|n|}t|t<02>r<>|<04>||f<02>|r<>|<00>||<08>||<q@|||<q@Wq W|S)z<> Import values from a dictionary structure. Nesting can be used to
represent namespaces.
>>> ConfigDict().load_dict({'name': {'space': {'key': 'value'}}})
{'name.space.key': 'value'}
zSource is not a dict (r)zKey is not a string (%r)r3) r<>rFrfrAr<>r<>r6r rW) rQ<00>sourcerQr<><00>stackr<6B>rjrtZfull_keyrrrr<>9s
 


zConfigDict.load_dictcOs`d}|r4t|dt<01>r4|d<00>d<03>d}|dd<05>}x&t||<02><01><04>D]\}}||||<qDWdS)z<> If the first parameter is a string, all keys are prefixed with this
namespace. Apart from that it works just as the usual dict.update().
Example: ``update('some.namespace', key='value')`` r<>rr3r!N)rFr6rHrfr<>)rQr<r[r<>rjrtrrrr1Qs  zConfigDict.updatecCs||kr|||<||S)Nr)rQrjrtrrrr<>\szConfigDict.setdefaultcCsft|t<01>stdt|<01><00><01>|<00>|ddd<04><00>|<02>}||krH|||krHdS|<00>||<02>t<06>|||<02>dS)NzKey has type %r (not a string)rIcSs|S)Nr)r(rrrr)er%z(ConfigDict.__setitem__.<locals>.<lambda>)rFr6rAr<><00>meta_getrrfr<>)rQrjrtrrrr<>as
 zConfigDict.__setitem__cCst<00>||<01>dS)N)rfr<>)rQrjrrrr<>kszConfigDict.__delitem__cCsx|D]
}||=qWdS)Nr)rQrjrrr<00>clearns
zConfigDict.clearNcCs|j<00>|i<00><02>||<03>S)z- Return the value of a meta field for a key. )rNr<>)rQrj<00> metafieldr rrrr`rszConfigDict.meta_getcCs*||j<00>|i<00>|<||kr&||||<dS)zq Set the meta field for a key to a new value. This triggers the
on-change handler for existing keys. N)rNr<>)rQrjrbrtrrrrvszConfigDict.meta_setcCs|j<00>|i<00><02><02>S)z; Return an iterable of meta field names defined for a key. )rNr<>r<>)rQrjrrr<00> meta_list}szConfigDict.meta_listcCsPtd<01>||kr,|d<00><01>r,|<00>||<01>||<||krF|<01>d<03>rFt|<01><01>|<00>|<01>S)NzAttribute access is deprecated.rrG)rbrVrWr<>rXr<>)rQrjrrrr<><00>s zConfigDict.__getattr__cCsf||jkrt<01>|||<02>Std<01>tt|<01>r2td<02><01>||krZ||rZt|||j<07>rZtd<03><01>|||<dS)Nz#Attribute assignment is deprecated.zRead-only attribute.zNon-empty namespace attribute.)r<>rfr<>rbr:rXrFrW)rQrjrtrrrr<><00>s

 zConfigDict.__setattr__cCsL||krH|<00>|<01>}t||j<02>rH|d}x |D]}|<01>|<03>r,|||=q,WdS)Nr3)r<>rFrWr<>)rQrjrr<>rrrrX<00>s
 

zConfigDict.__delattr__cOstd<01>|j||<02>|S)Nz8Calling ConfDict is deprecated. Use the update() method.)rbr1)rQr<r[rrrr9<00>s zConfigDict.__call__)r<>F)N)rSrTrUrwr<>rArWrlr]r<>r1r<>r<>r<>rar`rrcr<>r<>rXr9rrrrr<><00>s$A
 


 r<>c@s"eZdZdZdd<03>Zddd<06>ZdS)<08>AppStackz> A stack-like list. Calling it returns the head of the stack. cCs|dS)z) Return the current default application. rBr)rQrrrr9<00>szAppStack.__call__NcCst|t<01>st<01>}|<00>|<01>|S)z1 Add a new :class:`Bottle` instance to the stack )rFr r )rQrtrrr<00>push<73>s

z AppStack.push)N)rSrTrUrwr9rerrrrrd<00>srdc@seZdZddd<03>Zdd<05>ZdS)rj<00>cCs<|||_|_x(dD] }t||<03>rt||t||<03><02>qWdS)N)<06>filenorRre<00> readlines<65>tellr<6C>)r<><00> buffer_sizer:r{rp)rQr<>rjrirrrrl<00>s

zWSGIFileWrapper.__init__ccs.|j|j}}x||<01>}|s dS|VqWdS)N)rjre)rQr<>rer<>rrrrf<00>s zWSGIFileWrapper.__iter__N)rf)rSrTrUrlrfrrrrrj<00>s
rjc@s*eZdZdZd dd<04>Zdd<06>Zdd<08>ZdS)
rmz<> This only exists to be able to attach a .close method to iterators that
do not support attribute assignment (most of itertools). NcCs||_t|<02>|_dS)N)<03>iteratorrg<00>close_callbacks)rQrkrRrrrrl<00>sz_closeiter.__init__cCs
t|j<01>S)N)rkrk)rQrrrrf<00>sz_closeiter.__iter__cCsx|jD]
}|<01>qWdS)N)rl)rQrorrrrR<00>s z_closeiter.close)N)rSrTrUrwrlrfrRrrrrrm<00>s
rmc@sDeZdZdZdedfdd<05>Zddd <09>Zd
d <0B>Zd d <0A>Zddd<10>ZdS)raf This class manages a list of search paths and helps to find and open
application-bound resources (files).
:param base: default value for :meth:`add_path` calls.
:param opener: callable used to open resources.
:param cachemode: controls which lookups are cached. One of 'all',
'found' or 'none'.
z./<2F>allcCs"t|_||_||_g|_i|_dS)N)<06>open<65>opener<65>base<73> cachemoder<65><00>cache)rQrprorqrrrrl<00>s
zResourceManager.__init__NFcCs<>tj<01>tj<01>|p|j<04><01>}tj<01>tj<01>|tj<01>|<01><01><02>}|tj7}||jkrX|j<01>|<01>|rrtj<01>|<01>srt<00> |<01>|dkr<>|j<01>
|<01>n|j<01> ||<01>|j <0C> <0A>tj<01>|<01>S)a Add a new path to the list of search paths. Return False if the
path does not exist.
:param path: The new search path. Relative paths are turned into
an absolute and normalized form. If the path looks like a file
(not ending in `/`), the filename is stripped off.
:param base: Path used to absolutize relative search paths.
Defaults to :attr:`base` which defaults to ``os.getcwd()``.
:param index: Position within the list of search paths. Defaults
to last index (appends to the list).
The `base` parameter makes it easy to reference files installed
along with a python module or package::
res.add_path('./resources/', __file__)
N)<0F>osr<73><00>abspath<74>dirnamerpr<><00>sepr$<00>isdir<69>makedirsr r"rrra<00>exists)rQr<>rpr@<00>createrrr<00>add_path<74>s

 

zResourceManager.add_pathccsr|jdd<01>}x^|rl|<01><01>}tj<00>|<02>s*qx>t<02>|<02>D]0}tj<00>||<03>}tj<00>|<04>r`|<01>|<04>q6|Vq6WqWdS)z: Iterate over all existing files in all registered paths. N)r<>r<>rsrw<00>listdirr<72>r )rQ<00>searchr<68>r<><00>fullrrrrf s  zResourceManager.__iter__cCsn||jkstrdx@|jD]6}tj<02>||<01>}tj<02>|<03>r|jdkrH||j|<|SqW|jdkrdd|j|<|j|S)z<> Search for a resource and return an absolute file path, or `None`.
The :attr:`path` list is searched in order. The first match is
returend. Symlinks are followed. The result is cached to speed up
future lookups. )rm<00>foundrmN)rrr<>r<>rsr<><00>isfilerq)rQr<>r<>Zfpathrrr<00>lookup s  



zResourceManager.lookup<75>rcOs4|<00>|<01>}|std|<00><01>|j|f|<03>d|i|<04><02>S)z= Find a resource and return a file object, or raise IOError. zResource %r not found.r<>)r<><00>IOErrorro)rQr<>r<>r<>r'<00>fnamerrrrn! s
 zResourceManager.open)NNF)r<>) rSrTrUrwrnrlr{rfr<>rrrrr<00>s 
 rc@sVeZdZddd<03>Zed<04>Zededd<07>Zddd <09>Ze d
d <0B><00>Z
dd d<0E>Z ddd<11>Z dS)r<>NcCs*||_||_||_|rt|<04>nt<03>|_dS)z Wrapper for file uploads. N)r<>r<><00> raw_filenamer<65>rx)rQ<00>fileobjr<6A>r<>rxrrrrl* szFileUpload.__init__z Content-TypezContent-LengthrB)r<>r cCs|j<00>||<02>S)z9 Return the value of a header within the mulripart part. )rxr<>)rQr<>r rrrr}8 szFileUpload.get_headercCs<>|j}t|t<02>s|<01>dd<02>}td|<01><02>dd<02><02>d<04>}tj<07>|<01> dtjj
<EFBFBD><02>}t <0B> dd|<01><03> <0A>}t <0B> dd |<01><03> d
<EFBFBD>}|d d <0C>p<>d S)a<> Name of the file on the client file system, but normalized to ensure
file system compatibility. An empty filename is returned as 'empty'.
Only ASCII letters, digits, dashes, underscores and dots are
allowed in the final filename. Accents are removed, if possible.
Whitespace is replaced by a single dash. Leading or tailing dots
or dashes are removed. The filename is limited to 255 characters.
rE<00>ignoreZNFKD<4B>ASCII<49>\z[^a-zA-Z0-9-_.\s]r<>z[-\s]+r<>z.-N<><4E><00>empty)r<>rFrGrMrrHrsr<><00>basenamer<65>rvr<>r<>rH)rQr<>rrrr<>< s

 zFileUpload.filename<6D>cCsH|jj|j|j<00><03>}}}x||<02>}|s,P||<06>qW|j<00>|<05>dS)N)r<>rer'rir<>)rQr<><00>
chunk_sizerer'r<><00>bufrrr<00>
_copy_fileO s zFileUpload._copy_fileFc Csrt|t<01>rbtj<03>|<01>r&tj<03>||j<06>}|s>tj<03>|<01>r>td<01><01>t |d<02><02>}|<00>
||<03>WdQRXn |<00>
||<03>dS)a<> Save file to disk or copy its content to an open file(-like) object.
If *destination* is a directory, :attr:`filename` is added to the
path. Existing files are not overwritten by default (IOError).
:param destination: File path, directory or file(-like) object.
:param overwrite: If True, replace existing files. (default: False)
:param chunk_size: Bytes to read at a time. (default: 64kb)
z File exists.<2E>wbN) rFr6rsr<>rwr<>r<>ryr<>rnr<>)rQZ destination<6F> overwriter<65>r<>rrr<00>saveW s
  zFileUpload.save)N)N)r<>)Fr<46>) rSrTrUrlr<>r<>r<>r<>r}rxr<>r<>r<>rrrrr<>( s

 
r<><00><><00>Unknown Error.cCst||<01><02>dS)z+ Aborts execution and causes a HTTP error. N)r<>)rW<00>textrrr<00>abortt sr<>cCsN|st<00>d<01>dkrdnd}tjtd<05>}||_d|_|<02>dttj |<00><02>|<02>dS) zd Aborts execution and causes a 303 or 302 redirect, depending on
the HTTP protocol version. ZSERVER_PROTOCOLzHTTP/1.1i/i.)rrr<>ZLocationN)
r/r<>r_r<>r1r)r+r<>r+r<>)r<>rWr[rrr<00>redirecty s r<><00>ccsD|<00>|<01>x4|dkr>|<00>t||<03><02>}|s*P|t|<04>8}|Vq WdS)zF Yield chunks from a range in a file. No chunk is bigger than maxread.rN)r<>rer<>r<>)r<>r<>rIr<>r<>rrr<00>_file_iter_range<67> s

 r<><00>auto<74>UTF-8cCsdtj<01>|<01>tj}tj<01>tj<01>||<00>d<01><01><02>}t<06>}|<00>|<01>sHtdd<03>Stj<01> |<00>r`tj<01>
|<00>sjtdd<05>St<00> |tj <0C>s<>tdd<06>S|dkr<>t <0A>|<00>\}}|r<>||d<|r<>|d d
<EFBFBD>d kr<>|r<>d |kr<>|d |7}||d<|<03>rtj<01>|dkr<>|n|<03>}d||d<t<00>|<00>}|j|d<}t<12>dt<12>|j<15><01>} | |d<tj<17>d<15>}
|
<EFBFBD>r^t|
<EFBFBD>d<16>d<00><05><00>}
|
d k <09>r<>|
t|j<15>k<05>r<>t<12>dt<12><14><00>|d<tfddi|<05><02>Stjdk<02>r<>dnt|d<1D>} d|d<tj<17>d <20>} d tjk<06>rXtt tjd |<08><02>} | <0C>s<>td!d"<22>S| d\} }d#| |d$|f|d%<t!|| <00>|d<| <0B>rDt"| | || <00>} t| fdd&i|<05><02>St| f|<05>S)'a<> Open a file in a safe way and return :exc:`HTTPResponse` with status
code 200, 305, 403 or 404. The ``Content-Type``, ``Content-Encoding``,
``Content-Length`` and ``Last-Modified`` headers are set if possible.
Special support for ``If-Modified-Since``, ``Range`` and ``HEAD``
requests.
:param filename: Name or path of the file to send.
:param root: Root path for file lookups. Should be an absolute directory
path.
:param mimetype: Defines the content-type header (default: guess from
file extension)
:param download: If True, ask the browser to open a `Save as...` dialog
instead of opening the file with the associated program. You can
specify a custom filename as a string. If not specified, the
original filename is used (default: False).
:param charset: The charset to use for files with a ``text/*``
mime-type. (default: UTF-8)
z/\i<>zAccess denied.i<>zFile does not exist.z/You do not have permission to access this file.r<>zContent-EncodingNrMztext/rgz ; charset=%sz Content-TypeTzattachment; filename="%s"zContent-DispositionzContent-Lengthz%a, %d %b %Y %H:%M:%S GMTz Last-ModifiedZHTTP_IF_MODIFIED_SINCEr<45>r<00>Dater)i0r<>r<><00>rbrIz Accept-RangesZ
HTTP_RANGEi<EFBFBD>zRequested Range Not Satisfiablezbytes %d-%d/%dr!z Content-Range<67><65>)#rsr<>rtrvr<>rHrfr<>r<>ryr<><00>access<73>R_OK<4F> mimetypes<65>
guess_typer<EFBFBD><00>stat<61>st_sizerrr<00>st_mtimer/r<>r<>rr7r<>r1r<>rnrd<00>parse_range_headerr<72>r<>)r<><00>root<6F>mimetype<70>downloadrgrxr1<00>statsr<73>Zlm<6C>imsr+<00>rangesr<73>r<>rrr<00> static_file<6C> sX



  
   
 r<>TcCs|rt<00>d<01>t|<00>adS)zS Change the debug level.
There is only one debug level supported at the moment.r N)r]<00> simplefilterrr<>)r<>rrr<00>debug<75> s
r<>cCsJt|ttf<02>r|<00><03>}nt|ttf<02>r0t<06>|<00>}t|t<08>sFt<06> d|<00>}|S)Nz%a, %d %b %Y %H:%M:%S GMT)
rFrr<00> utctimetupler<65>r<>rrr6r)rtrrrr<00> s


 rc CsVy4tj<01>|<00>}t<03>|dd<02>d<00>|dp,dtjStttt fk
rPdSXdS)zD Parse rfc1123, rfc850 and asctime timestamps and return UTC epoch. N<>)r<00> r)
<EFBFBD>email<69>utils<6C> parsedate_tzr<00>mktime<6D>timezonerAr<><00>
IndexError<EFBFBD> OverflowError)r<><00>tsrrrr<00> s
 (rc CsdyF|<00>dd<02>\}}|<01><01>dkrDtt<03>t|<02><01><01><01>dd<02>\}}||fSWnttfk
r^dSXdS)z] Parse rfc2617 HTTP authentication header string (basic) and return (user,pass) tuple or NoneNr!r<>r<>)r7r<>r7<00>base64<36> b64decoderKr<>r<>)r<>r<>r<00>user<65>pwdrrrr<><00> s  r<>c cs<>|r|dd<02>dkrdSdd<05>|dd<01><00>d<06>D<00>}x<>|D]<5D>\}}y~|sbtd|t|<04><00>|}}n0|svt|<03>|}}nt|<03>tt|<04>d|<01>}}d|kr<>|kr<>|kr<>nn
||fVWq:tk
r<EFBFBD>Yq:Xq:WdS) z~ Yield (start, end) ranges parsed from a HTTP Range header. Skip
unsatisfiable ranges. The end index is non-inclusive.Nr zbytes=cSs g|]}d|kr|<01>dd<01><02>qS)r<>r!)r7)r<>r<>rrrr<>
sz&parse_range_header.<locals>.<listcomp>r<>rr!)r7r<>r<>r<>r<>)r<><00>maxlenr<6E>r<>r<>rrrr<>
s"r<>cCs<>g}xx|<00>dd<02><02>d<02>D]b}|s"q|<02>dd<04>}t|<03>dkrD|<03>d<06>t|d<00>dd <09><02>}t|d<00>dd <09><02>}|<01>||f<02>qW|S)
Nr<EFBFBD><00>&<26>=r!rr<>r<00>+r<>)r<>r7r<>r <00>
urlunquote)<06>qsr<73><00>pair<69>nvrjrtrrrr<>
s 
r<>cCs*tdd<02>t||<01>D<00><01> o(t|<00>t|<01>kS)zs Compares two strings in a cryptographically safe way:
Runtime is not affected by length of common prefix. css"|]\}}||krdndVqdS)rr!Nr)r<>r(<00>yrrrr<>"
sz_lscmp.<locals>.<genexpr>)<03>sum<75>zipr<70>)r<r<>rrr<00>_lscmp
sr<>cCsDt<00>t<02>|d<01><02>}t<00>t<04>t|<01>|<02><02><07><00>}td<02>|td<03>|S)z> Encode and sign a pickle-able object. Return a (byte) string rB<00>!r<>)r<><00> b64encode<64>pickler<00>hmac<61>newrK<00>digest)rrjr<><00>sigrrrr %
sr cCs`t|<00>}t|<00>r\|<00>td<01>d<02>\}}t|dd<03>t<04>t<06>t|<01>|<03><02><08><00><01>r\t <09>
t<04> |<03><01>SdS)z? Verify and decode an encoded string. Return an object or None.r<>r!N) rK<00>cookie_is_encodedr7r<>r<>r<>r<>r<>r<>r<>rr<>)rrjr<>r<>rrrr<>,
s (r<>cCst|<00>td<01><01>otd<02>|k<06>S)z9 Return True if the argument looks like a encoded cookie.r<>r<>)rr<>rK)rrrrr<>6
sr<>cCs,|<00>dd<02><02>dd<04><02>dd<06><02>dd<08><02>d d
<EFBFBD>S) z; Escape HTML special characters ``&<>`` and quotes ``'"``. r<>z&amp;<3B><z&lt;<3B>>z&gt;<3B>"z&quot;<3B>'z&#039;)r<>)<01>stringrrrrw;
srwcCs$dt|<00><01>dd<03><02>dd<05><02>dd<07>S)z; Escape and quote a string to be used as an HTTP attribute.z"%s"r<>z&#10;r<>z&#13;<3B> z&#9;)rwr<>)r<>rrr<00>
html_quoteA
sr<>ccs<>d|j<00>dd<01><02>d<01>}t|<00>}t|d<00>t|dp6g<00>}|d|t|dd|<03><00>7}|Vx*|d|d<06>D]}|d|7}|VqtWdS)a<> Return a generator for routes that match the signature (name, args)
of the func parameter. This may yield more than one route if the function
takes optional keyword arguments. The output is best described by example::
a() -> '/a'
b(x, y) -> '/b/<x>/<y>'
c(x, y=5) -> '/c/<x>' and '/c/<x>/<y>'
d(x=5, y=6) -> '/d' and '/d/<x>' and '/d/<x>/<y>'
r<>rGrrz/<%s>N)rSr<>rIrr<>rc)ror<><00>specZargc<67>argrrrrNG
s
  rNr!c Cs |dkr||fS|<01>d<02><01>d<02>}|<00>d<02><01>d<02>}|rD|ddkrDg}|rX|ddkrXg}|dkr<>|t|<03>kr<>|d|<02>}||}||d<04>}nT|dkr<>|t|<04> kr<>||d<04>}||}|d|<02>}n|dkr<>dnd}td|<00><01>dd<02>|<04>}dd<02>|<03>}|<01>d<02><01>r|<03>r|d7}||fS)aS Shift path fragments from PATH_INFO to SCRIPT_NAME and vice versa.
:return: The modified paths.
:param script_name: The SCRIPT_NAME path.
:param script_name: The PATH_INFO path.
:param shift: The number of path fragments to shift. May be negative to
change the shift direction. (default: 1)
rr<>r<>NrGr<>z"Cannot shift. Nothing left from %s)rHr7r<>r<>r<>r9) r<>Z path_infor<6F><00>pathlistZ
scriptlist<EFBFBD>movedr<64>Znew_script_nameZ new_path_inforrrr0[
s.    r0<00>private<74> Access deniedcs<00><00><01>fdd<02>}|S)ze Callback decorator to require HTTP auth (basic).
TODO: Add route(check_auth=...) parameter. cs<00><01><00><02>fdd<02>}|S)NcsHtjpd\}}|dks <20>||<03>s>td<02><03>}|<04>dd<04><00>|S<00>||<01>S)N)NNi<4E>zWWW-AuthenticatezBasic realm="%s")r/r<>r<>r*)r<r[r<><00>passwordrN)<04>checkro<00>realmr<6D>rrrY~
s 
z.auth_basic.<locals>.decorator.<locals>.wrapperr)rorY)r<>r<>r<>)rorr(}
szauth_basic.<locals>.decoratorr)r<>r<>r<>r(r)r<>r<>r<>r<00>
auth_basicz
s r<>cs t<00>tt<03><00><02><01>fdd<02><08>}|S)zA Return a callable that relays calls to the current default app. cstt<01><00><00>||<01>S)N)rpr<>)r<r[)r<>rrrY<00>
sz)make_default_app_wrapper.<locals>.wrapper)rV<00>wrapsrpr )r<>rYr)r<>r<00>make_default_app_wrapper<65>
sr<>r8r<>rPrRrTr<>r<r&rrDrLc@s*eZdZdZd dd<05>Zdd<07>Zdd <09>Zd
S) <0C> ServerAdapterF<72> 127.0.0.1<EFBFBD><EFBFBD>cKs||_||_t|<02>|_dS)N)r:r<>r<>r<>)rQr<>r<>r:rrrrl<00>
szServerAdapter.__init__cCsdS)Nr)rQrVrrrrF<00>
szServerAdapter.runcCs*d<01>dd<03>|j<01><02>D<00><01>}d|jj|fS)Nz, cSs g|]\}}d|t|<02>f<00>qS)z%s=%s)r<>)r<>r<>r<>rrrr<><00>
sz*ServerAdapter.__repr__.<locals>.<listcomp>z%s(%s))r<>r:r<>r<>rS)rQr<>rrrr <00>
szServerAdapter.__repr__N)r<>r<>)rSrTrU<00>quietrlrFr rrrrr<><00>
s
r<>c@seZdZdZdd<03>ZdS)<05> CGIServerTcs(ddlm}<00>fdd<04>}|<02><00>|<03>dS)Nr)<01>
CGIHandlercs|<00>dd<02><00>||<01>S)Nr<4E>r<>)r<>)r<>r.)rVrr<00> fixed_environ<6F>
s z$CGIServer.run.<locals>.fixed_environ)Zwsgiref.handlersr<73>rF)rQrVr<>r<>r)rVrrF<00>
s  z CGIServer.runN)rSrTrUr<>rFrrrrr<><00>
sr<>c@seZdZdd<02>ZdS)<04>FlupFCGIServercCs:ddl}|j<01>d|j|jf<02>|jjj|f|j<01><01><08>dS)NrZ bindAddress) Zflup.server.fcgir:r<>r<>r<><00>serverZfcgi<67>
WSGIServerrF)rQrV<00>fluprrrrF<00>
szFlupFCGIServer.runN)rSrTrUrFrrrrr<><00>
sr<>c@seZdZdd<02>ZdS)<04> WSGIRefServercs<>ddlm<01>m}ddlm}ddl<04>G<00><00>fdd<05>d<05><00>}<04>j<05>d|<04>}<05>j<05>d|<02>}d<08>jkr<>t|d <09><02>j kr<>G<00>fd
d <0B>d |<06>}|<03>j<07>j
|||<05>}|<07> <0B>dS) Nr)<02>WSGIRequestHandlerr<72>)<01> make_servercs"eZdZdd<02>Z<03><00>fdd<04>ZdS)z'WSGIRefServer.run.<locals>.FixedHandlercSs
|jdS)Nr)<01>client_address)rQrrr<00>address_string<6E>
sz6WSGIRefServer.run.<locals>.FixedHandler.address_stringcs<00>js<12>j||<01>SdS)N)r<><00> log_request)r<><00>kw)r<>rQrrr<><00>
sz3WSGIRefServer.run.<locals>.FixedHandler.log_requestN)rSrTrUr<>r<>r)r<>rQrr<00> FixedHandler<65>
sr<>Z handler_classZ server_classr<73><00>address_familycseZdZ<02>jZdS)z%WSGIRefServer.run.<locals>.server_clsN)rSrTrU<00>AF_INET6r<36>r)<01>socketrr<00>
server_cls<EFBFBD>
sr<>) Zwsgiref.simple_serverr<72>r<>r<>r<>r:r<>r<>rp<00>AF_INETr<54><00> serve_forever)rQr<>r<>r<>r<>Z handler_clsr<73>Zsrvr)r<>rQr<>rrF<00>
s 
zWSGIRefServer.runN)rSrTrUrFrrrrr<><00>
sr<>c@seZdZdd<02>ZdS)<04>CherryPyServercCs<>ddlm}|j|jf|jd<||jd<|j<04>d<05>}|r@|jd=|j<04>d<06>}|rX|jd=|jf|j<04>}|rp||_|rz||_z |<05> <09>Wd|<05>
<EFBFBD>XdS)Nr)<01>
wsgiserverZ bind_addr<64>wsgi_app<70>certfile<6C>keyfile) <0B>cherrypyrr<>r<>r:r<>ZCherryPyWSGIServerZssl_certificateZssl_private_keyr<79><00>stop)rQrVrrrr<>rrrrF<00>
s" 
   zCherryPyServer.runN)rSrTrUrFrrrrr<00>
src@seZdZdd<02>ZdS)<04>WaitressServercCs"ddlm}|||j|jd<03>dS)Nr)<01>serve)r<>r<>)<04>waitressrr<>r<>)rQrVrrrrrF<00>
s zWaitressServer.runN)rSrTrUrFrrrrr<00>
src@seZdZdd<02>ZdS)<04> PasteServercCsNddlm}ddlm}|||j d<04>}|j|f|jt|j<08>d<05>|j <09><02>dS)Nr)<01>
httpserver)<01> TransLogger)Zsetup_console_handler)r<>r<>)
<EFBFBD>paster Zpaste.transloggerr r<>rr<>r<>r<>r:)rQrVr r rrrrF s
  zPasteServer.runN)rSrTrUrFrrrrr
 sr
c@seZdZdd<02>ZdS)<04>MeinheldServercCs,ddlm}|<02>|j|jf<02>|<02>|<01>dS)Nr)r<>)<06>meinheldr<64><00>listenr<6E>r<>rF)rQrVr<>rrrrF s zMeinheldServer.runN)rSrTrUrFrrrrr src@seZdZdZdd<03>ZdS)<05> FapwsServerzA Extremely fast webserver using libev. See http://www.fapws.org/ cs<>ddlm}ddlm}m}|j}t|jdd<00><00>dkr@t|<05>}|<02> |j
|<05>dt j krn|j sntd<06>td<07>|<02>|<03><00>fdd <09>}|<02>d
|f<02>|<02><11>dS) Nr)rpr<>r<>g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F> BOTTLE_CHILDz3WARNING: Auto-reloading does not work with Fapws3.
z/ (Fapws3 breaks python thread support)
csd|d<<00>||<01>S)NFzwsgi.multiprocessr)r<>r.)rVrrr<>! szFapwsServer.run.<locals>.appr<70>)Z fapws._evwsgiZ_evwsgiZfapwsrpr<>r<>r<>Z SERVER_IDENTr<54>r<>r<>rsr<>r<><00>_stderrZset_base_moduleZwsgi_cbrF)rQrVZevwsgirpr<>r<>r<>r)rVrrF s 
 zFapwsServer.runN)rSrTrUrwrFrrrrr src@seZdZdZdd<03>ZdS)<05> TornadoServerz< The super hyped asynchronous server by facebook. Untested. cCsVddl}ddl}ddl}|j<03>|<01>}|j<05>|<03>}|j|j|j d<02>|j
j <0B> <0C><00> <0A>dS)Nr)r<><00>address)Z tornado.wsgiZtornado.httpserverZtornado.ioloopryZ WSGIContainerr Z
HTTPServerrr<>r<>ZioloopZIOLoop<6F>instancer<65>)rQrV<00>tornado<64> containerr<72>rrrrF* s
  zTornadoServer.runN)rSrTrUrwrFrrrrr( src@seZdZdZdZdd<04>ZdS)<06>AppEngineServerz Adapter for Google App Engine. TcsDddlm<01>tj<03>d<03>}|r6t|d<04>s6<73><00>fdd<06>|_<06><01><07><00>dS)Nr)<01>utilr<00>maincs
<00><01><00><00>S)N)<01> run_wsgi_appr)rVrrrr); r%z%AppEngineServer.run.<locals>.<lambda>)Zgoogle.appengine.ext.webapprr"r-r<>r:rr)rQrVr0r)rVrrrF5 s
  zAppEngineServer.runN)rSrTrUrwr<>rFrrrrr2 src@seZdZdZdd<03>ZdS)<05> TwistedServerz Untested. cCszddlm}m}ddlm}ddlm}|<04>}|<06><07>|<05>dd|j <09>|<02>
|<03> |||<01><03>}|j |j ||jd<07>|<05><0F>dS)Nr)r<>ry)<01>
ThreadPool)<01>reactor<6F>after<65>shutdown)Z interface)Z twisted.webr<62>ryZtwisted.python.threadpoolrZtwisted.internetrr<>ZaddSystemEventTriggerrZSiteZ WSGIResourceZ listenTCPr<50>r<>rF)rQrVr<>ryrrZ thread_pool<6F>factoryrrrrFA s  zTwistedServer.runN)rSrTrUrwrFrrrrr? src@seZdZdZdd<03>ZdS)<05> DieselServerz Untested. cCs&ddlm}|||jd<03>}|<03><03>dS)Nr)<01>WSGIApplication)r<>)Zdiesel.protocols.wsgir$r<>rF)rQrVr$r<>rrrrFO s zDieselServer.runN)rSrTrUrwrFrrrrr#M sr#c@seZdZdZdd<03>ZdS)<05> GeventServerz<72> Untested. Options:
* `fast` (default: False) uses libevent's http server, but has some
issues: No streaming, no pipelining, no SSL.
* See gevent.wsgi.WSGIServer() documentation for more options.
cs<>ddlm}m}tt<04><02>|j<02>s,d}t|<04><01>|j<06>dd<00>rBtd<05>|j rRd|jd<|j
|j f}|j ||f|j<06><01>dt jkr<>ddl}|<06>|j<10>fdd <09><08><00><00><11>dS)
Nr)<02>pywsgirz9Bottle requires gevent.monkey.patch_all() (before import)<29>fastz<The "fast" option has been deprecated and removed by Gevent.<2E>logrcs<00><00><00>S)N)r)r8r<>)r<>rrr)i r%z"GeventServer.run.<locals>.<lambda>)rr&rrFrr{r:r<>rbr<>r<>r<>r<>rsr<><00>signal<61>SIGINTr<54>)rQrVr&rr<>rr)r)r<>rrF\ s
 
zGeventServer.runN)rSrTrUrwrFrrrrr%U sr%c@seZdZdd<02>ZdS)<04>GeventSocketIOServercCs2ddlm}|j|jf}|j||f|j<05><01><06>dS)Nr)r<>)Zsocketior<6F>r<>r<>ZSocketIOServerr:r<>)rQrVr<>rrrrrFn s  zGeventSocketIOServer.runN)rSrTrUrFrrrrr+m sr+c@seZdZdZdd<03>ZdS)<05>GunicornServerz? Untested. See http://gunicorn.org/configure.html for options. csTddlm}dd|jt|j<04>fi<01><00><00>|j<06>G<00><00>fdd<06>d|<02>}|<03><00><07>dS)Nr)<01> Applicationr^z%s:%dcs$eZdZ<02>fdd<02>Z<03>fdd<04>ZdS)z/GunicornServer.run.<locals>.GunicornApplicationcs<00>S)Nr)rQ<00>parser<65>optsr<73>)r<>rr<00>init} sz4GunicornServer.run.<locals>.GunicornApplication.initcs<00>S)Nr)rQ)rVrrrM<00> sz4GunicornServer.run.<locals>.GunicornApplication.loadN)rSrTrUr0rMr)r<>rVrr<00>GunicornApplication| s r1)Zgunicorn.app.baser-r<>r<>r<>r1r:rF)rQrVr-r1r)r<>rVrrFv s
  zGunicornServer.runN)rSrTrUrwrFrrrrr,t sr,c@seZdZdZdd<03>ZdS)<05>EventletServerz
Untested cCsfddlm}m}y$|j||j|jf<02>||j d<03>Wn,tk
r`|<02>||j|jf<02>|<01>YnXdS)Nr)ryr)Z
log_output)<08>eventletryrr<>r<>r<>r<>rA)rQrVryrrrrrF<00> s zEventletServer.runN)rSrTrUrwrFrrrrr2<00> sr2c@seZdZdZdd<03>ZdS)<05> RocketServerz Untested. cCs0ddlm}||j|jfdd|i<01>}|<03><04>dS)Nr)<01>Rocketryr)<05>rocketr5r<>r<>r<>)rQrVr5r<>rrrrF<00> s zRocketServer.runN)rSrTrUrwrFrrrrr4<00> sr4c@seZdZdZdd<03>ZdS)<05> BjoernServerz? Fast server written in C: https://github.com/jonashaag/bjoern cCs ddlm}|||j|j<03>dS)Nr)rF)<04>bjoernrFr<>r<>)rQrVrFrrrrF<00> s zBjoernServer.runN)rSrTrUrwrFrrrrr7<00> sr7c@s&eZdZdZeeeeegZ dd<03>Z
dS)<05>
AutoServerz Untested. c CsDx>|jD]4}y||j|jf|j<03><01>|<01>Stk
r:YqXqWdS)N)<06>adaptersr<73>r<>r:rFr)rQrV<00>sarrrrF<00> s
 zAutoServer.runN) rSrTrUrwrr
rrr<>r:rFrrrrr9<00> sr9)r<>r<>r r rr Zfapws3rZgaeZtwistedZdieselrZgunicornr3rZgeventSocketIOr6r8r<>cKs<>d|kr|<00>dd<02>n|df\}}|tjkr2t|<02>|s@tj|S|<00><04>rXttj||<00>S|<02>d<04>d}tj|||<td||f|<01>S)a<> Import a module or fetch an object from a module.
* ``package.module`` returns `module` as a module object.
* ``pack.mod:name`` returns the module variable `name` from `pack.mod`.
* ``pack.mod:func()`` calls `pack.mod.func()` and returns the result.
The last form accepts not only function calls, but any type of
expression. Keyword arguments passed to this function are available as
local variables. Example: ``import_string('re:compile(x)', x='[a-z]')``
r<>r!Nr3rz%s.%s)r7r"r-r7<00>isalnumrp<00>eval)r<>rQr0<00> package_namerrrrM<00> s 

rMc Cs@dta}z t<01><02>}t|<00>}t|<03>r(|S|St<01>|<02>|aXdS)z<> Load a bottle application from a module and make sure that the import
does not affect the current default application, but returns a separate
application object. See :func:`load` for the target parameter. TN)<06>NORUN<55> default_apprerMr@r$)r<>Znr_oldr<64>r%rrr<00>load_app<70> s

rA<00> 127.0.0.1<EFBFBD><EFBFBD>c  Ks<>trdS|<05>rtj<02>d<02><01>sz<>y<EFBFBD>d}
tjddd<05>\} }
t<01>| <0B>x<>tj<07>|
<EFBFBD>r<>t j
gt j } tj<02> <0C>} d| d<|
| d<t j| | d<08>}x&|<0E><0F>dkr<>t<01>|
d<01>t<11>|<04>q<>W|<0E><0F>d krBtj<07>|
<EFBFBD>r<>t<01>|
<EFBFBD>t <09>|<0E><0F><00>qBWWntk
r<EFBFBD>YnXWdtj<07>|
<EFBFBD><01>rt<01>|
<EFBFBD>XdS<00>yj|dk <09>r0t|<08>|<00>p:t<17>}t|t<19><02>rPt|<00>}t|<00><01>sftd
|<00><01>x|<07>ppgD]}|<00>|<0F><00>qrW|tk<06>r<>t<1E>|<01>}t|t<19><02>r<>t|<01>}t|t <20><02>r<>|f||d <0B>| <09><02>}t|t!<21><02>s<>td |<00><01>|j"<22>p<>||_"|j"<22>s,t#d t$t%|<01>f<00>t#d|j&|j'f<00>t#d<0F>|<05>rztj<02>d<07>}
t(|
|<04>}|<10>|<01>)|<00>WdQRX|j*dk<02>r<>t <09>d <09>n
|<01>)|<00>Wnjtk
<EFBFBD>r<>YnVt+t,fk
<EFBFBD>r<><00>Yn<|<05>t-|d|<06><03>s<>t.<2E>t<11>|<04>t <09>d <09>YnXdS)a<> Start a server instance. This method blocks until the server terminates.
:param app: WSGI application or target string supported by
:func:`load_app`. (default: :func:`default_app`)
:param server: Server adapter to use. See :data:`server_names` keys
for valid names or pass a :class:`ServerAdapter` subclass.
(default: `wsgiref`)
:param host: Server address to bind to. Pass ``0.0.0.0`` to listens on
all interfaces including the external one. (default: 127.0.0.1)
:param port: Server port to bind to. Values below 1024 require root
privileges. (default: 8080)
:param reloader: Start auto-reloading server? (default: False)
:param interval: Auto-reloader interval in seconds (default: 1)
:param quiet: Suppress output to stdout and stderr? (default: False)
:param options: Options passed to the server adapter.
Nrzbottle.z.lock)r<><00>suffix<69>trueZBOTTLE_LOCKFILE)r<>rzApplication is not callable: %r)r<>r<>z!Unknown or unsupported server: %rz,Bottle v%s server starting up (using %s)...
zListening on http://%s:%d/
zHit Ctrl-C to quit.
<EFBFBD>reloadr<64>)/r?rsr<>r<><00>tempfile<6C>mkstemprRr<>ryr"<00>
executable<EFBFBD>argvr<76><00>
subprocess<EFBFBD>Popen<65>poll<6C>utimer<00>sleep<65>unlink<6E>exitra<00>_debugr@rFr6rAr@r<>r<00> server_namesrMr<>r<>r<>r<00> __version__r<5F>r<>r<><00>FileCheckerThreadrFr)rbrcrpr)r<>r<>r<>r<><00>interval<61>reloaderr<72>r<>r<>rJ<00>lockfile<6C>fdr<64>r<>r<>r<>ZbgcheckrrrrF<00> s<>

  

 
  
 

     
  
rFc@s0eZdZdZdd<03>Zdd<05>Zdd<07>Zdd <09>Zd
S) rUzw Interrupt main-thread as soon as a changed module file is detected,
the lockfile gets deleted or gets to old. cCs$tj<01>|<00>|||_|_d|_dS)N)r<00>ThreadrlrXrVr))rQrXrVrrrrlM s zFileCheckerThread.__init__cCstjj}dd<02>}t<03>}xZttj<06><07><00>D]H}t|dd<04>p8d}|dd<00>dkrV|dd<07>}|r&||<05>r&||<05>||<q&Wx<>|j s<>||j
<EFBFBD>r<>||j
<EFBFBD>t <0B> <0B>|j dkr<>d |_ t <0A><0E>x<t|<03><0F><00>D],\}}||<05>r<>||<05>|kr<>d
|_ t <0A><0E>Pq<>Wt <0B>|j <0C>qtWdS) NcSs t<00>|<00>jS)N)rsr<>r<>)r<>rrrr)U r%z'FileCheckerThread.run.<locals>.<lambda>r(r<><00><><EFBFBD><EFBFBD><EFBFBD>)z.pyoz.pycrBrMr<>rF)rsr<>ryrfrdr"r-rrpr)rXrrV<00>thread<61>interrupt_mainr<6E>rO)rQry<00>mtimer<65>r0r<>ZlmtimerrrrFS s(  
zFileCheckerThread.runcCs |<00><00>dS)N)r<>)rQrrr<00> __enter__i szFileCheckerThread.__enter__cCs&|js d|_|<00><01>|dk o$t|t<03>S)NrQ)r)r<>r<>ra)rQ<00>exc_type<70>exc_val<61>exc_tbrrr<00>__exit__l szFileCheckerThread.__exit__N)rSrTrUrwrlrFr_rcrrrrrUI s
rUc@seZdZdd<02>ZdS)<04> TemplateErrorcCst<00>|d|<01>dS)Ni<4E>)r<>rl)rQr`rrrrl{ szTemplateError.__init__N)rSrTrUrlrrrrrdz srdc@sbeZdZdZddddgZiZiZddgdfdd <09>Zegfd
d <0B><01>Z ed d <0A><00>Z
dd<0F>Z dd<11>Z dS)<12> BaseTemplatez2 Base class and minimal API for template adapters <20>tpl<70>htmlZthtmlZstplNrEcKs<>||_t|d<01>r|<01><02>n||_t|d<02>r.|jnd|_dd<05>|D<00>|_||_|j<07><08>|_|j<07> |<05>|js<>|jr<>|<00>
|j|j<05>|_|js<>t dt |<02><00><01>|js<>|js<>t d<07><01>|j f|j<07>dS)a= Create a new template.
If the source parameter (str or buffer) is missing, the name argument
is used to guess a template filename. Subclasses can assume that
self.source and/or self.filename are set. Both are strings.
The lookup, encoding and settings parameters are stored as instance
variables.
The lookup parameter stores a list containing directory paths.
The encoding parameter should be used to decode byte strings or files.
The settings parameter contains a dict for engine-specific settings.
rer<>NcSsg|]}tj<01>|<01><01>qSr)rsr<>rt)r<>r(rrrr<><00> sz)BaseTemplate.__init__.<locals>.<listcomp>zTemplate %s not found.zNo template specified.)r<>r:rer^r<>r<>r1<00>settingsr<73>r1r}rdr<>r<>)rQr^r<>r<>r1rhrrrrl<00> s     zBaseTemplate.__init__cCs<>|std<01>dg}tj<02>|<01>r>tj<02>|<01>r>td<03>tj<02>|<01>Sx<>|D]x}tj<02>|<03>tj}tj<02>tj<02>||<01><02>}|<04>|<03>s|qDtj<02>|<04>r<>|Sx.|j D]$}tj<02>d||f<00>r<>d||fSq<>WqDWdS)z{ Search name in all directories specified in lookup.
First without, then with common extensions. Return first hit. z2The template lookup path list should not be empty.r3z,Absolute template path names are deprecated.z%s.%sN)
rbrsr<><00>isabsr<73>rtrvr<>r<><00>
extensions)rrr<>r<>Zspathr<68><00>extrrrr}<00> s  

  zBaseTemplate.searchcGs.|r |j<00><01>|_|d|j|<n
|j|SdS)zB This reads or sets the global settings stored in class.settings. rN)rhr<>)rrrjr<>rrr<00> global_config<69> s zBaseTemplate.global_configcKst<00>dS)z<> Run preparations (parsing, caching, ...).
It should be possible to call this again to refresh a template or to
update settings.
N)<01>NotImplementedError)rQr:rrrr<><00> szBaseTemplate.preparecOst<00>dS)aF Render the template with the specified local variables and return
a single byte or unicode string. If it is a byte string, the encoding
must match self.encoding. This method must be thread-safe!
Local variables may be provided in dictionaries (args)
or directly, as keywords (kwargs).
N)rm)rQr<>r'rrr<00>render<65> szBaseTemplate.render) rSrTrUrwrjrh<00>defaultsrl<00> classmethodr}rlr<>rnrrrrre s  rec@seZdZdd<02>Zdd<04>ZdS)<06> MakoTemplatecKs<>ddlm}ddlm}|<01>d|ji<01>|<01>dtt<08><01>|fd|j i|<01><02>}|j
rl||j
fd|i|<01><02>|_ n|f|j |j |d<08>|<01><02>|_ dS) Nr)<01>Template)<01>TemplateLookuprDZformat_exceptions<6E> directoriesr<73>)<03>urir<69>r<>)Z mako.templaterrZ mako.lookuprsr1r1r<>rr<>r<>r^rfr<>r<>)rQr:rrrsr<>rrrr<><00> s  zMakoTemplate.preparecOs:x|D]}|<02>|<03>qW|j<01><02>}|<04>|<02>|jjf|<04>S)N)r1ror<>rfrn)rQr<>r'<00>dictarg<72> _defaultsrrrrn<00> s



zMakoTemplate.renderN)rSrTrUr<>rnrrrrrq<00> s rqc@seZdZdd<02>Zdd<04>ZdS)<06>CheetahTemplatecKsdddlm}t<02><03>|_i|j_|jjg|d<|jrJ|fd|ji|<01><02>|_n|fd|ji|<01><02>|_dS)Nr)rrZ
searchListr^r<>) ZCheetah.Templaterrrrr<00>varsr^rfr<>)rQr:rrrrrr<><00> s 
zCheetahTemplate.preparecOsPx|D]}|<02>|<03>qW|jj<02>|j<03>|jj<02>|<02>t|j<05>}|jj<02><06>|S)N)r1rryror<>rfra)rQr<>r'rvrnrrrrn<00> s

 zCheetahTemplate.renderN)rSrTrUr<>rnrrrrrx<00> s
rxc@s,eZdZddifdd<03>Zdd<05>Zdd<07>ZdS)<08>Jinja2TemplateNcKs<>ddlm}m}d|kr td<04><01>|fd||j<04>i|<04><02>|_|rL|jj<06>|<01>|r^|jj<08>|<02>|rp|jj <09>|<03>|j
r<EFBFBD>|j<05> |j
<EFBFBD>|_ n|j<05> |j<0E>|_ dS)Nr)<02> Environment<6E>FunctionLoaderr<72>zsThe keyword argument `prefix` has been removed. Use the full jinja2 environment name line_statement_prefix instead.<2E>loader)Zjinja2r{r|r{r}r<>r<>r1<00>tests<74>globalsr^Z from_stringrfZ get_templater<65>)rQr<>r~rr'r{r|rrrr<><00> szJinja2Template.preparecOs:x|D]}|<02>|<03>qW|j<01><02>}|<04>|<02>|jjf|<04>S)N)r1ror<>rfrn)rQr<>r'rvrwrrrrn s



zJinja2Template.renderc Cs<|<00>||j<01>}|sdSt|d<01><02>}|<03><03><00>|j<05>SQRXdS)Nr<4E>)r}r<>rnrerMr1)rQr<>r<>r<>rrrr}
s
 zJinja2Template.loader)rSrTrUr<>rnr}rrrrrz<00> srzc@sXeZdZeddfdd<04>Zedd<06><00>Zedd<08><00>Zdd d
<EFBFBD>Zdd d <0C>Z d d<0E>Z
dd<10>Z dS)<13>SimpleTemplateFNc sJi|_|j<01><00>fdd<02>|_<02><00>fdd<02>|_||_|rF|j|j|_|_dS)Ncs
t|<00><00>S)N)r7)r()rJrrr) r%z(SimpleTemplate.prepare.<locals>.<lambda>cs<00>t|<00><00><02>S)N)r7)r()rJ<00> escape_funcrrr) r%)rrr1<00>_str<74>_escape<70>syntax)rQr<>Znoescaper<65>r[r)rJr<>rr<> szSimpleTemplate.preparecCst|j|jpdd<02>S)Nz<string>rD)r<>rWr<>)rQrrr<00>co szSimpleTemplate.coc Cs<>|j}|s*t|jd<01><02>}|<02><03>}WdQRXyt|<01>d}}Wn,tk
rhtd<03>t|d<04>d}}YnXt|||jd<05>}|<04> <09>}|j
|_
|S)Nr<4E>rEz;Template encodings other than utf8 are no longer supported.r0)r1r<>) r^rnr<>rer7r]rb<00>
StplParserr<EFBFBD><00> translater1)rQr^r<>r1r.rWrrrrW szSimpleTemplate.codecKs"|dkrtdd<02>||f|d<dS)NzQRebase function called without arguments. You were probably looking for {{base}}?T<>_rebase)rb)rQ<00>_envr<76>r'rrrr<>0 szSimpleTemplate._rebasecKsZ|dkrtdd<02>|<01><01>}|<04>|<03>||jkrD|j||jd<03>|j|<|j|<00>|d|<04>S)NzQRebase function called without arguments. You were probably looking for {{base}}?T)r<>r<><00>_stdout)rbr<>r1rrr<>r<><00>execute)rQr<>r<>r'r<>rrr<00>_include6 s

zSimpleTemplate._includec Cs<>|j<00><01>}|<03>|<02>|<03>||jt<04>|j|<03>t<04>|j|<03>d|j|j |j
|j |j d<01>
<EFBFBD>t |j|<03>|<03>
d<02>r<>|<03>d<02>\}}d<03>|<01>|d<|dd<00>=|j||f|<05>S|S)N)
r<EFBFBD>Z
_printlist<EFBFBD>include<64>rebaser<65>r<>r<>r<>r<>Zdefinedr<64>r<>rp)ror<>r1<00>extendrVrr<>r<>r<>r<>r<>r<>r<>r=r<>r<>r<>)rQr<>r'r<>Zsubtpl<70>rargsrrrr<>@ s


   

zSimpleTemplate.executecOs@i}g}x|D]}|<03>|<05>qW|<03>|<02>|<00>||<03>d<01>|<04>S)zA Render the template using keyword arguments as local variables. r<>)r1r<>r<>)rQr<>r'r<>r&rvrrrrnP s

 zSimpleTemplate.render)N)N) rSrTrUrwr<>rxr<>rWr<>r<>r<>rnrrrrr<> s  

r<>c@s eZdZdS)<02>StplSyntaxErrorN)rSrTrUrrrrr<>Y sr<>c@s<>eZdZdZiZdZe<05>dd<04>Zed7Zed7Zed7Zed7Zed 7Zed
7Zed 7Zd Zd eZdeZdZ d$dd<13>Z
dd<15>Z dd<17>Z e e e <0C>Zdd<19>Zdd<1B>Zdd<1D>Zdd<1F>Zd%d d!<21>Zd"d#<23>ZdS)&r<>z Parser for stpl templates. z<>([urbURB]?(?:''(?!')|""(?!")|'{6}|"{6}|'(?:[^\\']|\\.)+?'|"(?:[^\\"]|\\.)+?"|'{3}(?:[^\\]|\\.|\n)+?'{3}|"{3}(?:[^\\]|\\.|\n)+?"{3}))z|\nr<6E>z|(#.*)z |([\[\{\(])z |([\]\}\)])zW|^([ \t]*(?:if|for|while|with|try|def|class)\b)|^([ \t]*(?:elif|else|except|finally)\b)z?|((?:^|;)[ \t]*end[ \t]*(?=(?:%(block_close)s[ \t]*)?\r?$|;|#))z |(%(block_close)s[ \t]*(?=\r?$))z|(\r?\n)z8(?m)^[ ]*(\\?)((%(line_start)s)|(%(block_start)s))(%%?)z6(?m)%%(inline_start)s((?:%s|[^'"
]*?)+)%%(inline_end)sz(?m)z <% %> % {{ }}NrEcCsTt||<03>||_|_|<00>|p |j<04>gg|_|_d\|_|_d\|_ |_
d|_ dS)N)r!r)rrr) r7r^r1<00>
set_syntax<EFBFBD>default_syntax<61> code_buffer<65> text_buffer<65>linenor<6F><00>indent<6E>
indent_mod<EFBFBD> paren_depth)rQr^r<>r1rrrrl} s   zStplParser.__init__cCs|jS)z= Tokens as a space separated string (default: <% %> % {{ }}) )<01>_syntax)rQrrr<00>
get_syntax<EFBFBD> szStplParser.get_syntaxcs<>||_|<01><01>|_||jkrjd}ttj|j<02>}tt|<02><01>|<03><02><01>|j |j
|j f}<04>fdd<03>|D<00>}||j|<|j|\|_ |_ |_dS)Nz:block_start block_close line_start inline_start inline_endcsg|]}t<00>|<01><00><01>qSr)r<>r<>)r<>r<>)<01> pattern_varsrrr<><00> sz)StplParser.set_syntax.<locals>.<listcomp>)r<>r7<00>_tokens<6E> _re_cache<68>mapr<70>r<>rfr<><00> _re_split<69>_re_tok<6F>_re_inl<6E>re_split<69>re_tok<6F>re_inl)rQr<>rHZetokens<6E>patternsr)r<>rr<><00> s


zStplParser.set_syntaxcCs<>|jrtd<01><01><01>xJ|j<02>|j|jd<00><00>}|<01>rV|j|j|j|<01><05><00>}|j<06>|<02>|j|<01><08>7_|<01> d<02>r<>|j|jd<00><00>
d<03>\}}}|j<06>|<01> d<04>|<01> d<05>||<00>|jt ||<00>d7_qnf|<01> d<05><01>r6t d<06>|j|jd<00><00>
d<03>\}}}|j<06>|<01> d<04>||<00>|jt ||<00>d7_q|<00> <0A>|jt|<01> d<07><01>d<08>qPqW|j<06>|j|jd<00><00>|<00> <0A>d <09>|j<11>S)
NzParser is a one time instance.r!r<>rrMz#Escape code lines with a backslash.r<>)<01> multiliner<65>)r<>r{r<>r}r^r<>r<>r r<>r<>r<>r<>rb<00>
flush_text<EFBFBD> read_coderr<>r<>)rQr<>r<><00>linervr<>rrrr<><00> s2 
$ zStplParser.translatec Cs<>d\}}<03>x<>|j<00>|j|jd<00><00>}|s\||j|jd<00>7}t|j<02>|_|<00>|<02><06>|<03>dS||j|j|j|<04><07><00>7}|j|<04><08>7_|<04> <09>\ }}}}} }
} } } |s<>|j
dkr<>| s<>|
r<EFBFBD>|| p<>|
7}q |r<>||7}q |<06>r|}|<01>r<>|<06><06><00> |j d<00><01>r<>d}q |<07>r"|j
d7_
||7}q |<08>rL|j
dk<04>rB|j
d8_
||7}q | <09>rn| d}|_ |jd7_q |
<EFBFBD>r<>|
d}|_ q | <0B>r<>|jd8_q | <0C>r<>|<01>r<>d}n|| 7}q |<00>|<02><06>|<03>|jd7_d\}}|_ |s Pq WdS)N)r<>r<>rr!FrB)r<>r<>r)r<>r}r^r<>r<><00>
write_coderHr<>r<>r<>r<>r9r<>r<>r<>r<>)rQr<>Z code_line<6E>commentr<74>r<>Z_comZ_poZ_pcZ_blk1Z_blk2Z_endZ_cendZ_nlrrrr<><00> sV  

 
 
 zStplParser.read_codec
Csvd<01>|j<01>}|jdd<00>=|s dSgddd|j}}}x<>|j<03>|<01>D]r}|||<05><05><00>|<05><06>}}|r<>|<02>|<04>tt |<06>
d<05><01><02><01>|<06> d<06>r<>|d|7<|<02>|<00> |<05> d<08><01><0E><00><01>qHW|t|<01>k<00>rB||d<00>}|<06>
d<05>}|d<00> d <09><01>r|ddd
<EFBFBD>|d<n$|d<00> d <0B><01>r,|ddd <0C>|d<|<02>|<04>tt |<07><02><01>d d<0E>|<02>}|j|<08>d<06>d7_|<00>|<08>dS)Nr<4E>rz\
z Tr<54>rBr!z\\
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z\\
r[z_printlist((%s,))z, )r<>r<>r<>r<>r<>r<>r<>r r<>r<><00>
splitlinesr9<00>process_inliner<65>rHr<>r<><00>countr<74>) rQr<><00>parts<74>pos<6F>nlr<6C>r<><00>linesrWrrrr<><00> s.  
 
zStplParser.flush_textcCs$|ddkrd|dd<00>Sd|S)Nrr<>z_str(%s)r!z _escape(%s)r)rQ<00>chunkrrrr<><00> s zStplParser.process_inlinecCsD|<00>||<02>\}}d|j|j}||<01><03>|d7}|j<04>|<03>dS)Nz r<>)<06>fix_backward_compatibilityr<79>r<>rIr<>r )rQr<>r<>rWrrrr<><00> szStplParser.write_codecCs<>|<01><00><00>dd<01>}|rh|ddkrhtd<04>t|<03>dkr<d|fSt|<03>dkrXdt|<03>|fSdt|<03>|fS|jdkr<>|<01><00>s<>d |kr<>t<06>d
|<02>}|r<>td <0B>|<04>d<05>}|j <09>
|j <0B><01> |<05>|_ ||_ ||<02> d d <0C>fS||fS) Nrr)r<>r<>z2The include and rebase keywords are functions now.r!z_printlist([base])z_=%s(%r)z _=%s(%r, %s)Zcodingz#.*coding[:=]\s*([-\w.]+)z4PEP263 encoding strings in templates are deprecated.zcoding*)rHr7rbr<>rcr<>r<>r<>r<>r^rHr1rMr<>)rQr<>r<>r<>r<>rJrrrr<><00> s"   
z%StplParser.fix_backward_compatibility)NrE)r<>)rSrTrUrwr<>r<>r<>r<>r<>r<>rlr<>r<>r
r<>r<>r<>r<>r<>r<>r<>rrrrr<>\ s2 

/
r<>cOs
|r |dnd}|<01>dt<01>}|<01>dt<02>}t|<04>|f}|tks@tr<>|<01>di<00>}t||<03>rt|t|<|r<>t|jf|<06>nRd|ks<>d|ks<>d|ks<>d |kr<>|f||d
<EFBFBD>|<06><02>t|<n|f||d <0B>|<06><02>t|<t|s<>td d |<00>x|dd<02>D]}|<01> |<07>q<>Wt|<00>
|<01>S)z<>
Get a rendered template as a string iterator.
You can use a name, a filename or a template string as first parameter.
Template rendering arguments can be passed as dictionaries
or directly (as keyword arguments).
rN<>template_adapterZtemplate_lookupZtemplate_settingsr<73><00>{<7B>%<25>$)r^r<>)r<>r<>i<>zTemplate (%s) not foundr!) r<>r<><00> TEMPLATE_PATH<54>id<69> TEMPLATESr<53>rFr<>r<>r1rn)r<>r'rf<00>adapterr<72>ZtplidrhrvrrrrYs$     
 rY)r<>c s<00><00>fdd<02>}|S)a<> Decorator: renders a template for a handler.
The handler can control its behavior like that:
- return a dict of template vars to fill out the template
- return something other than a dict and the view decorator will not
process the template, but return the handler result as is.
This includes returning a HTTPResponse(dict) to get,
for instance, JSON with autojson or other castfilters.
cst<00><01><00><01><01><00>fdd<02><08>}|S)NcsL<00>||<01>}t|ttf<02>r6<72><00><03>}|<03>|<02>t<05>f|<03>S|dkrHt<05><02><00>S|S)N)rFrfrAr<>r1rY)r<>r'<00>resultZtplvars)roro<00>tpl_namerrrY:s

 
z(view.<locals>.decorator.<locals>.wrapper)rVr<>)rorY)ror<>)rorr(9s
zview.<locals>.decoratorr)r<>ror(r)ror<>rr&/s
 r&z./z./views/z I'm a teapoti<74>zUnprocessable Entityi<79>zPrecondition Requiredi<64>zToo Many Requestsi<73>zRequest Header Fields Too Largei<65>zNetwork Authentication Requiredi<64>ccs"|]\}}|d||ffVqdS)z%d %sNr)r<>r<>r<>rrrr<>bsr<>a<>
%%try:
%%from %s import DEBUG, HTTP_CODES, request, touni
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Error: {{e.status}}</title>
<style type="text/css">
html {background-color: #eee; font-family: sans;}
body {background-color: #fff; border: 1px solid #ddd;
padding: 15px; margin: 15px;}
pre {background-color: #eee; border: 1px solid #ddd; padding: 5px;}
</style>
</head>
<body>
<h1>Error: {{e.status}}</h1>
<p>Sorry, the requested URL <tt>{{repr(request.url)}}</tt>
caused an error:</p>
<pre>{{e.body}}</pre>
%%if DEBUG and e.exception:
<h2>Exception:</h2>
<pre>{{repr(e.exception)}}</pre>
%%end
%%if DEBUG and e.traceback:
<h2>Traceback:</h2>
<pre>{{e.traceback}}</pre>
%%end
</body>
</html>
%%except ImportError:
<b>ImportError:</b> Could not generate the error page. Please add bottle to
the import path.
%%end
z
bottle.extz.extz bottle_%sz
Bottle %s
z"
Error: No application specified.
r3rZ<00> localhostr<74><00>]z[])r<>r<>r<>rWr<>r<>)rE)rErL)F)N)r<>r<>)N)r<>)r<>Fr<46>)T)r)r!)r<>r<>) Nr rBrCr!FFNN(rw<00>
__future__r<00>
__author__rT<00> __license__rS<00>optparserZ _cmd_parser<65>
add_optionZ_opt<70>
parse_argsZ _cmd_optionsZ _cmd_argsr<73>r<>Z gevent.monkeyrZmonkeyZ patch_allr<6C>r<><00> email.utilsr<73>rVr<>r.r2r<>rsr<>rKr"rGrrr]rrrrrr#rr<00>inspectr<00> unicodedatarZ
simplejsonrrrr6rr<>Zdjango.utils.simplejson<6F> version_info<66>pyrZpy25r<35>r$r&r'r*r<>rr<><00> http.client<6E>client<6E>httplib<69>_threadr\<00> urllib.parser+r,r<>r-r.r<>r/r<>r<00> http.cookiesr2<00> collectionsr3rAr<><00>ior4<00> configparserr5r<>r6rGr<>r@r<>r>r=<00>urlparse<73>urllib<69>Cookie<69>cPickler?r@r<>r^r_<00>UserDictrBrIr=r<>rKr7r<>rOrPrWrbrgr<>rhrxrzrdr|r}r~rr<>r<>r<>r<>r<>r rzr<>r<>r<>r<>rrrr<><00>Responser1r<>r$rrr'r:r<>r<>r|rfr<>rdrdrjrmrr<>r<>r<>r<>r<>r<>rrr<>r<>r<>r<>r r<>r<>rwr<>rNr0r<>r<>r8r<>rPrRrTr<>r<r&rrDr<>r<>r<>r<>r<>rrr
rrrrrr#r%r+r,r2r4r7r9rSrMrArRrFrZrUrdrerqrxrzr<>r<>r<>rYZ mako_templateZcheetah_templateZjinja2_templater&Z mako_viewZ cheetah_viewZ jinja2_viewr<77>r<>r<>r?<00> responsesZ
HTTP_CODESr<EFBFBD>r<>rZr/r_rr<>r@rer0rk<00>optr<74>r.<00>versionrQ<00>
print_helpr<EFBFBD>r"r-r<>r^r<>r<><00>rfindr4rHr<>rFr<>rrrr<00><module>s  
 
<02>        
           Iw#c 
 $I.2NVL 
Q  
 
   
 
   
 Z1OH6         $


(
   
 0