o !QdT@s ddlmZmZmZddlmZddlZddlZddlZgdZ gdZ gdZ dd Z hd j Zd d Zd dZGdddZGdddeZGdddeZGdddeZGdddeZdS)) FileWrapper guess_scheme is_hop_by_hop)HeadersN) BaseHandler SimpleHandlerBaseCGIHandler CGIHandler IISCGIHandler read_environ)ZMonZTueZWedZThuZFriZSatZSun) NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc Cs:t|\ }}}}}}}}} dt||t|||||fS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtime _weekdayname _monthname) Z timestampZyearZmonthZdayZhhZmmZssZwdyzr7/opt/alt/python310/lib64/python3.10/wsgiref/handlers.pyformat_date_timesr> Z REMOTE_IDENTZ QUERY_STRINGZ AUTH_TYPE SCRIPT_NAME PATH_INFOZREQUEST_METHODZ CONTENT_TYPEZ REMOTE_USERZCONTENT_LENGTHZHTTPScCs6t|p|dp|dp|dot|ddS)NZHTTP_ZSSL_Z REDIRECT_ ) _is_request startswith_needs_transcode)krrrrsrcCs t}d}zdd|Wn tyd}Ynwi}tjD]S\}}t|rqtjdkrhtj dd }| drF|d d}n+| d rLn%| d r^d |vr^|d d}n||d d}n ||| d}|||<q"|S) Nsurrogateescapezutf-8replaceZwin32SERVER_SOFTWAREzmicrosoft-iis/ iso-8859-1zapache/z simplehttp/zpython/3) sysgetfilesystemencodingencode LookupErrorosenvironitemsrplatformgetlowerrdecode)encZescr'rvZsoftwarerrrr "s2     r c@s eZdZ dZdZdZdZdZdZdZ 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 Csj z|||j|j|_|WdStttfy!YdSz|WYdS| N) setup_environr'start_responseresultfinish_responseConnectionAbortedErrorBrokenPipeErrorConnectionResetError handle_errorclose)selfZ applicationrrrrunszBaseHandler.runcCs |j}|_|||d<||d<|j|d<|j|d<||d<|j |d<|j |d<|j dur=|j |d<|j rL|j rN|d |j dSdSdS) 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_environcCs` z|r |s|jD]}||q |Wnt|jdr)|j|dS)Nr8)result_is_filesendfiler2writefinish_contenthasattrr8r9datarrrr3s     zBaseHandler.finish_responsecCs t|jSr/)rr'r9rrrrBs zBaseHandler.get_schemec CsL zt|j}Wn tttfyYdSw|dkr$t|j|jd<dSdS)NrContent-Length)lenr2 TypeErrorAttributeErrorNotImplementedErrorstr bytes_sentheaders)r9Zblocksrrrset_content_lengthszBaseHandler.set_content_lengthcCs d|jvr |dSdS)NrR)rYrZrQrrrcleanup_headerss  zBaseHandler.cleanup_headerscCsn |rz|jr|d|d|dWd}n d}w|jdur$td||_|||_||d} |jS)NrrzHeaders already set!ZStatus) headers_sentwith_tracebackrYAssertionErrorstatus headers_class_convert_string_typerL)r9r`rYexc_infonamevalrrrr1s    zBaseHandler.start_responsecCs& t|tur |Std|t|)Nz!{0} must be of type str (got {1}))typerWr_formatrepr)r9valuetitlerrrrbs  z BaseHandler._convert_string_typecCs |jrD|r>|d|j|jfdd|jvr)|dttd|j r@d|jvrB|d|j ddSdSdSdS|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 |jstd|jst||_|n |jt|7_|||dS)Nzwrite() before start_response())r`r_r]rSrX send_headersrl_flushrOrrrrLs    zBaseHandler.writecCs dS)NFrrQrrrrK)szBaseHandler.sendfilecCs( |js|jdd|dS dS)NrR0)r]rYrHrorQrrrrM>s  zBaseHandler.finish_contentc Cs z5t|jdr"|jWd|_|_|_|_d|_d|_dSWd|_|_|_|_d|_d|_dSd|_|_|_|_d|_d|_w)Nr8rF)rNr2r8rYr`r'rXr]rQrrrr8Hs  zBaseHandler.closecCs> |d|_|jr|r||t|jdSdS)NT)r[r]rFrkrnrlbytesrYrQrrrroUszBaseHandler.send_headerscCs |j}|duo t|j|Sr/)rE isinstancer2)r9wrapperrrrrJ^szBaseHandler.result_is_filecCs |jddkS)NZSERVER_PROTOCOLzHTTP/0.9)r'upperrQrrrrkdszBaseHandler.client_is_moderncCsN z"ddlm}|}||d|d|d|j||Wd}dSd}w)Nr)print_exceptionrr\) tracebackrvr?traceback_limitflush)r9rcrvstderrrrr log_exceptionis  zBaseHandler.log_exceptioncCs8 |t|js||j|j|_|dSdSr/) r{r"rcr] error_outputr'r1r2r3rQrrrr7ys  zBaseHandler.handle_errorcCs& ||j|jddt|jgSr/) error_status error_headersr"rc error_body)r9r'r1rrrr|s zBaseHandler.error_outputcC tr/rVrOrrrrlszBaseHandler._writecCrr/rrQrrrrpszBaseHandler._flushcCrr/rrQrrrr>zBaseHandler.get_stdincCrr/rrQrrrr?rzBaseHandler.get_stderrcCrr/rrQrrrr=rzBaseHandler.add_cgi_varsr/)1__name__ __module__ __qualname__r@rCrDrArFrmrGr r;rrErrarxr}r~rr`r2r]rYrXr:r0r3rBrZr[r1rbrnrLrKrMr8rorJrkr{r7r|rlrpr>r?r=rrrrr^sX      rc@sBeZdZ dddZddZddZd d Zd d Zd dZdS)rTFcCs(||_||_||_||_||_||_dSr/)stdinstdoutrzbase_envrCrD)r9rrrzr' multithread multiprocessrrr__init__s  zSimpleHandler.__init__cC|jSr/)rrQrrrr>zSimpleHandler.get_stdincCrr/)rzrQrrrr?rzSimpleHandler.get_stderrcCs|j|jdSr/)r'updaterrQrrrr=szSimpleHandler.add_cgi_varscCs^|j|}|dus|t|krdSddlm}|dt ||d}|s(dS|j|}q)Nr)warnz9SimpleHandler.stdout.write() should not do partial writes)rrLrSwarningsrDeprecationWarning)r9rPr2rrrrrls    zSimpleHandler._writecCs|j|jj|_dSr/)rryrprQrrrrps zSimpleHandler._flushN)TF) rrrrr>r?r=rlrprrrrrs   rc@seZdZ dZdS)r FN)rrrrFrrrrr sr c@eZdZ dZiZddZdS)r Tc Cs(tj|tjjtjjtjtddddS)NFTrr)r rr"rbufferrrzr rQrrrrs zCGIHandler.__init__NrrrrAr;rrrrrr s  r c@r)r Tc Csjt}|dd}|dd}|d|dr"|t|d|d<tj|tjjtj jtj |ddddS)Nrrr/FTr) r r*rrSr rr"rrrrz)r9r'pathZscriptrrrr2s   zIISCGIHandler.__init__Nrrrrrr s  r )utilrrrrYrr"r&r __all__rrr __contains__rrr rrr r r rrrrs( <V2