???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \	R                 @   s   d dl mZmZmZ d dlmZ ddlZddlZddlZddddd	d
gZ	dddddddgZ
dddddddddddddgZdd Zd d!d"d#d$d%d&d'd(d)h
jZd*d+ Zd,d
 ZG d-d dZG d.d deZG d/d deZG d0d deZG d1d	 d	eZdS )2   )FileWrapperguess_schemeis_hop_by_hop)Headers    NBaseHandlerSimpleHandlerBaseCGIHandler
CGIHandlerIISCGIHandlerread_environZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc       
   	   C   s:   t j| \	}}}}}}}}}	dt| |t| ||||f S )Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timeZgmtime_weekdayname
_monthname)
Z	timestampZyearZmonthZdayZhhZmmZssZwdyz r   (/usr/lib64/python3.6/wsgiref/handlers.pyformat_date_time   s    r   SCRIPT_NAME	PATH_INFOZQUERY_STRINGZREQUEST_METHODZ	AUTH_TYPEZCONTENT_TYPEZCONTENT_LENGTHZHTTPSZREMOTE_USERZREMOTE_IDENTc             C   s6   t | p4| jdp4| jdp4| jdo4t| dd  S )NZHTTP_ZSSL_Z	REDIRECT_	   )_is_request
startswith_needs_transcode)kr   r   r   r      s    r   c              C   s   t j } d}ydjd| W n tk
r4   d}Y nX i }xtjj D ]\}}t|rt jdkrtjj	ddj
 }|jdr|jdjd}q|jd	rq|jd
rd|kr|jdjd}q|j| djd}n|j| |jd}|||< qFW |S )Nsurrogateescape zutf-8replaceZwin32SERVER_SOFTWAREzmicrosoft-iis/z
iso-8859-1zapache/zsimplehttp/zpython/3)sysgetfilesystemencodingencodeLookupErrorosenvironitemsr   platformgetlowerr   decode)encescr%   r   vZsoftwarer   r   r   r   "   s,    

	


c               @   s  e Zd Zd;ZdZdZdZdZdZdZ	e
 ZeZeZdZdZd<gZd
Zd ZZdZdZdZdd Zdd Zdd Zdd Zdd Zdd Zd=dd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'd)d* Z(d+d, Z)d-d. Z*d/d0 Z+d1d2 Z,d3d4 Z-d5d6 Z.d7d8 Z/d9d: Z0dS )>r   r   r   TFz1.0Nz500 Internal Server ErrorContent-Type
text/plains;   A server error occurred.  Please contact the administrator.c             C   sZ   y$| j   || j| j| _| j  W n0   y| j  W n   | j   Y nX Y nX d S )N)setup_environr%   start_responseresultfinish_responsehandle_errorclose)selfZapplicationr   r   r   run   s    zBaseHandler.runc             C   s   | j j  }| _| j  | j |d< | j |d< | j|d< | j|d< | j |d< | j	|d< | j
|d< | jd k	rx| j|d< | jr| jr|jd	| j d S )
Nz
wsgi.inputzwsgi.errorszwsgi.versionzwsgi.run_oncezwsgi.url_schemezwsgi.multithreadzwsgi.multiprocesszwsgi.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)r6   envr   r   r   r0      s    





zBaseHandler.setup_environc          
   C   sJ   z:| j   s| j  r8x| jD ]}| j| qW | j  W d | j  X d S )N)result_is_filesendfiler2   writefinish_contentr5   )r6   datar   r   r   r3      s    zBaseHandler.finish_responsec             C   s
   t | jS )N)r   r%   )r6   r   r   r   r?      s    zBaseHandler.get_schemec             C   sJ   yt | j}W n tttfk
r(   Y nX |dkrFt| j| jd< d S d S )Nr   zContent-Length)lenr2   	TypeErrorAttributeErrorNotImplementedErrorstr
bytes_sentheaders)r6   Zblocksr   r   r   set_content_length   s    zBaseHandler.set_content_lengthc             C   s   d| j kr| j  d S )NzContent-Length)rR   rS   )r6   r   r   r   cleanup_headers   s    
zBaseHandler.cleanup_headersc             C   sh   |r2z$| j r&|d |d j|d W d d }X n| jd k	rDtd|| _| j|| _| j|d}| jS )Nr   r      zHeaders already set!ZStatus)headers_sentwith_tracebackrR   AssertionErrorstatusheaders_class_convert_string_typerI   )r6   rY   rR   exc_infor   r   r   r1      s    
zBaseHandler.start_responsec             C   s(   t |tkr|S tdj|t|d S )Nz!{0} must be of type str (got {1}))typerP   rX   formatrepr)r6   valuetitler   r   r   r[      s    z BaseHandler._convert_string_typec             C   s   | j rx| j r| jd| j| jf jd d| jkrP| jdttj  jd | j	rd| jkr| jd| j	 jd n| jd| j jd d S )NzHTTP/%s %s
z
iso-8859-1ZDatez
Date: %s
ZServerzServer: %s
zStatus: %s
)
rC   client_is_modern_writehttp_versionrY   r"   rR   r   r   rD   )r6   r   r   r   send_preamble   s    
zBaseHandler.send_preamblec             C   sR   | j stdn,| js*t|| _| j  n|  jt|7  _| j| | j  d S )Nzwrite() before start_response())rY   rX   rV   rL   rQ   send_headersrc   _flush)r6   rK   r   r   r   rI     s    



zBaseHandler.writec             C   s   dS )NFr   )r6   r   r   r   rH     s    zBaseHandler.sendfilec             C   s"   | j s| jjdd | j  n d S )NzContent-Length0)rV   rR   rE   rf   )r6   r   r   r   rJ   0  s    
zBaseHandler.finish_contentc             C   sF   zt | jdr| jj  W d d  | _ | _ | _| _d| _d| _X d S )Nr5   r   F)hasattrr2   r5   rR   rY   r%   rQ   rV   )r6   r   r   r   r5   :  s     zBaseHandler.closec             C   s:   | j   d| _| j s| j r6| j  | jt| j d S )NT)rT   rV   rC   rb   re   rc   bytesrR   )r6   r   r   r   rf   G  s
    zBaseHandler.send_headersc             C   s   | j }|d k	ot| j|S )N)rB   
isinstancer2   )r6   wrapperr   r   r   rG   P  s    zBaseHandler.result_is_filec             C   s   | j d j dkS )NZSERVER_PROTOCOLzHTTP/0.9)r%   upper)r6   r   r   r   rb   V  s    zBaseHandler.client_is_modernc             C   sJ   z>ddl m} | j }||d |d |d | j| |j  W d d }X d S )Nr   )print_exceptionr   rU   )	tracebackrn   r<   traceback_limitflush)r6   r\   rn   stderrr   r   r   log_exception[  s    
zBaseHandler.log_exceptionc             C   s2   | j tj  | js.| j| j| j| _| j  d S )N)	rs   r    r\   rV   error_outputr%   r1   r2   r3   )r6   r   r   r   r4   k  s    zBaseHandler.handle_errorc             C   s$   || j | jd d  tj  | jgS )N)error_statuserror_headersr    r\   
error_body)r6   r%   r1   r   r   r   rt   s  s    zBaseHandler.error_outputc             C   s   t d S )N)rO   )r6   rK   r   r   r   rc     s    zBaseHandler._writec             C   s   t d S )N)rO   )r6   r   r   r   rg     s    zBaseHandler._flushc             C   s   t d S )N)rO   )r6   r   r   r   r;     s    zBaseHandler.get_stdinc             C   s   t d S )N)rO   )r6   r   r   r   r<     s    zBaseHandler.get_stderrc             C   s   t d S )N)rO   )r6   r   r   r   r:     s    zBaseHandler.add_cgi_vars)r   r   )r.   r/   )N)1__name__
__module____qualname__r=   r@   rA   r>   rC   rd   rD   r   r8   r   rB   r   rZ   rp   ru   rv   rw   rY   r2   rV   rR   rQ   r7   r0   r3   r?   rS   rT   r1   r[   re   rI   rH   rJ   r5   rf   rG   rb   rs   r4   rt   rc   rg   r;   r<   r:   r   r   r   r   r   ^   sT   

		c               @   s>   e Zd ZdddZdd Zdd Zd	d
 Zdd Zdd ZdS )r   TFc             C   s(   || _ || _|| _|| _|| _|| _d S )N)stdinstdoutrr   base_envr@   rA   )r6   r{   r|   rr   r%   multithreadmultiprocessr   r   r   __init__  s    zSimpleHandler.__init__c             C   s   | j S )N)r{   )r6   r   r   r   r;     s    zSimpleHandler.get_stdinc             C   s   | j S )N)rr   )r6   r   r   r   r<     s    zSimpleHandler.get_stderrc             C   s   | j j| j d S )N)r%   updater}   )r6   r   r   r   r:     s    zSimpleHandler.add_cgi_varsc             C   sb   | j j|}|d ks |t|kr$d S ddlm} |dt x"||d  }|sNP | j j|}q<W d S )Nr   )warnz9SimpleHandler.stdout.write() should not do partial writes)r|   rI   rL   warningsr   DeprecationWarning)r6   rK   r2   r   r   r   r   rc     s    zSimpleHandler._writec             C   s   | j j  | j j| _d S )N)r|   rq   rg   )r6   r   r   r   rg     s    
zSimpleHandler._flushN)TF)	rx   ry   rz   r   r;   r<   r:   rc   rg   r   r   r   r   r     s   
	c               @   s   e Zd ZdZdS )r	   FN)rx   ry   rz   rC   r   r   r   r   r	     s   c               @   s   e Zd ZdZi Zdd ZdS )r
   Tc          	   C   s(   t j| tjjtjjtjt ddd d S )NFT)r~   r   )r	   r   r    r{   bufferr|   rr   r   )r6   r   r   r   r     s    zCGIHandler.__init__N)rx   ry   rz   r>   r8   r   r   r   r   r   r
     s   c               @   s   e Zd ZdZi Zdd ZdS )r   Tc          	   C   sj   t  }|jdd}|jdd}|d j|d rD|t|d  |d< tj| tjjtj	jtj
|ddd d S )Nr   r   r   /FT)r~   r   )r   r(   r   rL   r	   r   r    r{   r   r|   rr   )r6   r%   pathZscriptr   r   r   r   $  s    zIISCGIHandler.__init__N)rx   ry   rz   r>   r8   r   r   r   r   r   r     s   )utilr   r   r   rR   r   r    r$   r   __all__r   r   r   __contains__r   r   r   r   r   r	   r
   r   r   r   r   r   <module>   s(   
<  H2