U
    ){f                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZmZmZmZmZmZ ejdkrd dlZnd dlZerddlmZ dd	lmZmZ d
ddddddddddZG dd dZG dd deZdS )    )annotationsN)
HTTPStatus)
dictConfig
fileConfig)AnyIOMappingOptionalTYPE_CHECKINGUnion)         )Config)ResponseSummaryWWWScopeT	propagatestrz Union[logging.Logger, str, None]zOptional[str]r   boolzOptional[logging.Logger])nametargetlevelsys_defaultr   returnc                C  s   t |tjr|S |rt| }|dkr0t|nt|g|_||_tdd}|jd 	| |d k	r||
t|  |S d S d S )N-z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]r   )
isinstanceloggingLogger	getLoggerStreamHandlerFileHandlerhandlersr   	FormattersetFormattersetLevelgetLevelNameupper)r   r   r   r   r   logger	formatter r*   P/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/hypercorn/logging.py_create_logger   s     
r,   c                   @  s   e Zd ZdddddZddddd	d
dZdddddddZdddddddZdddddddZdddddddZdddddddZ	dddddddZ
ddddddddZdddd d	d!d"Zddd#d$d%Zd&S )'r   z'Config'None)configr   c              	   C  s   |j | _ td|j|jtjdd| _td|j|jtj| _	|j
d k	r|j
dr|t|j
dd  }tt| W 5 Q R X q|j
drt|j
dd  d}tt| W 5 Q R X q|j
tj|j
d	}t|j
|dd
 n|jd k	rt|j d S )Nzhypercorn.accessFr   zhypercorn.errorzjson:   ztoml:rb)__file__here)defaultsdisable_existing_loggers)access_log_formatr,   Z	accesslogZloglevelsysstdoutaccess_loggerZerrorlogstderrerror_loggerZ	logconfig
startswithopenr   jsonloadtomllibospathdirnamer   Zlogconfig_dict)selfr.   file_Z
log_configr*   r*   r+   __init__5   s6       

zLogger.__init__
'WWWScope'z'ResponseSummary'floatrequestresponserequest_timer   c                   s(   | j d k	r$| j | j| ||| d S N)r8   infor5   atomsrC   rI   rJ   rK   r*   r*   r+   accessT   s
    
 zLogger.accessr   r   )messageargskwargsr   c                   s"   | j d k	r| j j|f|| d S rL   )r:   criticalrC   rQ   rR   rS   r*   r*   r+   rT   \   s    
zLogger.criticalc                   s"   | j d k	r| j j|f|| d S rL   )r:   errorrU   r*   r*   r+   rV   `   s    
zLogger.errorc                   s"   | j d k	r| j j|f|| d S rL   )r:   warningrU   r*   r*   r+   rW   d   s    
zLogger.warningc                   s"   | j d k	r| j j|f|| d S rL   )r:   rM   rU   r*   r*   r+   rM   h   s    
zLogger.infoc                   s"   | j d k	r| j j|f|| d S rL   )r:   debugrU   r*   r*   r+   rX   l   s    
zLogger.debugc                   s"   | j d k	r| j j|f|| d S rL   )r:   	exceptionrU   r*   r*   r+   rY   p   s    
zLogger.exceptionint)r   rQ   rR   rS   r   c                   s$   | j d k	r | j j||f|| d S rL   )r:   log)rC   r   rQ   rR   rS   r*   r*   r+   r[   t   s    
z
Logger.logOptional['ResponseSummary']zMapping[str, str]c                 C  s   t |||S )zCreate and return an access log atoms dictionary.

        This can be overidden and customised if desired. It should
        return a mapping between an access log format key and a value.
        )AccessLogAtomsrO   r*   r*   r+   rN   x   s    zLogger.atoms)r   r   c                 C  s   t | j|S rL   )getattrr:   )rC   r   r*   r*   r+   __getattr__   s    zLogger.__getattr__N)__name__
__module____qualname__rE   rP   rT   rV   rW   rM   rX   rY   r[   rN   r_   r*   r*   r*   r+   r   4   s   
r   c                      s8   e Zd ZdddddddZddd	 fd
dZ  ZS )r]   rF   r\   rG   r-   rH   c                 C  s&  |d D ](\}}| d| d| d  d< qtj D ]\}}|| d|  d< q<|dd}|d}|d kr~d }nFt|d	kr|d
  d|d  }n"t|dkr|d
 }nd| d}|d dkr|d }	nd}	|d   }
|d |
rd|
 nd }d}d}|d k	r|dg D ]*\}}| d| d| d  d< q t|d }zt|d j	}W n" t
k
r   d| d}Y nX | |dtd|	 d|d  d| |	 d| d| |||d |	|d ||
|| d | d | d | d t|t|d  |d!d"t  d#d$ d S )%Nheaderslatin1{z}iz}ehttp_versionwsclient   r   :r   z<???z???>typehttpmethodGETquery_stringrA   ? r   z}ostatusz[%d/%b/%Y:%H:%M:%S %z] schemez{Content-Length}oz
{Referer}iz{User-Agent}ii@B z.6f<>)hltrRsstSmUZUqqHbBfaTDLp)decodelowerr@   environitemsgetlenr   r   phrase
ValueErrorupdatetimestrftimerZ   getpid)rC   rI   rJ   rK   r   valueprotocolrh   remote_addrrm   ro   Zpath_with_qsstatus_codeZstatus_phraser*   r*   r+   rE      sh    "



$
zAccessLogAtoms.__init__r   )keyr   c                   sJ   z.| drt | W S t |W S W n tk
rD   Y dS X d S )Nre   r   )r;   super__getitem__r   KeyError)rC   r   	__class__r*   r+   r      s    
zAccessLogAtoms.__getitem__)r`   ra   rb   rE   r   __classcell__r*   r*   r   r+   r]      s   <r]   )
__future__r   r=   r   r@   r6   r   rl   r   logging.configr   r   typingr   r   r   r	   r
   r   version_infor?   tomlir.   r   r   r   r,   r   dictr]   r*   r*   r*   r+   <module>   s$    

	R