U ,aT @sddlmZmZmZddlmZddlZddlZddlZddddd d gZ d d d ddddgZ dddddddddddddg Z ddZ d d!d"d#d$d%d&d'd(d)h j Zd*d+Zd,d ZGd-ddZGd.ddeZGd/ddeZGd0ddeZGd1d d eZdS)2) FileWrapper guess_scheme is_hop_by_hop)HeadersN BaseHandler SimpleHandlerBaseCGIHandler CGIHandler IISCGIHandler read_environZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc Cs:t|\ }}}}}}}}} dt||t|||||fS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtime _weekdayname _monthname) Z timestampZyearZmonthZdayZhhZmmZssZwdyzr5/opt/alt/python38/lib64/python3.8/wsgiref/handlers.pyformat_date_timesr SCRIPT_NAME PATH_INFOZ QUERY_STRINGZREQUEST_METHODZ AUTH_TYPEZ CONTENT_TYPEZCONTENT_LENGTHZHTTPSZ REMOTE_USERZ REMOTE_IDENTcCs6t|p4|dp4|dp4|do4t|ddS)NZHTTP_ZSSL_Z REDIRECT_ ) _is_request startswith_needs_transcode)krrrrsrcCst}d}zdd|Wntk r4d}YnXi}tjD]\}}t|rtjdkrtj dd }| dr|d d}q| d rq| d rd |kr|d d}q||d d}n||| d}|||<qD|S) Nsurrogateescapezutf-8replaceZwin32SERVER_SOFTWAREzmicrosoft-iis/ iso-8859-1zapache/z simplehttp/zpython/3) sysgetfilesystemencodingencode LookupErrorosenvironitemsrplatformgetlowerrdecode)encZescr'rvZsoftwarerrrr "s0     c@seZdZdZdZdZdZdZdZdZ e Z e Z eZdZdZdgZdZdZZdZdZd Zd d Zd d ZddZddZddZddZd:ddZddZ ddZ!ddZ"ddZ#d d!Z$d"d#Z%d$d%Z&d&d'Z'd(d)Z(d*d+Z)d,d-Z*d.d/Z+d0d1Z,d2d3Z-d4d5Z.d6d7Z/d8d9Z0dS);r)rrTFz1.0Nz500 Internal Server Error)z Content-Typez text/plains;A server error occurred. Please contact the administrator.rc Cstz$|||j|j|_|WnJtttfk r@YdSz |Wn| YnXYnXdSN) setup_environr'start_responseresultfinish_responseConnectionAbortedErrorBrokenPipeErrorConnectionResetError handle_errorclose)selfZ applicationrrrruns  zBaseHandler.runcCs|j}|_|||d<||d<|j|d<|j|d<||d<|j |d<|j |d<|j dk rx|j |d<|j r|j r|d |j dS) Nz wsgi.inputz wsgi.errorsz wsgi.versionz wsgi.run_oncezwsgi.url_schemezwsgi.multithreadzwsgi.multiprocesszwsgi.file_wrapperr ) os_environcopyr' add_cgi_vars get_stdin get_stderr wsgi_version wsgi_run_once get_schemewsgi_multithreadwsgi_multiprocesswsgi_file_wrapper origin_serverserver_software setdefault)r9envrrrr0s          zBaseHandler.setup_environcCsdz2|r|s0|jD]}||q|Wn$t|jdrP|jYn X|dS)Nr8)result_is_filesendfiler2writefinish_contenthasattrr8r9datarrrr3s     zBaseHandler.finish_responsecCs t|jSr/)rr'r9rrrrBszBaseHandler.get_schemec CsJzt|j}Wntttfk r(YnX|dkrFt|j|jd<dSdS)NrContent-Length)lenr2 TypeErrorAttributeErrorNotImplementedErrorstr bytes_sentheaders)r9Zblocksrrrset_content_lengthszBaseHandler.set_content_lengthcCsd|jkr|dS)NrR)rYrZrQrrrcleanup_headerss zBaseHandler.cleanup_headerscCsh|r2z$|jr&|d|d|dW5d}Xn|jdk rDtd||_|||_||d}|jS)NrrzHeaders already set!ZStatus) headers_sentwith_tracebackrYAssertionErrorstatus headers_class_convert_string_typerL)r9r`rYexc_inforrrr1s   zBaseHandler.start_responsecCs(t|tkr|Std|t|dS)Nz!{0} must be of type str (got {1}))typerWr_formatrepr)r9valuetitlerrrrbs  z BaseHandler._convert_string_typecCs|jrx|r|d|j|jfdd|jkrP|dttd|j rd|jkr|d|j dn|d|jddS)Nz HTTP/%s %s r!ZDatez Date: %s ZServerz Server: %s z Status: %s ) rFclient_is_modern_write http_versionr`r$rYrr rGrQrrr send_preambles zBaseHandler.send_preamblecCsR|jstdn,|js*t||_|n|jt|7_|||dS)Nzwrite() before start_response())r`r_r]rSrX send_headersrj_flushrOrrrrLs    zBaseHandler.writecCsdS)NFrrQrrrrK)szBaseHandler.sendfilecCs"|js|jdd|ndS)NrR0)r]rYrHrmrQrrrrM>s zBaseHandler.finish_contentc CsFzt|jdr|jW5d|_|_|_|_d|_d|_XdS)NrFr8)r2rYr`r'rXr]rNr8rQrrrr8Hs  zBaseHandler.closecCs8|d|_|jr|r4||t|jdS)NT)r[r]rFrirlrjbytesrYrQrrrrmUs zBaseHandler.send_headerscCs|j}|dk ot|j|Sr/)rE isinstancer2)r9wrapperrrrrJ^szBaseHandler.result_is_filecCs|jddkS)NZSERVER_PROTOCOLzHTTP/0.9)r'upperrQrrrridszBaseHandler.client_is_moderncCsJz>ddlm}|}||d|d|d|j||W5d}XdS)Nr)print_exceptionrr\) tracebackrtr?traceback_limitflush)r9rcrtstderrrrr log_exceptionis  zBaseHandler.log_exceptioncCs2|t|js.||j|j|_|dSr/) ryr"rcr] error_outputr'r1r2r3rQrrrr7yszBaseHandler.handle_errorcCs$||j|jddt|jgSr/) error_status error_headersr"rc error_body)r9r'r1rrrrzs zBaseHandler.error_outputcCstdSr/rVrOrrrrjszBaseHandler._writecCstdSr/r~rQrrrrnszBaseHandler._flushcCstdSr/r~rQrrrr>szBaseHandler.get_stdincCstdSr/r~rQrrrr?szBaseHandler.get_stderrcCstdSr/r~rQrrrr=szBaseHandler.add_cgi_vars)N)1__name__ __module__ __qualname__r@rCrDrArFrkrGr r;rrErrarvr{r|r}r`r2r]rYrXr:r0r3rBrZr[r1rbrlrLrKrMr8rmrJriryr7rzrjrnr>r?r=rrrrr^sT      c@s>eZdZdddZddZddZd d Zd d Zd dZdS)rTFcCs(||_||_||_||_||_||_dSr/)stdinstdoutrxbase_envrCrD)r9rrrxr' multithread multiprocessrrr__init__s zSimpleHandler.__init__cCs|jSr/)rrQrrrr>szSimpleHandler.get_stdincCs|jSr/)rxrQrrrr?szSimpleHandler.get_stderrcCs|j|jdSr/)r'updaterrQrrrr=szSimpleHandler.add_cgi_varscCs^|j|}|dks |t|kr$dSddlm}|dt||d}|sLqZ|j|}q:dS)Nr)warnz9SimpleHandler.stdout.write() should not do partial writes)rrLrSwarningsrDeprecationWarning)r9rPr2rrrrrjs   zSimpleHandler._writecCs|j|jj|_dSr/)rrwrnrQrrrrns zSimpleHandler._flushN)TF) rrrrr>r?r=rjrnrrrrrs  c@seZdZdZdS)r FN)rrrrFrrrrr sc@seZdZdZiZddZdS)r Tc Cs(tj|tjjtjjtjtddddS)NFTrr)r rr"rbufferrrxr rQrrrrszCGIHandler.__init__NrrrrAr;rrrrrr sc@seZdZdZiZddZdS)r Tc Csjt}|dd}|dd}|d|drD|t|d|d<tj|tjjtj jtj |ddddS)Nrrr/FTr) r r*rrSr rr"rrrrx)r9r'pathZscriptrrrr2s  zIISCGIHandler.__init__Nrrrrrr s)utilrrrrYrr"r&r __all__rrr __contains__rrr rrr r r rrrrsZ <V2