Ñò ô†³Kc@s’dZddkZddklZddklZddkZddkZyddklZWn#e j oddk lZnXddk l Z ddd d d d d ddg Z d„Zd„Zd„Zd„Zed„Zeedddd„Zd„Zd„Zd„Zhdd6dd6dd6Zd„Zdefd „ƒYZd!„Zeei_ed"joddk Z e i!ƒndS(#sÑ This module provides helper routines with work directly on a WSGI environment to solve common requirements. * get_cookies(environ) * parse_querystring(environ) * parse_formvars(environ, include_get_vars=True) * construct_url(environ, with_query_string=True, with_path_info=True, script_name=None, path_info=None, querystring=None) * path_info_split(path_info) * path_info_pop(environ) * resolve_relative_url(url, environ) iÿÿÿÿN(t SimpleCookie(tStringIO(t DictMixin(t MultiDictt get_cookiestget_cookie_dicttparse_querystringtparse_formvarst construct_urltpath_info_splitt path_info_poptresolve_relative_urltEnvironHeaderscCsr|iddƒ}|idƒo&|d\}}||jo|Sntƒ}|i|ƒ||f|d<|S(sµ Gets a cookie object (which is a dictionary-like object) from the request environment; caches this value in case get_cookies is called again for the same request. t HTTP_COOKIEts paste.cookies(tgetthas_keyRtload(tenvirontheadertcookiest check_header((s1/usr/lib/python2.6/site-packages/paste/request.pyR#s    cCs£|idƒ}|phS|idƒo&|d\}}||jo|Sntƒ}|i|ƒh}x|D]}||i||>> environ = {'QUERY_STRING': 'day=Monday&user=fred&user=jane'} >>> parsed = parse_dict_querystring(environ) >>> parsed['day'] 'Monday' >>> parsed['user'] 'fred' >>> parsed.getall('user') ['fred', 'jane'] RRspaste.parsed_dict_querystringRR(RRRRRR(RR R!R"tmulti((s1/usr/lib/python2.6/site-packages/paste/request.pytparse_dict_querystringbs     cCsB|d}d|joD|d\}}||jo#|o|it|ƒƒn|Sn|iddƒiƒ}d|jo|iddƒd}n|dj}|id ƒpd |d >> def call_it(script_name, path_info): ... env = {'SCRIPT_NAME': script_name, 'PATH_INFO': path_info} ... result = path_info_pop(env) ... print 'SCRIPT_NAME=%r; PATH_INFO=%r; returns=%r' % ( ... env['SCRIPT_NAME'], env['PATH_INFO'], result) >>> call_it('/foo', '/bar') SCRIPT_NAME='/foo/bar'; PATH_INFO=''; returns='bar' >>> call_it('/foo/bar', '') SCRIPT_NAME='/foo/bar'; PATH_INFO=''; returns=None >>> call_it('/foo/bar', '/') SCRIPT_NAME='/foo/bar/'; PATH_INFO=''; returns='' >>> call_it('', '/1/2/3') SCRIPT_NAME='/1'; PATH_INFO='/2/3'; returns='1' >>> call_it('', '//1/2') SCRIPT_NAME='//1'; PATH_INFO='/2'; returns='1' RFRRVREiN(RRHt startswithR,(Rtpathtsegment((s1/usr/lib/python2.6/site-packages/paste/request.pyR s  t AuthorizationtHTTP_CGI_AUTHORIZATIONsContent-LengthR's Content-TypeR%ccsvxo|iƒD]a\}}|tjot||fVq |idƒo%|diƒiddƒ|fVq q WdS(s‚ Parse the headers in the environment (like ``HTTP_HOST``) and yield a sequence of those (header_name, value) tuples. tHTTP_it_t-N(t iteritemst_parse_headers_specialRZttitletreplace(Rtcgi_varR((s1/usr/lib/python2.6/site-packages/paste/request.pyt parse_headersBs   cBs_eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z RS( sgAn object that represents the headers as present in a WSGI environment. This object is a wrapper (with no internal state) for a WSGI request object, representing the CGI-style HTTP_* keys as a dictionary. Because a CGI environment can only hold one value for each key, this dictionary is single-valued (unlike outgoing headers). cCs ||_dS(N(R(tselfR((s1/usr/lib/python2.6/site-packages/paste/request.pyt__init__YscCsNd|iddƒiƒ}|djo d}n|djo d}n|S(NR_RaR`tHTTP_CONTENT_LENGTHR'tHTTP_CONTENT_TYPER%(Retupper(RhRtkey((s1/usr/lib/python2.6/site-packages/paste/request.pyt _trans_name\s     cCsW|djodS|djodS|idƒo|diddƒiƒSdSdS( NR%s Content-TypeR'sContent-LengthR_iR`Ra(RZReRdRH(RhRm((s1/usr/lib/python2.6/site-packages/paste/request.pyt _trans_keyds  cCs|i|i|ƒS(N(RRn(Rhtitem((s1/usr/lib/python2.6/site-packages/paste/request.pyt __getitem__nscCs||i|i|ƒsD         @1  (  6