o
    f                     @   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   T/var/www/html/venv/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}|rzt|}||	krd}W n   Y d}|
rt|
d}z| j|tj }W n   |d
 Y d S |r|r||krd|_|  | 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    