a ÕDOg¥Tã@sÄddlmZmZmZddlmZddlZddlZddlZgd¢Z gd¢Z gd¢Z dd „Z hd £j Zd d „Zd d„ZGdd„dƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZdS)é)Ú FileWrapperÚ guess_schemeÚ is_hop_by_hop)ÚHeaderséN)Ú BaseHandlerÚ SimpleHandlerÚBaseCGIHandlerÚ CGIHandlerÚ IISCGIHandlerÚ read_environ)ZMonZTueZWedZThuZFriZSatZSun) NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc Cs:t |¡\ }}}}}}}}} dt||t|||||fS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)ÚtimeÚgmtimeÚ _weekdaynameÚ _monthname) Z timestampZyearZmonthZdayZhhZmmZssZwdÚyÚz©rú5/opt/alt/python39/lib64/python3.9/wsgiref/handlers.pyÚformat_date_timesÿr> Z AUTH_TYPEZREQUEST_METHODZ REMOTE_IDENTZ QUERY_STRINGÚ SCRIPT_NAMEÚ PATH_INFOZ REMOTE_USERZ CONTENT_TYPEZCONTENT_LENGTHZHTTPScCs6t|ƒp4| d¡p4| d¡p4| d¡o4t|dd…ƒS)NZHTTP_ZSSL_Z REDIRECT_é )Ú _is_requestÚ startswithÚ_needs_transcode)ÚkrrrrsÿrcCsît ¡}d}zd d|¡Wnty2d}Yn0i}tj ¡D]¦\}}t|ƒràtjdkrÎtj  dd¡  ¡}|  d¡rŠ| d¡  d¡}qà|  d ¡r–qà|  d ¡rºd |vrº| d¡  d¡}qà| |d¡  d¡}n| ||¡  d¡}|||<qB|S) NÚsurrogateescapeÚzutf-8ÚreplaceZwin32ÚSERVER_SOFTWAREzmicrosoft-iis/ú iso-8859-1zapache/z simplehttp/zpython/3) ÚsysÚgetfilesystemencodingÚencodeÚ LookupErrorÚosÚenvironÚitemsrÚplatformÚgetÚlowerrÚdecode)ÚencZescr'rÚvZsoftwarerrrr "s0     ÿþ r c@seZdZdZdZdZdZdZdZdZ e ƒZ e Z eZdZdZdgZdZdZZdZdZd Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zd:dd„Zdd„Z dd„Z!dd„Z"dd„Z#d d!„Z$d"d#„Z%d$d%„Z&d&d'„Z'd(d)„Z(d*d+„Z)d,d-„Z*d.d/„Z+d0d1„Z,d2d3„Z-d4d5„Z.d6d7„Z/d8d9„Z0dS);r)rrTFz1.0Nz500 Internal Server Error)z Content-Typez text/plains;A server error occurred. Please contact the administrator.rc Csrz$| ¡||j|jƒ|_| ¡WnHtttfy>YdSz | ¡Wn|  ¡‚Yn0Yn0dS©N) Ú setup_environr'Ústart_responseÚresultÚfinish_responseÚConnectionAbortedErrorÚBrokenPipeErrorÚConnectionResetErrorÚ handle_errorÚclose)ÚselfZ applicationrrrÚrun€s  zBaseHandler.runcCs–|j ¡}|_| ¡| ¡|d<| ¡|d<|j|d<|j|d<| ¡|d<|j |d<|j |d<|j durx|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_environÚcopyr'Ú add_cgi_varsÚ get_stdinÚ get_stderrÚ wsgi_versionÚ wsgi_run_onceÚ get_schemeÚwsgi_multithreadÚwsgi_multiprocessÚwsgi_file_wrapperÚ origin_serverÚserver_softwareÚ setdefault)r9Úenvrrrr0˜s          zBaseHandler.setup_environcCsdz2| ¡r| ¡s0|jD]}| |¡q| ¡Wn$t|jdƒrP|j ¡‚Yn 0| ¡dS)Nr8)Úresult_is_fileÚsendfiler2ÚwriteÚfinish_contentÚhasattrr8©r9Údatarrrr3­s     zBaseHandler.finish_responsecCs t|jƒSr/)rr'©r9rrrrBÇszBaseHandler.get_schemec CsHzt|jƒ}Wntttfy&Yn0|dkrDt|jƒ|jd<dSdS)NrúContent-Length)Úlenr2Ú TypeErrorÚAttributeErrorÚNotImplementedErrorÚstrÚ bytes_sentÚheaders)r9ZblocksrrrÚset_content_lengthÌszBaseHandler.set_content_lengthcCsd|jvr| ¡dS)NrR)rYrZrQrrrÚcleanup_headersÙs zBaseHandler.cleanup_headerscCsl|r6z(|jr&|d|dƒ |d¡‚Wd}qHd}0n|jdurHtdƒ‚||_| |¡|_| |d¡}|jS)NrrézHeaders already set!ZStatus)Ú headers_sentÚwith_tracebackrYÚAssertionErrorÚstatusÚ headers_classÚ_convert_string_typerL)r9r`rYÚexc_inforrrr1ás   zBaseHandler.start_responsecCs(t|ƒtur|Std |t|ƒ¡ƒ‚dS)Nz!{0} must be of type str (got {1}))ÚtyperWr_ÚformatÚrepr)r9ÚvalueÚtitlerrrrbþs  ÿz BaseHandler._convert_string_typecCs’|jrx| ¡rŽ| d|j|jf d¡¡d|jvrP| dtt ¡ƒ d¡¡|j rŽd|jvrŽ| d|j  d¡¡n| d|j d¡¡dS)Nz HTTP/%s %s r!ZDatez Date: %s ZServerz Server: %s z Status: %s ) rFÚclient_is_modernÚ_writeÚ http_versionr`r$rYrr rGrQrrrÚ send_preambles ÿzBaseHandler.send_preamblecCsR|jstdƒ‚n,|js*t|ƒ|_| ¡n|jt|ƒ7_| |¡| ¡dS)Nzwrite() before start_response())r`r_r]rSrXÚ send_headersrjÚ_flushrOrrrrLs    zBaseHandler.writecCsdS)NFrrQrrrrK)szBaseHandler.sendfilecCs"|js|j dd¡| ¡ndS)NrRÚ0)r]rYrHrmrQrrrrM>s zBaseHandler.finish_contentc Csjz>t|jdƒr|j ¡Wd|_|_|_|_d|_d|_n&d|_|_|_|_d|_d|_0dS)Nr8rF)rNr2r8rYr`r'rXr]rQrrrr8Hs  ÿzBaseHandler.closecCs8| ¡d|_|jr| ¡r4| ¡| t|jƒ¡dS)NT)r[r]rFrirlrjÚbytesrYrQrrrrmUs zBaseHandler.send_headerscCs|j}|duot|j|ƒSr/)rEÚ isinstancer2)r9ÚwrapperrrrrJ^szBaseHandler.result_is_filecCs|jd ¡dkS)NZSERVER_PROTOCOLzHTTP/0.9)r'ÚupperrQrrrridszBaseHandler.client_is_moderncCsNzBddlm}| ¡}||d|d|d|j|ƒ| ¡Wd}nd}0dS)Nr)Úprint_exceptionrr\)Ú tracebackrtr?Útraceback_limitÚflush)r9rcrtÚstderrrrrÚ log_exceptionis þ zBaseHandler.log_exceptioncCs2| t ¡¡|js.| |j|j¡|_| ¡dSr/) ryr"rcr]Ú error_outputr'r1r2r3rQrrrr7yszBaseHandler.handle_errorcCs$||j|jdd…t ¡ƒ|jgSr/)Ú error_statusÚ error_headersr"rcÚ error_body)r9r'r1rrrrzs zBaseHandler.error_outputcCst‚dSr/©rVrOrrrrj”szBaseHandler._writecCst‚dSr/r~rQrrrrnszBaseHandler._flushcCst‚dSr/r~rQrrrr>¥szBaseHandler.get_stdincCst‚dSr/r~rQrrrr?©szBaseHandler.get_stderrcCst‚dSr/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      rc@s>eZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„ZdS)rTFcCs(||_||_||_||_||_||_dSr/)ÚstdinÚstdoutrxÚbase_envrCrD)r9r‚rƒrxr'Ú multithreadÚ multiprocessrrrÚ__init__¿s zSimpleHandler.__init__cCs|jSr/)r‚rQrrrr>ÉszSimpleHandler.get_stdincCs|jSr/)rxrQrrrr?ÌszSimpleHandler.get_stderrcCs|j |j¡dSr/)r'Úupdater„rQrrrr=ÏszSimpleHandler.add_cgi_varscCs^|j |¡}|dus |t|ƒkr$dSddlm}|dtƒ||d…}|sLqZ|j |¡}q:dS)Nr)Úwarnz9SimpleHandler.stdout.write() should not do partial writes)rƒrLrSÚwarningsr‰ÚDeprecationWarning)r9rPr2r‰rrrrjÒs  ÿ zSimpleHandler._writecCs|j ¡|jj|_dSr/)rƒrwrnrQrrrrnßs zSimpleHandler._flushN)TF) rr€rr‡r>r?r=rjrnrrrrr²sÿ  rc@seZdZdZdS)r FN)rr€rrFrrrrr äsr c@seZdZdZiZdd„ZdS)r Tc Cs(tj|tjjtjjtjtƒddddS)NFT©r…r†)r r‡r"r‚Úbufferrƒrxr rQrrrr‡sþzCGIHandler.__init__N©rr€rrAr;r‡rrrrr üsr c@seZdZdZiZdd„ZdS)r Tc Csjtƒ}| dd¡}| dd¡}|d |d¡rD|t|ƒd…|d<tj|tjjtj jtj |ddddS)Nrrrú/FTrŒ) r r*rrSr r‡r"r‚rrƒrx)r9r'ÚpathZscriptrrrr‡2s  þzIISCGIHandler.__init__NrŽrrrrr sr )ÚutilrrrrYrr"r&r Ú__all__rrrÚ __contains__rrr rrr r r rrrrÚs   <V2