%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/alt/python27/lib/python2.7/site-packages/paste/
Upload File :
Create Path :
Current File : //opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyo

�
a�Nc@sddZddlZddlZddlmZmZmZmZddlZej	d�Z
ej	d�Zdefd��YZ
dd�Zd	efd
��YZdefd��YZd
efd��YZdefd��YZdefd��YZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zee_ddgZdS(s"
Middleware to check for obedience to the WSGI specification.

Some of the things this checks:

* Signature of the application and start_response (including that
  keyword arguments are not used).

* Environment checks:

  - Environment is a dictionary (and not a subclass).

  - That all the required keys are in the environment: REQUEST_METHOD,
    SERVER_NAME, SERVER_PORT, wsgi.version, wsgi.input, wsgi.errors,
    wsgi.multithread, wsgi.multiprocess, wsgi.run_once

  - That HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH are not in the
    environment (these headers should appear as CONTENT_LENGTH and
    CONTENT_TYPE).

  - Warns if QUERY_STRING is missing, as the cgi module acts
    unpredictably in that case.

  - That CGI-style variables (that don't contain a .) have
    (non-unicode) string values

  - That wsgi.version is a tuple

  - That wsgi.url_scheme is 'http' or 'https' (@@: is this too
    restrictive?)

  - Warns if the REQUEST_METHOD is not known (@@: probably too
    restrictive).

  - That SCRIPT_NAME and PATH_INFO are empty or start with /

  - That at least one of SCRIPT_NAME or PATH_INFO are set.

  - That CONTENT_LENGTH is a positive integer.

  - That SCRIPT_NAME is not '/' (it should be '', and PATH_INFO should
    be '/').

  - That wsgi.input has the methods read, readline, readlines, and
    __iter__

  - That wsgi.errors has the methods flush, write, writelines

* The status is a string, contains a space, starts with an integer,
  and that integer is in range (> 100).

* That the headers is a list (not a subclass, not another kind of
  sequence).

* That the items of the headers are tuples of strings.

* That there is no 'status' header (that is used in CGI, but not in
  WSGI).

* That the headers don't contain newlines or colons, end in _ or -, or
  contain characters codes below 037.

* That Content-Type is given if there is content (CGI often has a
  default content type, but WSGI does not).

* That no Content-Type is given when there is no content (@@: is this
  too restrictive?)

* That the exc_info argument to start_response is a tuple or None.

* That all calls to the writer are with strings, and no other methods
  on the writer are accessed.

* That wsgi.input is used properly:

  - .read() is called with zero or one argument

  - That it returns a string

  - That readline, readlines, and __iter__ return strings

  - That .close() is not called

  - No other methods are provided

* That wsgi.errors is used properly:

  - .write() and .writelines() is called with a string

  - That .close() is not called, and no other methods are provided.

* The response iterator:

  - That it is not a string (it should be a list of a single string; a
    string will work, but perform horribly).

  - That .next() returns a string

  - That the iterator is not iterated over until start_response has
    been called (that can signal either a server or application
    error).

  - That .close() is called (doesn't raise exception, only prints to
    sys.stderr, because we only know it isn't called when the object
    is garbage collected).
i����N(tDictTypet
StringTypet	TupleTypetListTypes^[a-zA-Z][a-zA-Z0-9\-_]*$s[\000-\037]tWSGIWarningcBseZdZRS(s:
    Raised in response to WSGI-spec-related warnings
    (t__name__t
__module__t__doc__(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyRxscs�fd�}|S(s�
    When applied between a WSGI server and a WSGI application, this
    middleware will check for WSGI compliancy on a number of levels.
    This middleware does not modify the request or response in any
    way, but will throw an AssertionError if anything seems off
    (except for a failure to close the application iterator, which
    will be printed to stderr -- there's no way to throw an exception
    at that point).
    cs||\}�t|�g���fd�}t|d�|d<t|d�|d<�||�}t|�t|��S(Ncs�|d}|d}t|�dkr3|d}nd}t|�t|�t||�t|��jd�t�|��S(Niiii(tlentNonetcheck_statust
check_headerstcheck_content_typetcheck_exc_infotappendtWriteWrapper(targstkwtstatustheaderstexc_info(tstart_responsetstart_response_started(s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pytstart_response_wrapper�s







s
wsgi.inputswsgi.errors(t
check_environtInputWrappertErrorWrappertcheck_iteratortIteratorWrapper(RRtenvironRtiterator(tapplication(RRs;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pytlint_app�s

((Rtglobal_confR ((Rs;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt
middleware}s)RcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs
||_dS(N(tinput(tselft
wsgi_input((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt__init__�scGs|jj|�}|S(N(R#tread(R$Rtv((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR'�scGs|jj|�}|S(N(R#treadline(R$RR(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR)�scGs'|jj|�}x|D]}qW|S(N(R#t	readlines(R$Rtlinestline((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR*�s
ccs%x|j�}|sdS|VqdS(N(R)(R$R,((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt__iter__�s
cCsdS(N((R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pytclose�s(RRR&R'R)R*R-R.(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR�s					RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs
||_dS(N(terrors(R$twsgi_errors((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR&�scCs|jj|�dS(N(R/twrite(R$ts((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR1�scCs|jj�dS(N(R/tflush(R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR3�scCs"x|D]}|j|�qWdS(N(R1(R$tseqR,((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt
writelines�s
cCsdS(N((R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR.�s(RRR&R1R3R5R.(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR�s
				RcBseZd�Zd�ZRS(cCs
||_dS(N(twriter(R$twsgi_writer((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR&�scCs|j|�dS(N(R6(R$R2((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt__call__�s(RRR&R8(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR�s	tPartialIteratorWrappercBseZd�Zd�ZRS(cCs
||_dS(N(R(R$t
wsgi_iterator((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR&�scCs
t|j�S(N(RR(R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR-�s(RRR&R-(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR9�s	RcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs.||_t|�|_t|_||_dS(N(toriginal_iteratortiterRtFalsetclosedtcheck_start_response(R$R:R?((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR&�s		cCs|S(N((R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR-scCs.|jj�}|jdk	r*d|_n|S(N(RtnextR?R	(R$R(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR@scCs/t|_t|jd�r+|jj�ndS(NR.(tTrueR>thasattrR;R.(R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR.s	cCs |jstjjd�ndS(Ns/Iterator garbage collected without being closed(R>tsyststderrR1(R$((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt__del__s		
(RRR&R-R@R.RE(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR�s
			
	c	Cs�x)ddddddddd	g	D]}q"Wxd
dgD]}q9Wd|krbtjd
t�nx&|j�D]}d|kroqoqoqoWt|d�t|d�|ddkr�tjd|dt�n|jd�r�n|jd�s�ndS(NtREQUEST_METHODtSERVER_NAMEtSERVER_PORTswsgi.versions
wsgi.inputswsgi.errorsswsgi.multithreadswsgi.multiprocesss
wsgi.run_oncetHTTP_CONTENT_TYPEtHTTP_CONTENT_LENGTHtQUERY_STRINGs�QUERY_STRING is not in the WSGI environment; the cgi module will use sys.argv when this variable is missing, so application errors are more likelyt.tGETtHEADtPOSTtOPTIONStPUTtDELETEtTRACEsUnknown REQUEST_METHOD: %rtCONTENT_LENGTHtSCRIPT_NAME(RMRNRORPRQRRRS(twarningstwarnRtkeystcheck_inputtcheck_errorstget(Rtkey((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyRs6	

		
cCs!xddddgD]}qWdS(NR'R)R*R-((R%tattr((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyRY]scCsxdddgD]}qWdS(NR3R1R5((R0R]((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyRZcscCs_|jdd�d}t|�}t|�dksD|ddkr[tjd|t�ndS(Niiiit sjThe status string (%r) should be a three-digit integer followed by a single space and a status explanation(tsplitR	tintRRVRWR(Rtstatus_codet
status_int((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR
is"cCs7i}x*|D]"}|\}}d||j�<q
WdS(N(R	tlower(Rtheader_namestitemtnametvalue((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyRxs

cCswt|jdd�d�}d}d}x9|D]1\}}|j�dkr/||kr`dSq/q/W||krsndS(Niii�i0scontent-type(i�i0(i�i0(R`R_R	Rc(RRtcodetNO_MESSAGE_BODYtNO_MESSAGE_TYPERfRg((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR�scCsdS(N((R((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR
�scCsdS(N((R((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyR�scCs
t|�S(N(R"(RR!((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pytmake_middleware�sR"Rk( RtreRCttypesRRRRRVtcompilet	header_retbad_header_value_retWarningRR	R"tobjectRRRR9RRRYRZR
RRR
RRkt__all__(((s;/opt/alt/python27/lib/python2.7/site-packages/paste/lint.pyt<module>ns0"7"		!	A									

Zerion Mini Shell 1.0