o
    r¨ÊhÓ  ã                   @   sÀ   d Z ddlZddlZddlZddlm  mZ ddlm  mZ ddl	m  m
Z
 ddlmZ ejZddlmZ G dd„ dƒZe dej¡Ze dej¡Ze d	ej¡ZejZejZd
d„ ZdS )zA$Id: default_handler.py,v 1.8 2002/08/01 18:15:45 akuchling Exp $é    N)Ú	html_repr)Úcounterc                   @   sZ   e Zd ZddgZdZddgZejZdd„ Z	dZ
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Údefault_handlerÚGETÚHEADzDefault HTTP Request Handlerz
index.htmlzdefault.htmlc                 C   s"   || _ tƒ | _tƒ | _tƒ | _d S )N)Ú
filesystemr   Úhit_counterÚfile_counterÚcache_counter)Úselfr   © r   úS/var/www/html/env/lib/python3.10/site-packages/supervisor/medusa/default_handler.pyÚ__init__5   s   zdefault_handler.__init__r   c                 C   s   d| j | jt| ƒf S )Nz<%s (%s hits) at %x>)ÚIDENTr   Úid©r   r   r   r   Ú__repr__@   s
   ýzdefault_handler.__repr__c                 C   s   dS )Né   r   )r   Úrequestr   r   r   ÚmatchH   s   zdefault_handler.matchc                 C   sv  |j | jvr| d¡ d S | j ¡  | ¡ \}}}}d|v r"t|ƒ}|r8|d dkr8|dd … }|r8|d dks*| j |¡r†|rX|d dkrXd|j	j
j|f |d< | d	¡ d S d}|rf|d dkrf|d7 }| jD ]}|| }| j |¡r{|}d} nqi|s…| d
¡ d S n| j |¡s“| d
¡ d S | j |¡tj }	tt|jƒ}
d}|
r¾|
 d¡}|r¾zt|ƒ}||	kr¸d}W n   Y d}|
rÊt |
 d¡¡}z| j |¡tj }W n   | d
¡ Y d S |r÷|r÷||kr÷d|_| ¡  | j ¡  d S z	| j |d¡}W n t�y   | d
¡ Y d S w t |¡|d< |	|d< |  ||¡ |j dk�r0| |   |¡¡ | j! ¡  | ¡  d S )Ni�  ú%r   ú/r   éÿÿÿÿzhttp://%s/%s/ÚLocationi-  i”  é   i0  ÚrbzLast-ModifiedzContent-Lengthr   )"ÚcommandÚvalid_commandsÚerrorr   Ú	incrementÚ	split_uriÚunquoter   ÚisdirÚchannelÚserverÚserver_nameÚdirectory_defaultsÚisfileÚstatÚST_SIZEÚget_header_matchÚIF_MODIFIED_SINCEÚheaderÚgroupÚintÚ	http_dateÚparse_http_dateÚST_MTIMEÚ
reply_codeÚdoner
   ÚopenÚIOErrorÚbuild_http_dateÚset_content_typeÚpushÚdefault_file_producerr	   )r   r   ÚpathÚparamsÚqueryÚfragmentÚfoundÚdefaultÚpÚfile_lengthÚimsÚlength_matchÚlengthÚims_dateÚmtimeÚfiler   r   r   Úhandle_requestM   s–   

ÿ
þ

ý
þ

€


þ
zdefault_handler.handle_requestc                 C   s.   t  |¡\}}|d ur||d< d S d|d< d S )NzContent-Typez
text/plain)Ú	mimetypesÚ
guess_type)r   r:   r   ÚtypÚencodingr   r   r   r7   «   s   z default_handler.set_content_typec                 C   s8   t  dt| ƒ d d| j  d| j  d| j  d ¡S )Nz<li>%sz<ul>z  <li><b>Total Hits:</b> %sz   <li><b>Files Delivered:</b> %sz  <li><b>Cache Hits:</b> %sz</ul>)Ú	producersÚsimple_producerr   r   r	   r
   r   r   r   r   Ústatus´   s   
ÿþýüûÿzdefault_handler.statusN)Ú__name__Ú
__module__Ú__qualname__r   r   r&   rM   Úfile_producerr9   r   r   r   r   rH   r7   rO   r   r   r   r   r   '   s    þ	^	r   z2If-Modified-Since: ([^;]+)((; length=([0-9]+)$)|$)zUser-Agent: (.*)zDContent-Type: ([^;]+)((; boundary=([A-Za-z0-9\'\(\)+_,./:=?-]+)$)|$)c                 C   s0   |   d¡}|   d¡}||kr| |d d … S dS )Nr   Ú.r   Ú )Úrfind)r:   ÚdirsepÚdotsepr   r   r   Úget_extensionÐ   s
   

rY   )ÚRCS_IDrI   Úrer(   Úsupervisor.medusa.http_dateÚmedusar/   Úsupervisor.medusa.http_serverÚhttp_serverÚsupervisor.medusa.producersrM   Úsupervisor.medusa.utilr   r!   Úsupervisor.medusa.counterr   r   ÚcompileÚ
IGNORECASEr+   Ú
USER_AGENTÚCONTENT_TYPEÚ
get_headerr*   rY   r   r   r   r   Ú<module>   s0    þþ