3 Õì2a;;ã@sädgZddlZddlZddlZejdƒ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@s eZdZdS)Ú WSGIWarningN)Ú__name__Ú __module__Ú __qualname__©rrú-/opt/alt/python36/lib64/python3.6/validate.pyrysrcGs|s t|Ž‚dS)N)ÚAssertionError)ZcondÚargsrrrÚassert_~sr cCs(t|ƒtkr|Stdj|t|ƒƒƒ‚dS)Nz!{0} must be of type str (got {1}))ÚtypeÚstrr ÚformatÚrepr)ÚvalueÚtitlerrrÚcheck_string_type‚s rcs‡fdd„}|S)Ncs’tt|ƒdkdƒt| dƒ|\}‰t|ƒg‰‡‡fdd„}t|dƒ|d<t|dƒ|d<ˆ||ƒ}t|dk oz|dkd ƒt|ƒt|ˆƒS) NézTwo arguments requiredzNo keyword arguments allowedcs’tt|ƒdkpt|ƒdkd|fƒt| dƒ|d}|d}t|ƒdkrV|d}nd}t|ƒt|ƒt||ƒt|ƒˆjdƒtˆ|ŽƒS)NrézInvalid number of arguments: %szNo keyword arguments allowedré)r ÚlenÚ check_statusÚ check_headersÚcheck_content_typeÚcheck_exc_infoÚappendÚ WriteWrapper)r ÚkwÚstatusÚheadersÚexc_info)Ústart_responseÚstart_response_startedrrÚstart_response_wrapperŸs      z;validator..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@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)r%cCs ||_dS)N)Úinput)ÚselfÚ wsgi_inputrrrÚ__init__ÁszInputWrapper.__init__cGs0tt|ƒdkƒ|jj|Ž}tt|ƒtkƒ|S)Nr)r rr-Úreadr Úbytes)r.r Úvrrrr1Äs zInputWrapper.readcGs0tt|ƒdkƒ|jj|Ž}tt|ƒtkƒ|S)Nr)r rr-Úreadliner r2)r.r r3rrrr4Ês zInputWrapper.readlinecGsNtt|ƒdkƒ|jj|Ž}tt|ƒtkƒx|D]}tt|ƒtkƒq2W|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@s4eZdZdd„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.flushcCsx|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@seZdZdd„Zdd„ZdS)rcCs ||_dS)N)Úwriter)r.Z wsgi_writerrrrr0÷szWriteWrapper.__init__cCstt|ƒtkƒ|j|ƒdS)N)r r r2rB)r.r>rrrÚ__call__úszWriteWrapper.__call__N)rrrr0rCrrrrrõsrc@seZdZdd„Zdd„ZdS)ÚPartialIteratorWrappercCs ||_dS)N)r*)r.Ú wsgi_iteratorrrrr0szPartialIteratorWrapper.__init__cCs t|jdƒS)N)r(r*)r.rrrr9szPartialIteratorWrapper.__iter__N)rrrr0r9rrrrrDþsrDc@s4eZdZdd„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__cCsTt|j dƒt|jƒ}t|ƒtk r4tdd|fƒ|jdk rPt|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ƒx d,D]}t||kd |fƒq$Wx*d-D]"}t||kd||dd…fƒqFWd|kr€tjdtƒxF|jƒD]:}d|kr˜qŠtt||ƒtkd|t||ƒ||fƒqŠWtt|dƒtkd|dfƒt|dd.kd|dƒt |dƒt |dƒ|dd/k�ros,  7#  #A