3 2a 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 timestampZyearZmonthZdayZhhZmmssZwdyzr-/opt/alt/python36/lib64/python3.6/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-8replacewin32SERVER_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)r8envrrrr2s          zBaseHandler.setup_environc CsJz:|j s|j r8x|jD]}|j|qW|jWd|jXdS)N)result_is_filesendfiler4writefinish_contentr7)r8datarrrr5s   zBaseHandler.finish_responsecCs t|jS)N)rr')r8rrrrAszBaseHandler.get_schemec CsJyt|j}Wntttfk r(YnX|dkrFt|j|jd<dSdS)NrzContent-Length)lenr4 TypeErrorAttributeErrorNotImplementedErrorstr bytes_sentheaders)r8Zblocksrrrset_content_lengthszBaseHandler.set_content_lengthcCsd|jkr|jdS)NzContent-Length)rTrU)r8rrrcleanup_headerss zBaseHandler.cleanup_headersc Csh|r2z$|jr&|d|dj|dWdd}Xn|jdk rDtd||_|j||_|j|d}|jS)NrrzHeaders already set!ZStatus) headers_sentwith_tracebackrTAssertionErrorstatus headers_class_convert_string_typerK)r8r[rTexc_inforrrr3s   zBaseHandler.start_responsecCs(t|tkr|Stdj|t|dS)Nz!{0} must be of type str (got {1}))typerRrZformatrepr)r8valuetitlerrrr]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 ) rEclient_is_modern_write http_versionr[r$rTrr rF)r8rrr send_preambles zBaseHandler.send_preamblecCsR|jstdn,|js*t||_|jn|jt|7_|j||jdS)Nzwrite() before start_response())r[rZrXrNrS send_headersre_flush)r8rMrrrrKs    zBaseHandler.writecCsdS)NFr)r8rrrrJszBaseHandler.sendfilecCs"|js|jjdd|jndS)NzContent-Length0)rXrTrGrh)r8rrrrL0s zBaseHandler.finish_contentc CsFzt|jdr|jjWdd|_|_|_|_d|_d|_XdS)Nr7rF)hasattrr4r7rTr[r'rSrX)r8rrrr7:s  zBaseHandler.closecCs:|jd|_|j s|jr6|j|jt|jdS)NT)rVrXrErdrgrebytesrT)r8rrrrhGs zBaseHandler.send_headerscCs|j}|dk ot|j|S)N)rD isinstancer4)r8wrapperrrrrIPszBaseHandler.result_is_filecCs|jdjdkS)NZSERVER_PROTOCOLzHTTP/0.9)r'upper)r8rrrrdVszBaseHandler.client_is_modernc CsJz>ddlm}|j}||d|d|d|j||jWdd}XdS)Nr)print_exceptionrrW) tracebackrpr>traceback_limitflush)r8r^rpstderrrrr log_exception[s   zBaseHandler.log_exceptioncCs2|jtj|js.|j|j|j|_|jdS)N) rur"r^rX error_outputr'r3r4r5)r8rrrr6kszBaseHandler.handle_errorcCs$||j|jddtj|jgS)N) error_status error_headersr"r^ error_body)r8r'r3rrrrvss zBaseHandler.error_outputcCstdS)N)rQ)r8rMrrrreszBaseHandler._writecCstdS)N)rQ)r8rrrriszBaseHandler._flushcCstdS)N)rQ)r8rrrr=szBaseHandler.get_stdincCstdS)N)rQ)r8rrrr>szBaseHandler.get_stderrcCstdS)N)rQ)r8rrrr<szBaseHandler.add_cgi_vars)rr)r0r1)N)1__name__ __module__ __qualname__r?rBrCr@rErfrFr r:rrDrr\rrrwrxryr[r4rXrTrSr9r2r5rArUrVr3r]rgrKrJrLr7rhrIrdrur6rvrerir=r>r<rrrrr^sT      c@s>eZdZdddZddZddZd d Zd d Zd dZdS)rTFcCs(||_||_||_||_||_||_dS)N)stdinstdoutrtbase_envrBrC)r8r}r~rtr' multithread multiprocessrrr__init__s zSimpleHandler.__init__cCs|jS)N)r})r8rrrr=szSimpleHandler.get_stdincCs|jS)N)rt)r8rrrr>szSimpleHandler.get_stderrcCs|jj|jdS)N)r'updater)r8rrrr<szSimpleHandler.add_cgi_varscCsb|jj|}|dks |t|kr$dSddlm}|dtx"||d}|sNP|jj|}qr<rerirrrrrs   c@seZdZdZdS)r FN)rzr{r|rErrrrr sc@seZdZdZiZddZdS)r Tc Cs(tj|tjjtjjtjtddddS)NFT)rr)r rr"r}bufferr~rtr )r8rrrrszCGIHandler.__init__N)rzr{r|r@r:rrrrrr sc@seZdZdZiZddZdS)r Tc Csjt}|jdd}|jdd}|dj|drD|t|d|d<tj|tjjtj jtj |ddddS)Nrrr/FT)rr) r r*rrNr rr"r}rr~rt)r8r'pathZscriptrrrr$s  zIISCGIHandler.__init__N)rzr{r|r@r:rrrrrr s)utilrrrrTrr"r&r __all__rrr __contains__rrr rrr r r rrrrs(   <H2