o
    iZ1                     @   s   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 ddlm	Z	 ddl
mZ dd Zd	d
 Zdd ZG dd deZG dd dZdS )    N)contextmanager)Thread   )	Colorizer)create_handler_lockc                 C   s   t | }|||fS N)r   prepare_formatcolorize)format_
ansi_levelcolored r   L/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/loguru/_handler.pyprepare_colored_format   s   
r   c                 C   s   t | }| S r   )r   r   strip)r
   r   r   r   r   prepare_stripped_format   s   
r   c                 C   s   t jdd| S )N@   )maxsize)	functools	lru_cache)functionr   r   r   memoize   s   r   c                   @   s   e Zd ZdZdS )Message)recordN)__name__
__module____qualname__	__slots__r   r   r   r   r      s    r   c                   @   s   e Zd Zdd Zdd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zedd Zedd Zdd Zdd Zdd ZdS )Handlerc                C   s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _d | _i | _d | _d| _t | _t | _d | _d | _d | _d | _d | _d | _| jrc| jr]tt| _ntt| _n| jrr| jD ]}|  | qin| j! | _| jr| j	d u rt"# | _t"$ | _t"% | _n| j	# | _| j	$ | _| j	% | _t | _t&' | _t(| j)dd| j d| _| j*  d S d S )NFTzloguru-writer-%d)targetdaemonname)+_name_sink_levelno
_formatter_is_formatter_dynamic_filter	_colorize
_serialize_enqueue_multiprocessing_context_error_interceptor_exception_formatter_id_levels_ansi_codes_decolorized_format_precolorized_formats_memoize_dynamic_format_stoppedr   _lock	threadinglocal_lock_acquired_queue_queue_lock_confirmation_event_confirmation_lock_owner_process_pid_threadr   r   r   update_formatr   multiprocessingSimpleQueueEventLockosgetpidr   _queued_writerstart)selfsinkr!   levelno	formatteris_formatter_dynamicfilter_r	   	serializeenqueuemultiprocessing_contexterror_interceptorexception_formatterid_levels_ansi_codes
level_namer   r   r   __init__    sd   





zHandler.__init__c                 C   s   d| j | j| jf S )Nz(id=%d, level=%d, sink=%s))r.   r$   r"   rG   r   r   r   __repr__k   s   zHandler.__repr__c                 c   st    t | jddrtdd| j_z$| j dV  W d   n1 s"w   Y  W d| j_dS W d| j_dS d| j_w )zNAcquire the lock, but fail fast if its already acquired by the current thread.acquiredFa
  Could not acquire internal lock because it was already in use (deadlock avoided). This likely happened because the logger was re-used inside a sink, a signal handler or a '__del__' method. This is not permitted because the logger and its handlers are not re-entrant.TN)getattrr7   RuntimeErrorrX   r4   rV   r   r   r   _protected_lockn   s   zHandler._protected_lockc                 C   s  zF| j |d jkrW d S | jd ur| |sW d S | jr"| |}| }|d s/d|d< n|d \}}	}
| j}|j||	|
|d}d||d< |d urV|j	|d krVd }|ro|d u s_| j
sd|d }n| j| }||}n| jr| j
s| |}||}nv|d u r| j| }| ||\}}||}n_| j| }| ||\}}|j|d ||d}||d< ||}n>| j
s| j}||}n2|d u r| j| }| j| }||}n| j| }| j| }| jj|d ||d}||d< ||}| jr| ||}t|}||_|  2 | jr	 W d    W d S | jr$| j| n| j| W d    W d S W d    W d S 1 s@w   Y  W d S  ty_   | j sV | j | Y d S w )Nlevel	exception )from_decoratormessage)r   colored_message)!r$   nor'   r&   r%   copyr-   format_exceptionjoinstrippedr(   r/   r	   r2   
format_mapmake_coloring_messager0   r1   r)   _serialize_recordr   r   r[   r3   r*   r8   putr#   write	Exceptionr,   should_catchprint)rG   r   level_idr_   is_rawra   dynamic_formatformatter_recordtype_valuetbrJ   lines	formattedr   precomputed_format_coloring_message
str_recordr   r   r   emit   s   
















(zHandler.emitc                 C   s   |   : d| _| jr1| jt kr	 W d    d S | jd  | j	  t
| jdr1| j  | j  W d    d S 1 sAw   Y  d S )NTclose)r[   r3   r*   r<   rC   rD   r8   rj   r=   re   hasattrr}   r#   stoprV   r   r   r   r      s   


"zHandler.stopc                 C   sV   | j sd S | j | jd | j  | j  W d    d S 1 s$w   Y  d S NT)r*   r;   r8   rj   r:   waitclearrV   r   r   r   complete_queue   s   
"zHandler.complete_queuec                 C   s^   | j r| jt krg S | j r| jn|  }| | j W  d    S 1 s(w   Y  d S r   )r*   r<   rC   rD   r9   r[   r#   tasks_to_complete)rG   lockr   r   r   r      s   $zHandler.tasks_to_completec                 C   s0   | j r| jrd S | j| }| j|| j|< d S r   )r(   r&   r/   r%   r	   r1   )rG   ro   	ansi_coder   r   r   r>      s   
zHandler.update_formatc                 C   s   | j S r   )r$   rV   r   r   r   rI      s   zHandler.levelnoc                 C   s   |d }|d ur|j d u rd n|j j|jt|jd}| |d |d  d||d |d j|d jd|d |d	 j|d	 j|d	 j	d
|d |d |d |d |d j
|d jd|d j
|d jd|d |d  ddd}tj|tddd S )Nr]   )typert   	tracebackelapsed)reprsecondsextrafile)r!   pathr   r\   )iconr!   rb   liner`   moduler!   process)idr!   threadtime)r   	timestamp)r   r]   r   r   r   r\   r   r`   r   r!   r   r   r   )textr   F)defaultensure_ascii
)r   r   rt   boolr   total_secondsr!   r   r   rb   r   r   jsondumpsstr)r   r   r]   serializabler   r   r   ri      s8   
zHandler._serialize_recordc                 C   s   d }| j }| j}	 z| }W n! ty0   | | jd  W d    n1 s)w   Y  Y qw |d u r7d S |du rA| j  q|! z| j	| W n ty\   | j|j
 Y nw W d    n1 sgw   Y  q	r   )r8   r9   getrl   r,   rn   r:   setr#   rk   r   )rG   r`   queuer   r   r   r   rE   "  s4   
zHandler._queued_writerc                 C   sL   | j  }d |d< d |d< d |d< | jr$d |d< d |d< d |d< d |d< |S )Nr4   r7   r2   r#   r=   _owner_processr9   )__dict__rc   r*   rG   stater   r   r   __getstate__?  s   
zHandler.__getstate__c                 C   sX   | j | t | _t | _| jrt | _| j	r*| j
r#tt| _d S tt| _d S d S r   )r   updater   r4   r5   r6   r7   r*   r9   r&   r(   r   r   r2   r   r   r   r   r   __setstate__K  s   
zHandler.__setstate__N)r   r   r   rU   rW   r   r[   r|   r   r   r   r>   propertyrI   staticmethodri   rE   r   r   r   r   r   r   r      s"    K
U	

&r   )r   r   r?   rC   r5   
contextlibr   r   
_colorizerr   _locks_machineryr   r   r   r   r   r   r   r   r   r   r   <module>   s    