o
    4ѹgZ1                     @   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   S/Users/admin/.pyenv/versions/3.10.0/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rq| jD ]}|  | qi| 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_enqueueZ_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)selfZsinkr!   levelno	formatterZis_formatter_dynamicZfilter_r	   	serializeenqueueZmultiprocessing_contextZerror_interceptorZexception_formatterZid_Zlevels_ansi_codesZ
level_namer   r   r   __init__    sb   





zHandler.__init__c                 C   s   d| j | j| jf S )Nz(id=%d, level=%d, sink=%s))r-   r$   r"   rF   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)getattrr6   RuntimeErrorrN   r3   rL   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	   r1   
format_mapZmake_coloring_messager/   r0   r)   _serialize_recordr   r   rQ   r2   r*   r7   putr#   write	Exceptionr+   Zshould_catchprint)rF   r   level_idrU   Zis_rawrW   Zdynamic_formatZformatter_recordtype_valuetbrH   lines	formattedr   Zprecomputed_format_Zcoloring_messageZ
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)rQ   r2   r*   r;   rB   rC   r7   r_   r<   r[   hasattrrk   r#   stoprL   r   r   r   rm      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:   r7   r_   r9   waitclearrL   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;   rB   rC   r8   rQ   r#   tasks_to_complete)rF   lockr   r   r   rr      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	   r0   )rF   rc   Z	ansi_coder   r   r   r=      s   
zHandler.update_formatc                 C   s   | j S r   )r$   rL   r   r   r   rG      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 )NrS   )typere   	tracebackelapsed)reprsecondsextrafile)r!   pathr   rR   )iconr!   rX   linerV   moduler!   process)idr!   threadtime)rw   	timestamp)rv   rS   ry   rz   r   rR   r}   rV   r~   r!   r   r   r   )textr   F)defaultensure_ascii
)rt   r   re   boolru   total_secondsr!   r{   r|   rX   r   r   jsondumpsstr)r   r   rS   Zserializabler   r   r   r^      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	rn   )r7   r8   getra   r+   rb   r9   setr#   r`   r   )rF   rV   queuers   r   r   r   rD   "  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 )Nr3   r6   r1   r#   r<   Z_owner_processr8   )__dict__rY   r*   rF   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   r3   r4   r5   r6   r*   r8   r&   r(   r   r   r1   r   r   r   r   r   __setstate__K  s   
zHandler.__setstate__N)r   r   r   rK   rM   r   rQ   rj   rm   rq   rr   r=   propertyrG   staticmethodr^   rD   r   r   r   r   r   r   r      s"    K
U	

&r   )r   r   r>   rB   r4   
contextlibr   r   Z
_colorizerr   Z_locks_machineryr   r   r   r   r   r   r   r   r   r   r   <module>   s    