a XC?h�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 REMOTE_USERZHTTPSZREQUEST_METHODZ CONTENT_TYPEZ QUERY_STRING� PATH_INFOZCONTENT_LENGTHZ AUTH_TYPEZ REMOTE_IDENT� SCRIPT_NAMEcCs6t|�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'r1rrrrz�s zBaseHandler.error_outputcCst�dSr/�rVrOrrrrj�szBaseHandler._writecCst�dSr/r~rQrrrrn�szBaseHandler._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�r�r�r>r?r=rjrnrrrrr�s�  rc@seZdZdZdS)r FN)rr�r�rFrrrrr �sr c@seZdZdZiZdd�ZdS)r Tc Cs(tj|tjjtjjtjt�ddd�dS)NFT�r�r�)r r�r"r��bufferr�rxr rQrrrr�s�zCGIHandler.__init__N�rr�r�rAr;r�rrrrr �sr c@seZdZdZiZdd�ZdS)r Tc Csjt�}|�dd�}|�dd�}|d�|d�rD|t|�d�|d<tj|tjjtj jtj |ddd�dS)Nrrr�/FTr�) r r*rrSr r�r"r�r�r�rx)r9r'�pathZscriptrrrr�2s  �zIISCGIHandler.__init__Nr�rrrrr sr )�utilrrrrYrr"r&r �__all__rrr� __contains__rrr rrr r r rrrr�s   <V2