B
    Ce-                 @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZejdk rPd dlm	Z	 nd dlm	Z	 dZ
G dd dejZG d	d
 d
eZG dd deZdS )    N)copy)Optional)      )Literal   c                   s   e Zd ZdZedd ejdd ejdd ejdd ej	dd ej
dd iZdee ee ed ee d fddZeeedddZedddZejed fddZ  ZS )ColourizedFormatterz
    A custom log formatter class that:

    * Outputs the LOG_LEVEL with an appropriate color.
    * If a log call includes an `extras={"color_message": ...}` it will be used
      for formatting the output, instead of the plain text message.
    c             C   s   t jt| ddS )Nblue)fg)clickstylestr)
level_name r   c/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/uvicorn/logging.py<lambda>       zColourizedFormatter.<lambda>c             C   s   t jt| ddS )Ncyan)r
   )r   r   r   )r   r   r   r   r      r   c             C   s   t jt| ddS )Ngreen)r
   )r   r   r   )r   r   r   r   r      r   c             C   s   t jt| ddS )Nyellow)r
   )r   r   r   )r   r   r   r   r      r   c             C   s   t jt| ddS )Nred)r
   )r   r   r   )r   r   r   r   r      r   c             C   s   t jt| ddS )N
bright_red)r
   )r   r   r   )r   r   r   r   r       s   N%)r   {$)fmtdatefmtr   
use_colorsc                s2   |dkr|| _ ntj | _ t j|||d d S )N)TF)r   r   r   )r   sysstdoutisattysuper__init__)selfr   r   r   r   )	__class__r   r   r"   %   s    zColourizedFormatter.__init__)r   level_noreturnc             C   s&   t t ddd}| j||}||S )N)r   r&   c             S   s   t | S )N)r   )r   r   r   r   default3   s    z5ColourizedFormatter.color_level_name.<locals>.default)r   level_name_colorsget)r#   r   r%   r'   funcr   r   r   color_level_name2   s    z$ColourizedFormatter.color_level_name)r&   c             C   s   dS )NTr   )r#   r   r   r   should_use_colors9   s    z%ColourizedFormatter.should_use_colors)recordr&   c                sv   t |}|j}ddt|j  }| jrX| ||j}d|jkrX|jd |_| |jd< |d | |jd< t	 
|S )N r   Zcolor_messagemessage:Zlevelprefix)r   	levelnamelenr   r+   levelno__dict__msg
getMessager!   formatMessage)r#   r-   
recordcopyr1   Z	seperator)r$   r   r   r7   <   s    
z!ColourizedFormatter.formatMessage)NNr   N)__name__
__module____qualname____doc__TRACE_LOG_LEVELloggingDEBUGINFOWARNINGERRORCRITICALr(   r   r   r   boolr"   intr+   r,   	LogRecordr7   __classcell__r   r   )r$   r   r      s   



   *r   c               @   s   e Zd ZedddZdS )DefaultFormatter)r&   c             C   s
   t j S )N)r   stderrr    )r#   r   r   r   r,   J   s    z"DefaultFormatter.should_use_colorsN)r9   r:   r;   rD   r,   r   r   r   r   rH   I   s   rH   c                   sZ   e Zd Zdd dd dd dd dd dZeedd	d
Zejed fddZ	  Z
S )AccessFormatterc             C   s   t jt| ddS )Nbright_white)r
   )r   r   r   )coder   r   r   r   P   r   zAccessFormatter.<lambda>c             C   s   t jt| ddS )Nr   )r
   )r   r   r   )rL   r   r   r   r   Q   r   c             C   s   t jt| ddS )Nr   )r
   )r   r   r   )rL   r   r   r   r   R   r   c             C   s   t jt| ddS )Nr   )r
   )r   r   r   )rL   r   r   r   r   S   r   c             C   s   t jt| ddS )Nr   )r
   )r   r   r   )rL   r   r   r   r   T   r   )      r      r   )status_coder&   c                sn   yt |j}W n tk
r(   d}Y nX d||f  | jrjttd fdd}| j|d |}| S  S )N z%s %s)rL   r&   c                s    S )Nr   )rL   )status_and_phraser   r   r'   _   s    z0AccessFormatter.get_status_code.<locals>.defaultd   )	http
HTTPStatusphrase
ValueErrorr   rE   r   status_code_coloursr)   )r#   rP   Zstatus_phraser'   r*   r   )rR   r   get_status_codeW   s    
zAccessFormatter.get_status_code)r-   r&   c       	         sh   t |}|j\}}}}}| t|}d|||f }| jrHtj|dd}|j|||d t	 
|S )Nz%s %s HTTP/%sT)bold)client_addrrequest_linerP   )r   argsrY   rE   r   r   r   r4   updater!   r7   )	r#   r-   r8   r[   method	full_pathhttp_versionrP   r\   )r$   r   r   r7   f   s    
zAccessFormatter.formatMessage)r9   r:   r;   rX   rE   r   rY   r>   rF   r7   rG   r   r   )r$   r   rJ   N   s   rJ   )rT   r>   r   r   typingr   r   version_infotyping_extensionsr   r=   	Formatterr   rH   rJ   r   r   r   r   <module>   s   
8