й¼];;ã@sHdgZddlZddlZddlZejdƒZejdƒZGdd„deƒZdd„Z d d „Z d d„Z Gd d „d ƒZ Gdd„dƒZ Gdd„dƒZGdd„dƒZGdd„dƒZdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„ZdS)&Ú validatoréNz^[a-zA-Z][a-zA-Z0-9\-_]*$z [\000-\037]c@seZdZdS)Ú WSGIWarningN)Ú__name__Ú __module__Ú __qualname__©rrú-/opt/alt/python35/lib64/python3.5/validate.pyrys rcGs|st|Œ‚dS)N)ÚAssertionError)ZcondÚargsrrrÚassert_~sr cCs8t|ƒtkr|Stdj|t|ƒƒƒ‚dS)Nz!{0} must be of type str (got {1}))ÚtypeÚstrr ÚformatÚrepr)ÚvalueÚtitlerrrÚcheck_string_type‚srcs‡fdd†}|S)NcsÅtt|ƒdkdƒt| dƒ|\}‰t|ƒg‰‡‡fdd†}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Ú ErrorWrapperÚcheck_iteratorÚIteratorWrapper)r rÚenvironr#Úiterator)Ú application)r!r"rÚlint_app”s   zvalidator..lint_appr)r+r,r)r+rrˆs )c@sXeZdZdd„Zdd„Zdd„Zdd„Zd 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 Úvrrrr1ÄszInputWrapper.readcGsBtt|ƒdkƒ|jj|Œ}tt|ƒtkƒ|S)Nr)r rr-Úreadliner r2)r.r r3rrrr4ÊszInputWrapper.readlinecGsitt|ƒdkƒ|jj|Œ}tt|ƒtkƒx$|D]}tt|ƒtkƒqEW|S)Nr)r rr-Ú readlinesr Úlistr2)r.r ÚlinesÚlinerrrr5Ðs  zInputWrapper.readlinesccs&x|jƒ}|sdS|VqWdS)N)r4)r.r8rrrÚ__iter__Øs  zInputWrapper.__iter__cCstddƒdS)Nrz input.close() must not be called)r )r.rrrÚcloseßszInputWrapper.closeN) rrrr0r1r4r5r9r:rrrrr%¿s      r%c@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) r&cCs ||_dS)N)Úerrors)r.Ú wsgi_errorsrrrr0äszErrorWrapper.__init__cCs*tt|ƒtkƒ|jj|ƒdS)N)r r r r;Úwrite)r.Úsrrrr=çszErrorWrapper.writecCs|jjƒdS)N)r;Úflush)r.rrrr?ëszErrorWrapper.flushcCs"x|D]}|j|ƒqWdS)N)r=)r.Úseqr8rrrÚ writelinesîs zErrorWrapper.writelinescCstddƒdS)Nrz!errors.close() must not be called)r )r.rrrr:òszErrorWrapper.closeN)rrrr0r=r?rAr:rrrrr&âs     r&c@s(eZdZdd„Zdd„ZdS)rcCs ||_dS)N)Úwriter)r.Z wsgi_writerrrrr0÷szWriteWrapper.__init__cCs'tt|ƒtkƒ|j|ƒdS)N)r r r2rB)r.r>rrrÚ__call__úszWriteWrapper.__call__N)rrrr0rCrrrrrõs  rc@s(eZdZdd„Zdd„ZdS)ÚPartialIteratorWrappercCs ||_dS)N)r*)r.Ú wsgi_iteratorrrrr0szPartialIteratorWrapper.__init__cCst|jdƒS)N)r(r*)r.rrrr9szPartialIteratorWrapper.__iter__N)rrrr0r9rrrrrDþs  rDc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) r(cCs.||_t|ƒ|_d|_||_dS)NF)Úoriginal_iteratorÚiterr*ÚclosedÚcheck_start_response)r.rErIrrrr0 s  zIteratorWrapper.__init__cCs|S)Nr)r.rrrr9szIteratorWrapper.__iter__cCsrt|j dƒt|jƒ}t|ƒtk rFtdd|fƒ|jdk rnt|jdƒd|_|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 rHÚnextr*r r2rI)r.r3rrrÚ__next__s   zIteratorWrapper.__next__cCs,d|_t|jdƒr(|jjƒdS)NTr:)rHÚhasattrrFr:)r.rrrr:s zIteratorWrapper.closecCs-|jstjjdƒt|jdƒdS)Nz/Iterator garbage collected without being closed)rHÚsysÚstderrr=r )r.rrrÚ__del__#s    zIteratorWrapper.__del__N)rrrr0r9rKr:rOrrrrr(s    r(c CsŒtt|ƒtkdt|ƒ|fƒxCdddddddd d g D] }t||kd |fƒqKWx;d d gD]-}t||kd||dd…fƒq|Wd|krÉtjdtƒx[|jƒD]M}d|krëqÖtt||ƒtkd|t||ƒ||fƒqÖWtt|dƒtkd|dfƒt|dd,kd|dƒt |dƒt |dƒ|dd-kr²tjd!|dtƒt|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_STRINGz’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 likelyÚ.z9Environmental variable %s is not a string: %r (value: %r)z#wsgi.version should be a tuple (%r)zwsgi.url_schemeÚhttpÚhttpszwsgi.url_scheme unknown: %rÚGETÚHEADÚPOSTÚOPTIONSÚPATCHÚPUTÚDELETEÚTRACEzUnknown 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 ÚdictÚwarningsÚwarnrÚkeysr ÚtupleÚ check_inputÚ check_errorsÚgetÚ startswithÚint)r)Úkeyrrrr$*s`       #   r$cCsAx:ddddgD]&}tt||ƒd||fƒqWdS)Nr1r4r5r9z-wsgi.input (%r) doesn't have the attribute %s)r rL)r/ÚattrrrrrbksrbcCs>x7dddgD]&}tt||ƒd||fƒqWdS)Nr?r=rAz.wsgi.errors (%r) doesn't have the attribute %s)r rL)r<rhrrrrcqsrccCsŸt|dƒ}|jddƒd}tt|ƒdkd|ƒt|ƒ}t|dkd|ƒt|ƒdks‡|dd kr›tjd |tƒdS) NÚStatusrrrz)Status codes must be three characters: %rédzStatus code is invalid: %réú zjThe status string (%r) should be a three-digit integer followed by a single space and a status explanation)rÚsplitr rrfr^r_r)rZ status_codeZ status_intrrrrws  "rcCsztt|ƒtkd|t|ƒfƒi}xD|D]<}tt|ƒtkd|t|ƒfƒtt|ƒdkƒ|\}}t|dƒ}t|dƒ}t|jƒdkd|ƒd||jƒos,       7#  # A