3 \ R @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:tj|\ }}}}}}}}} dt||t|||||fS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timeZgmtime _weekdayname _monthname) Z timestampZyearZmonthZdayZhhZmmZssZwdyzr(/usr/lib64/python3.6/wsgiref/handlers.pyformat_date_timesr SCRIPT_NAME PATH_INFOZ QUERY_STRINGZREQUEST_METHODZ AUTH_TYPEZ CONTENT_TYPEZCONTENT_LENGTHZHTTPSZ REMOTE_USERZ REMOTE_IDENTcCs6t|p4|jdp4|jdp4|jdo4t|ddS)NZHTTP_ZSSL_Z REDIRECT_ ) _is_request startswith_needs_transcode)krrrrsrc Cstj}d}ydjd|Wntk r4d}YnXi}xtjjD]\}}t|rtjdkrtjj ddj }|j dr|jdj d}q|j d rq|j d rd |kr|jdj d}q|j|dj d}n|j||j d}|||<qFW|S) Nsurrogateescapezutf-8replaceZwin32SERVER_SOFTWAREzmicrosoft-iis/z iso-8859-1zapache/z simplehttp/zpython/3) sysgetfilesystemencodingencode LookupErrorosenvironitemsrplatformgetlowerrdecode)encescr%rvZsoftwarerrrr "s,      c@seZdZd;ZdZdZdZdZdZdZ e Z e Z eZdZdZdrrrTFz1.0Nz500 Internal Server Error Content-Type text/plains;A server error occurred. Please contact the administrator.cCsZy$|j||j|j|_|jWn0y |jWn|jYnXYnXdS)N) setup_environr%start_responseresultfinish_response handle_errorclose)selfZ applicationrrrruns  zBaseHandler.runcCs|jj}|_|j|j|d<|j|d<|j|d<|j|d<|j|d<|j |d<|j |d<|j dk rx|j |d<|j r|j r|jd |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)r6envrrrr0s          zBaseHandler.setup_environc CsJz:|j s|j r8x|jD]}|j|qW|jWd|jXdS)N)result_is_filesendfiler2writefinish_contentr5)r6datarrrr3s   zBaseHandler.finish_responsecCs t|jS)N)rr%)r6rrrr?szBaseHandler.get_schemec CsJyt|j}Wntttfk r(YnX|dkrFt|j|jd<dSdS)NrzContent-Length)lenr2 TypeErrorAttributeErrorNotImplementedErrorstr bytes_sentheaders)r6Zblocksrrrset_content_lengthszBaseHandler.set_content_lengthcCsd|jkr|jdS)NzContent-Length)rRrS)r6rrrcleanup_headerss zBaseHandler.cleanup_headersc Csh|r2z$|jr&|d|dj|dWdd}Xn|jdk rDtd||_|j||_|j|d}|jS)NrrzHeaders already set!ZStatus) headers_sentwith_tracebackrRAssertionErrorstatus headers_class_convert_string_typerI)r6rYrRexc_inforrrr1s   zBaseHandler.start_responsecCs(t|tkr|Stdj|t|dS)Nz!{0} must be of type str (got {1}))typerPrXformatrepr)r6valuetitlerrrr[s z BaseHandler._convert_string_typecCs|jrx|jr|jd|j|jfjdd|jkrP|jdttjjd|j rd|jkr|jd|j jdn|jd|jjddS)Nz HTTP/%s %s z iso-8859-1ZDatez Date: %s ZServerz Server: %s z Status: %s ) rCclient_is_modern_write http_versionrYr"rRrr rD)r6rrr send_preambles zBaseHandler.send_preamblecCsR|jstdn,|js*t||_|jn|jt|7_|j||jdS)Nzwrite() before start_response())rYrXrVrLrQ send_headersrc_flush)r6rKrrrrIs    zBaseHandler.writecCsdS)NFr)r6rrrrHszBaseHandler.sendfilecCs"|js|jjdd|jndS)NzContent-Length0)rVrRrErf)r6rrrrJ0s zBaseHandler.finish_contentc CsFzt|jdr|jjWdd|_|_|_|_d|_d|_XdS)Nr5rF)hasattrr2r5rRrYr%rQrV)r6rrrr5:s  zBaseHandler.closecCs:|jd|_|j s|jr6|j|jt|jdS)NT)rTrVrCrbrercbytesrR)r6rrrrfGs zBaseHandler.send_headerscCs|j}|dk ot|j|S)N)rB isinstancer2)r6wrapperrrrrGPszBaseHandler.result_is_filecCs|jdjdkS)NZSERVER_PROTOCOLzHTTP/0.9)r%upper)r6rrrrbVszBaseHandler.client_is_modernc CsJz>ddlm}|j}||d|d|d|j||jWdd}XdS)Nr)print_exceptionrrU) tracebackrnr<traceback_limitflush)r6r\rnstderrrrr log_exception[s   zBaseHandler.log_exceptioncCs2|jtj|js.|j|j|j|_|jdS)N) rsr r\rV error_outputr%r1r2r3)r6rrrr4kszBaseHandler.handle_errorcCs$||j|jddtj|jgS)N) error_status error_headersr r\ error_body)r6r%r1rrrrtss zBaseHandler.error_outputcCstdS)N)rO)r6rKrrrrcszBaseHandler._writecCstdS)N)rO)r6rrrrgszBaseHandler._flushcCstdS)N)rO)r6rrrr;szBaseHandler.get_stdincCstdS)N)rO)r6rrrr<szBaseHandler.get_stderrcCstdS)N)rO)r6rrrr:szBaseHandler.add_cgi_vars)rr)r.r/)N)1__name__ __module__ __qualname__r=r@rAr>rCrdrDr r8rrBrrZrprurvrwrYr2rVrRrQr7r0r3r?rSrTr1r[rerIrHrJr5rfrGrbrsr4rtrcrgr;r<r:rrrrr^sT      c@s>eZdZdddZddZddZd d Zd d Zd dZdS)rTFcCs(||_||_||_||_||_||_dS)N)stdinstdoutrrbase_envr@rA)r6r{r|rrr% multithread multiprocessrrr__init__s zSimpleHandler.__init__cCs|jS)N)r{)r6rrrr;szSimpleHandler.get_stdincCs|jS)N)rr)r6rrrr<szSimpleHandler.get_stderrcCs|jj|jdS)N)r%updater})r6rrrr:szSimpleHandler.add_cgi_varscCsb|jj|}|dks |t|kr$dSddlm}|dtx"||d}|sNP|jj|}qr8rrrrrr sc@seZdZdZiZddZdS)r Tc Csjt}|jdd}|jdd}|dj|drD|t|d|d<tj|tjjtj jtj |ddddS)Nrrr/FT)r~r) r r(rrLr rr r{rr|rr)r6r%pathZscriptrrrr$s  zIISCGIHandler.__init__N)rxryrzr>r8rrrrrr s)utilrrrrRrr r$r __all__rrr __contains__rrr rrr r r rrrrs(   <H2