o ?Og¥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ú7/opt/alt/python310/lib64/python3.10/wsgiref/handlers.pyÚformat_date_timesÿr> ZHTTPSÚ PATH_INFOZ AUTH_TYPEZREQUEST_METHODZ CONTENT_TYPEZ REMOTE_USERZ REMOTE_IDENTZ QUERY_STRINGZCONTENT_LENGTHÚ SCRIPT_NAMEcCs6t|ƒp| d¡p| d¡p| d¡ot|dd…ƒS)NZHTTP_ZSSL_Z REDIRECT_é )Ú _is_requestÚ startswithÚ_needs_transcode)ÚkrrrrsÿrcCsð t ¡}d}zd d|¡Wn tyd}Ynwi}tj ¡D]S\}}t|ƒrqtjdkrhtj  dd¡  ¡}|  d¡rF| d¡  d¡}n+|  d ¡rLn%|  d ¡r^d |vr^| d¡  d¡}n| |d¡  d¡}n | ||¡  d¡}|||<q"|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 "s2 ÿ   ÿ r c@s eZdZ dZdZdZdZdZdZdZ 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 Csj z| ¡||j|jƒ|_| ¡WdStttfy!YdSz| ¡WYdS|  ¡‚©N) Ú setup_environr'Ústart_responseÚresultÚfinish_responseÚConnectionAbortedErrorÚBrokenPipeErrorÚConnectionResetErrorÚ handle_errorÚclose)ÚselfZ applicationrrrÚrun€szBaseHandler.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_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_environcCs` z| ¡r | ¡s|jD]}| |¡q | ¡Wnt|jdƒr)|j ¡‚| ¡dS)Nr8)Úresult_is_fileÚsendfiler2ÚwriteÚfinish_contentÚhasattrr8©r9Údatarrrr3­s  €   zBaseHandler.finish_responsecCs t|jƒSr/)rr'©r9rrrrBÇs zBaseHandler.get_schemec CsL zt|jƒ}Wn tttfyYdSw|dkr$t|jƒ|jd<dSdS)NrúContent-Length)Úlenr2Ú TypeErrorÚAttributeErrorÚNotImplementedErrorÚstrÚ bytes_sentÚheaders)r9ZblocksrrrÚset_content_lengthÌsÿþzBaseHandler.set_content_lengthcCs d|jvr | ¡dSdS)NrR)rYrZrQrrrÚcleanup_headersÙs  ÿzBaseHandler.cleanup_headerscCsn |rz|jr|d|dƒ |d¡‚Wd}n d}w|jdur$tdƒ‚||_| |¡|_| |d¡} |jS)NrrézHeaders already set!ZStatus)Ú headers_sentÚwith_tracebackrYÚAssertionErrorÚstatusÚ headers_classÚ_convert_string_typerL)r9r`rYÚexc_infoÚnameÚvalrrrr1ásþ    zBaseHandler.start_responsecCs& t|ƒtur |Std |t|ƒ¡ƒ‚)Nz!{0} must be of type str (got {1}))ÚtyperWr_ÚformatÚrepr)r9ÚvalueÚtitlerrrrbþs  ÿz BaseHandler._convert_string_typecCs¢ |jrD| ¡r>| d|j|jf d¡¡d|jvr)| dtt ¡ƒ d¡¡|j r@d|jvrB| d|j  d¡¡dSdSdSdS| 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ƒ‚|jst|ƒ|_| ¡n |jt|ƒ7_| |¡| ¡dS)Nzwrite() before start_response())r`r_r]rSrXÚ send_headersrlÚ_flushrOrrrrLs    zBaseHandler.writecCs dS)NFrrQrrrrK)szBaseHandler.sendfilecCs( |js|j dd¡| ¡dS dS)NrRÚ0)r]rYrHrorQrrrrM>s  zBaseHandler.finish_contentc Cs” z5t|jdƒr"|j ¡Wd|_|_|_|_d|_d|_dSWd|_|_|_|_d|_d|_dSd|_|_|_|_d|_d|_w)Nr8rF)rNr2r8rYr`r'rXr]rQrrrr8Hs  üÿzBaseHandler.closecCs> | ¡d|_|jr| ¡r| ¡| t|jƒ¡dSdS)NT)r[r]rFrkrnrlÚbytesrYrQrrrroUsþzBaseHandler.send_headerscCs |j}|duo t|j|ƒSr/)rEÚ isinstancer2)r9ÚwrapperrrrrJ^szBaseHandler.result_is_filecCs |jd ¡dkS)NZSERVER_PROTOCOLzHTTP/0.9)r'ÚupperrQrrrrkdszBaseHandler.client_is_moderncCsN z"ddlm}| ¡}||d|d|d|j|ƒ| ¡Wd}dSd}w)Nr)Úprint_exceptionrr\)Ú tracebackrvr?Útraceback_limitÚflush)r9rcrvÚstderrrrrÚ log_exceptionis þ zBaseHandler.log_exceptioncCs8 | t ¡¡|js| |j|j¡|_| ¡dSdSr/) r{r"rcr]Ú error_outputr'r1r2r3rQrrrr7ys  þzBaseHandler.handle_errorcCs& ||j|jdd…t ¡ƒ|jgSr/)Ú error_statusÚ error_headersr"rcÚ error_body)r9r'r1rrrr|s zBaseHandler.error_outputcCó t‚r/©rVrOrrrrl”szBaseHandler._writecCr€r/rrQrrrrpszBaseHandler._flushcCr€r/rrQrrrr>¥ózBaseHandler.get_stdincCr€r/rrQrrrr?©r‚zBaseHandler.get_stderrcCr€r/rrQrrrr=­r‚zBaseHandler.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 ddd„Zdd„Zdd„Zd d „Zd d „Zd d„ZdS)rTFcCs(||_||_||_||_||_||_dSr/)ÚstdinÚstdoutrzÚbase_envrCrD)r9r†r‡rzr'Ú multithreadÚ multiprocessrrrÚ__init__¿s  zSimpleHandler.__init__cCó|jSr/)r†rQrrrr>ÉózSimpleHandler.get_stdincCrŒr/)rzrQrrrr?ÌrzSimpleHandler.get_stderrcCs|j |j¡dSr/)r'ÚupdaterˆrQrrrr=ÏszSimpleHandler.add_cgi_varscCs^|j |¡}|dus|t|ƒkrdSddlm}|dtƒ ||d…}|s(dS|j |¡}q)Nr)Úwarnz9SimpleHandler.stdout.write() should not do partial writes)r‡rLrSÚwarningsrÚDeprecationWarning)r9rPr2rrrrrlÒs  ÿ  üzSimpleHandler._writecCs|j ¡|jj|_dSr/)r‡ryrprQrrrrpßs zSimpleHandler._flushN)TF) rƒr„r…r‹r>r?r=rlrprrrrr²s ÿ  rc@seZdZ dZdS)r FN)rƒr„r…rFrrrrr äsr c@óeZdZ dZiZdd„ZdS)r Tc Cs(tj|tjjtjjtjtƒddddS)NFT©r‰rŠ)r r‹r"r†Úbufferr‡rzr rQrrrr‹s þzCGIHandler.__init__N©rƒr„r…rAr;r‹rrrrr üs  r c@r’)r Tc Csjtƒ}| dd¡}| dd¡}|d |d¡r"|t|ƒd…|d<tj|tjjtj jtj |ddddS)Nrrrú/FTr“) r r*rrSr r‹r"r†r”r‡rz)r9r'ÚpathZscriptrrrr‹2s   þzIISCGIHandler.__init__Nr•rrrrr s  r )ÚutilrrrrYrr"r&r Ú__all__rrrÚ __contains__rrr rrr r r rrrrÚs( ý<V2