PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oY;;@sHdgZddlZddlZddlZejdZejdZGdddeZddZ d d Z d dZ Gd d d Z GdddZ GdddZGdddZGdddZddZddZddZddZddZd d!Zd"d#Zd$d%ZdS)& validatorNz^[a-zA-Z][a-zA-Z0-9\-_]*$z [\000-\037]c@seZdZdS) WSGIWarningN)__name__ __module__ __qualname__rr'/opt/python35/lib/python3.5/validate.pyrys rcGs|st|dS)N)AssertionError)Zcondargsrrrassert_~sr cCs8t|tkr|Stdj|t|dS)Nz!{0} must be of type str (got {1}))typestrr formatrepr)valuetitlerrrcheck_string_typesrcsfdd}|S)Ncstt|dkdt| d|\}t|gfdd}t|d|d.lint_app..start_response_wrapperz wsgi.inputz wsgi.errorsFz>The application must return an iterator, if only an empty list)r r check_environ InputWrapper ErrorWrappercheck_iteratorIteratorWrapper)r renvironr#iterator) application)r!r"rlint_apps   zvalidator..lint_appr)r+r,r)r+rrs )c@sXeZdZddZddZddZddZd d Zd d Zd S)r%cCs ||_dS)N)input)self wsgi_inputrrr__init__szInputWrapper.__init__cGsBtt|dk|jj|}tt|tk|S)Nr)r rr-readr bytes)r.r vrrrr1szInputWrapper.readcGsBtt|dk|jj|}tt|tk|S)Nr)r rr-readliner r2)r.r r3rrrr4szInputWrapper.readlinecGsitt|dk|jj|}tt|tkx$|D]}tt|tkqEW|S)Nr)r rr- readlinesr listr2)r.r lineslinerrrr5s  zInputWrapper.readlinesccs&x|j}|sdS|VqWdS)N)r4)r.r8rrr__iter__s  zInputWrapper.__iter__cCstdddS)Nrz input.close() must not be called)r )r.rrrcloseszInputWrapper.closeN) rrrr0r1r4r5r9r:rrrrr%s      r%c@sLeZdZddZddZddZddZd d Zd S) r&cCs ||_dS)N)errors)r. wsgi_errorsrrrr0szErrorWrapper.__init__cCs*tt|tk|jj|dS)N)r r r r;write)r.srrrr=szErrorWrapper.writecCs|jjdS)N)r;flush)r.rrrr?szErrorWrapper.flushcCs"x|D]}|j|qWdS)N)r=)r.seqr8rrr writeliness zErrorWrapper.writelinescCstdddS)Nrz!errors.close() must not be called)r )r.rrrr:szErrorWrapper.closeN)rrrr0r=r?rAr:rrrrr&s     r&c@s(eZdZddZddZdS)rcCs ||_dS)N)writer)r.Z wsgi_writerrrrr0szWriteWrapper.__init__cCs'tt|tk|j|dS)N)r r r2rB)r.r>rrr__call__szWriteWrapper.__call__N)rrrr0rCrrrrrs  rc@s(eZdZddZddZdS)PartialIteratorWrappercCs ||_dS)N)r*)r. wsgi_iteratorrrrr0szPartialIteratorWrapper.__init__cCst|jdS)N)r(r*)r.rrrr9szPartialIteratorWrapper.__iter__N)rrrr0r9rrrrrDs  rDc@sLeZdZddZddZddZddZd d Zd S) r(cCs.||_t||_d|_||_dS)NF)original_iteratoriterr*closedcheck_start_response)r.rErIrrrr0 s  zIteratorWrapper.__init__cCs|S)Nr)r.rrrr9szIteratorWrapper.__iter__cCsrt|j dt|j}t|tk rFtdd|f|jdk rnt|jdd|_|S)NzIterator read after closedFz$Iterator yielded non-bytestring (%r)zjThe application returns and we started iterating over its body, but start_response has not yet been called)r rHnextr*r r2rI)r.r3rrr__next__s   zIteratorWrapper.__next__cCs,d|_t|jdr(|jjdS)NTr:)rHhasattrrFr:)r.rrrr:s zIteratorWrapper.closecCs-|jstjjdt|jddS)Nz/Iterator garbage collected without being closed)rHsysstderrr=r )r.rrr__del__#s    zIteratorWrapper.__del__N)rrrr0r9rKr:rOrrrrr(s    r(c Cstt|tkdt||fxCdddddddd d g D] }t||kd |fqKWx;d d gD]-}t||kd||ddfq|Wd|krtjdtx[|jD]M}d|krqtt||tkd|t||||fqWtt|dtkd|dft|dd,kd|dt |dt |d|dd-krtjd!|dtt|j d" p|d"j d#d$|d"t|j d% p|d%j d#d&|d%|j d'rJtt |d'd(kd)|d'|j d"sltd%|kd*t|j d"d#kd+dS).Nz:Environment is not of the right type: %r (environment: %r)ZREQUEST_METHODZ SERVER_NAMEZ SERVER_PORTz wsgi.versionz wsgi.inputz wsgi.errorszwsgi.multithreadzwsgi.multiprocessz wsgi.run_oncez$Environment missing required key: %rZHTTP_CONTENT_TYPEZHTTP_CONTENT_LENGTHz8Environment should not have the key: %s (use %s instead)Z QUERY_STRINGzQUERY_STRING is not in the WSGI environment; the cgi module will use sys.argv when this variable is missing, so application errors are more likely.z9Environmental variable %s is not a string: %r (value: %r)z#wsgi.version should be a tuple (%r)zwsgi.url_schemehttphttpszwsgi.url_scheme unknown: %rGETHEADPOSTOPTIONSPATCHPUTDELETETRACEzUnknown REQUEST_METHOD: %rZ SCRIPT_NAME/z$SCRIPT_NAME doesn't start with /: %rZ PATH_INFOz"PATH_INFO doesn't start with /: %rZCONTENT_LENGTHrzInvalid CONTENT_LENGTH: %rzgOne of SCRIPT_NAME or PATH_INFO are required (PATH_INFO should at least be '/' if SCRIPT_NAME is empty)zOSCRIPT_NAME cannot be '/'; it should instead be '', and PATH_INFO should be '/')rRrS)rTrUrVrWrXrYrZr[)r r dictwarningswarnrkeysr tuple check_input check_errorsget startswithint)r)keyrrrr$*s`       #   r$cCsAx:ddddgD]&}tt||d||fqWdS)Nr1r4r5r9z-wsgi.input (%r) doesn't have the attribute %s)r rL)r/attrrrrrbksrbcCs>x7dddgD]&}tt||d||fqWdS)Nr?r=rAz.wsgi.errors (%r) doesn't have the attribute %s)r rL)r<rhrrrrcqsrccCst|d}|jddd}tt|dkd|t|}t|dkd|t|dks|dd krtjd |tdS) NStatusrrrz)Status codes must be three characters: %rdzStatus code is invalid: %r zjThe status string (%r) should be a three-digit integer followed by a single space and a status explanation)rsplitr rrfr^r_r)rZ status_codeZ status_intrrrrws  "rcCsztt|tkd|t|fi}xD|D]<}tt|tkd|t|ftt|dk|\}}t|d}t|d}t|jdkd|d||jos,       7#  # A