o
    "jp                     @   s|   d Z ddlmZ ddlZddlZddlmZ g Zdd Zee	ej
ddZG dd	 d	ejZG d
d deZG dd dZdS )zHttp Server.    N)
HTTPServerc                 C   sL   t | }|| t jddd}t j|d}|| || d|_|S )Nzhttp.logw)modefmtF)logging	getLoggersetLevelFileHandler	FormattersetFormatter
addHandler	propagate)namelevelr   loggerhandler	formatter r   k/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/utils/http_server.py
get_logger   s   



r   z&%(asctime)s-%(levelname)s: %(message)sr   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )	KVHandlerz^
    kv handler class for kv http server,
    it defines the way to get/set kv in server.
    c                 C   s   d|    | j }| jd}t|dk r#td| j  | d dS |\}}}| jj | jj	|i 	|}W d   n1 sBw   Y  |du rW|d| 7 }| d n|d	| 7 }| 
d
 | dtt| |   | j| t| dS )zH
        get method for kv handler, get value according to key.
        zGET /   len of request path must be 3:   Nz , key not found:   z , key found:    Content-Length)address_stringpathsplitlenprintsend_status_codeserverkv_lockkvgetsend_responsesend_headerstrend_headerswfilewrite_http_server_loggerinfo)selflog_strpaths_scopekeyvaluer   r   r   do_GET.   s&   



zKVHandler.do_GETc                 C   s   d|    | j }| jd}t|dk r#td| j  | d dS |\}}}t| jd }z| j	|}W n   td | d	 Y dS | j
j | j
j|du r[i | j
j|< || j
j| |< W d   n1 smw   Y  | d
 t| dS )zH
        put method for kv handler, set value according to key.
        zPUT r   r   r   r   Nr   zreceive error invalid requestr   r   )r   r    r!   r"   r#   r$   intheadersrfilereadr%   r&   r'   r(   r/   r0   )r1   r2   r3   r4   r5   r6   content_lengthr7   r   r   r   do_PUTF   s*   




zKVHandler.do_PUTc                 C   s   d|    | j }| jd}t|dk r#td| j  | d dS |\}}}| jj! | jj	|du r=t
 | jj|< | jj| | W d   n1 sPw   Y  | d t| dS )zK
        delete method for kv handler, set value according to key.
        zDELETE r   r   r   r   Nr   )r   r    r!   r"   r#   r$   r%   delete_kv_lock	delete_kvr(   setaddr/   r0   )r1   r2   r3   r4   r5   r6   r   r   r   	do_DELETE_   s   



zKVHandler.do_DELETEc                 G   s   dS )z<
        ignore all logging messages in kv handler.
        Nr   )r1   formatargsr   r   r   log_messageq   s   zKVHandler.log_messagec                 C   s"   |  | | dd |   dS )z2
        send status code back to client.
        r   r   N)r)   r*   r,   )r1   coder   r   r   r$   w   s   
zKVHandler.send_status_codeN)	__name__
__module____qualname____doc__r8   r>   rC   rF   r$   r   r   r   r   r   (   s    r   c                       s(   e Zd ZdZ fddZdd Z  ZS )KVHTTPServerz/
    it is a http server storing kv pairs.
    c                    s6   t  d|f| t | _i | _t | _i | _dS )Init. N)super__init__	threadingLockr?   r@   r&   r'   )r1   portr   	__class__r   r   rP      s
   


zKVHTTPServer.__init__c                 C   sD   d}| j  t| j|t }W d   |S 1 sw   Y  |S )z*
        get deleted size in key.
        r   N)r?   r"   r@   r(   rA   )r1   r6   retr   r   r   get_deleted_size   s   
zKVHTTPServer.get_deleted_size)rH   rI   rJ   rK   rP   rW   __classcell__r   r   rT   r   rL      s    rL   c                   @   s4   e Zd ZdZi fddZdd Zdd Zdd	 Zd
S )KVServerzD
    it is a server storing kv pairs, has a http server inside.
    c                 C   s   t |t| _d| _|| _dS )rM   N)rL   r   http_serverlisten_threadsize)r1   rS   r\   r   r   r   rP      s   
zKVServer.__init__c                    s$   t j fddd _ j  dS )zD
        start server until user calls stop to let it quit.
        c                      s
    j  S )N)rZ   serve_foreverr   r1   r   r   <lambda>   s   
 z KVServer.start.<locals>.<lambda>)targetN)rQ   Threadr[   startr^   r   r^   r   rb      s   
zKVServer.startc                 C   s"   | j   | j  | j   dS )z6
        stop server and clear its resources.
        N)rZ   shutdownr[   joinserver_closer^   r   r   r   stop   s   

zKVServer.stopc                 C   s4   | j D ]}| j|}|| j |dkr dS qdS )z
        return whether the server should stop.

        Returns:
            ret(bool): whether the server should stop
        r   FT)r\   rZ   rW   r(   )r1   r6   sr   r   r   should_stop   s   
zKVServer.should_stopN)rH   rI   rJ   rK   rP   rb   rf   rh   r   r   r   r   rY      s    	rY   )rK   Zhttp.serverr%   SimpleHTTPServerr   rQ   r   __all__r   rH   INFOr/   SimpleHTTPRequestHandlerr   rL   rY   r   r   r   r   <module>   s   X