o
    h"                     @   sz   d dl mZ d dlmZmZmZmZ d dlmZm	Z	m
Z
mZ d dlZd dlZd dlmZ G dd deZG dd	 d	ZdS )
    )Enum)OptionalDictAnyUnion)ForeBackStyleinitN)datetimec                   @   s    e Zd ZdZdZdZdZdZdS )LogLevel               N)__name__
__module____qualname__DEBUGINFOSUCCESSWARNINGERROR r   r   R/var/www/Befach/backend/venv/lib/python3.10/site-packages/crawl4ai/async_logger.pyr      s    r   c                   @   s  e Zd ZdZdddddddd	d
dd
Zejejej	ej
ejejejejejejiZdejddddfdee dededeeeef  deeeef  defddZdedefddZdedefddZdefdd Z			d@d!ededed"eeeef  deeeef  d#ee fd$d%ZdAdedefd'd(ZdBdedefd*d+ZdCdedefd-d.ZdDdedefd0d1Z dEdedefd3d4Z!	5	6dFd7ed8ed9e"ded:ef
d;d<Z#	2	6dGd7ed=eded:efd>d?Z$dS )HAsyncLoggerz
    Asynchronous logger with support for colored console output and file logging.
    Supports templated messages with colored components.
    u   →u   ✓u   ↓u   ◆u   ■u   ●   ×u   ⋯u   ℹu   ⚠)
INITREADYFETCHSCRAPEEXTRACTCOMPLETEr   r   r   r   N
   Tlog_file	log_level	tag_widthiconscolorsverbosec                 C   s`   t   || _|| _|| _|p| j| _|p| j| _|| _|r.t	j
t	jt	j|dd dS dS )ax  
        Initialize the logger.
        
        Args:
            log_file: Optional file path for logging
            log_level: Minimum log level to display
            tag_width: Width for tag formatting
            icons: Custom icons for different tags
            colors: Custom colors for different log levels
            verbose: Whether to output to console
        T)exist_okN)r
   r%   r&   r'   DEFAULT_ICONSr(   DEFAULT_COLORSr)   r*   osmakedirspathdirnameabspath)selfr%   r&   r'   r(   r)   r*   r   r   r   __init__*   s   "zAsyncLogger.__init__tagreturnc                 C   s   d| d | jdS )z#Format a tag with consistent width.[].)ljustr'   r3   r5   r   r   r   _format_tagJ   s   zAsyncLogger._format_tagc                 C   s   | j || j d S )z=Get the icon for a tag, defaulting to info icon if not found.r   )r(   getr;   r   r   r   	_get_iconN   s   zAsyncLogger._get_iconmessagec                 C   s   | j rUt ddd }t| j ddd5}|tjdtj	d}t
t D ]}t|tr6||d}q)|d| d	| d
 W d   dS 1 sNw   Y  dS dS )z.Write a message to the log file if configured.z%Y-%m-%d %H:%M:%S.%fNazutf-8)encoding r7   z] 
)r%   r   nowstrftimeopenreplacer   RESETr	   	RESET_ALLvarsvalues
isinstancestrwrite)r3   r?   	timestampfclean_messagecolorr   r   r   _write_to_fileR   s   
"zAsyncLogger._write_to_filelevelparams
base_colorc              
   K   s
  |j | jj k r	dS |rSz,|jdi |}|r6| D ]\}	}
|	|v r5t||	 }|||
 | tj }qW n tyR } zd| d}t	j
}W Y d}~nd}~ww |}|p[| j| }
|
 | | d| | d| tj }| jsz|ddr~t| | | dS )a  
        Core logging method that handles message formatting and output.
        
        Args:
            level: Log level for this message
            message: Message template string
            tag: Tag for the message
            params: Parameters to format into the message
            colors: Color overrides for specific parameters
            base_color: Base color for the entire message
        Nz!LOGGING ERROR: Missing parameter z in message template force_verboseFr   )valuer&   formatitemsrN   rH   r	   rJ   KeyErrorr   r   r)   r<   r>   r*   r=   printrT   )r3   rU   r?   r5   rV   r)   rW   kwargsformatted_messagekeyrS   	value_strelog_liner   r   r   _log^   s2   *zAsyncLogger._logr   c                 K      | j tj||fi | dS )zLog a debug message.N)re   r   r   r3   r?   r5   r_   r   r   r   debug      zAsyncLogger.debugr   c                 K   rf   )zLog an info message.N)re   r   r   rg   r   r   r   info   ri   zAsyncLogger.infor   c                 K   rf   )zLog a success message.N)re   r   r   rg   r   r   r   success   ri   zAsyncLogger.successr   c                 K   rf   )zLog a warning message.N)re   r   r   rg   r   r   r   warning   ri   zAsyncLogger.warningr   c                 K   rf   )zLog an error message.Nre   r   r   rg   r   r   r   error   ri   zAsyncLogger.errorr    2   urlrk   timing
url_lengthc              	   C   sB   | j |rtjntjd|||||d|rtjntjtjdd dS )aH  
        Convenience method for logging URL fetch status.
        
        Args:
            url: The URL being processed
            success: Whether the operation was successful
            timing: Time taken for the operation
            tag: Tag for the message
            url_length: Maximum length for URL in log
        z?{url:.{url_length}}... | Status: {status} | Time: {timing:.2f}s)rp   rr   statusrq   )rs   rq   )rU   r?   r5   rV   r)   N)re   r   r   r   r   GREENREDYELLOW)r3   rp   rk   rq   r5   rr   r   r   r   
url_status   s   
zAsyncLogger.url_statusrn   c                 C   s    | j tjd||||dd dS )z
        Convenience method for logging error status.
        
        Args:
            url: The URL being processed
            error: Error message
            tag: Tag for the message
            url_length: Maximum length for URL in log
        z'{url:.{url_length}}... | Error: {error})rp   rr   rn   )rU   r?   r5   rV   Nrm   )r3   rp   rn   r5   rr   r   r   r   error_status   s   
zAsyncLogger.error_status)NNN)r   )r   )r   )r   )r   )r    ro   )r   ro   )%r   r   r   __doc__r,   r   r   r   LIGHTBLACK_EXr   CYANr   rt   r   rv   r   ru   r-   r   rN   intr   boolr4   r<   r>   rT   r   re   rh   rj   rk   rl   rn   floatrw   rx   r   r   r   r   r      s    

 
:	
&r   )enumr   typingr   r   r   r   coloramar   r   r	   r
   timer.   r   r   r   r   r   r   r   <module>   s    