o
    ¯by  ã                	   @   sÆ   d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZmZ er:dd	lmZ eeƒG d
d„ dƒƒZdedeeef deeeef gee f ddfdd„ZdS )z)
Integration with L{twisted.python.log}.
é    )ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚOptional)Úimplementeré   )ÚformatEvent)ÚILogObserverÚLogEvent)ÚLogLevel)ÚStringifiableFromEventÚfromStdlibLogLevelMapping)r
   c                   @   s:   e Zd ZdZddd„Zdefdd	„Zd
eddfdd„ZdS )ÚLegacyLogObserverWrapperzí
    L{ILogObserver} that wraps a L{twisted.python.log.ILogObserver}.

    Received (new-style) events are modified prior to forwarding to
    the legacy observer to ensure compatibility with observers that
    expect legacy events.
    ÚlegacyObserverÚILegacyLogObserverÚreturnNc                 C   s
   || _ dS )zr
        @param legacyObserver: a legacy observer to which this observer will
            forward events.
        N)r   )Úselfr   © r   ú8/usr/lib/python3/dist-packages/twisted/logger/_legacy.pyÚ__init__    s   
z!LegacyLogObserverWrapper.__init__c                 C   s   dj | d�S )Nz0{self.__class__.__name__}({self.legacyObserver})©r   )Úformatr   r   r   r   Ú__repr__'   s   z!LegacyLogObserverWrapper.__repr__Úeventc                 C   s   d|vrd|d< d|vr|d |d< d|vr|  dd¡|d< d|vrA|  d	d
¡d
urAd|d< t| ¡ ƒ|d< t|d tƒsAd|d< d|v rbd|vrO|d |d< d|vrWd|d< d|vrat|ƒ|d< nd|vry|d tjtjfv rud|d< nd|d< |  	|¡ d
S )z‹
        Forward events to the legacy observer after editing them to
        ensure compatibility.

        @param event: an event
        Úmessager   ÚtimeÚlog_timeÚsystemÚ
log_systemú-r   Ú
log_formatNz%(log_legacy)sÚ
log_legacyÚlog_failureÚfailureÚisErrorr   ÚwhyÚ	log_levelr   )
Úgetr   ÚcopyÚ
isinstanceÚtupler	   r   ÚerrorÚcriticalr   )r   r   r   r   r   Ú__call__*   s0   	€
z!LegacyLogObserverWrapper.__call__)r   r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   r.   r   r   r   r   r      s
    
r   ÚobserverÚ	eventDictÚtextFromEventDictr   Nc                 C   sâ   d|vr
|d |d< d|vr||ƒ}|dur||d< d|d< d|vrUd|v r:zt |d  }W n ty9   d}Y nw d	|v rJ|d	 rFtj}ntj}ntj}|durU||d< d
|vr]d|d
< d|vrkd|v rk|d |d< | |ƒ dS )a"  
    Publish an old-style (L{twisted.python.log}) event to a new-style
    (L{twisted.logger}) observer.

    @note: It's possible that a new-style event was sent to a
        L{LegacyLogObserverWrapper}, and may now be getting sent back to a
        new-style observer.  In this case, it's already a new-style event,
        adapted to also look like an old-style event, and we don't need to
        tweak it again to be a new-style event, hence this checks for
        already-defined new-style keys.

    @param observer: A new-style observer to handle this event.
    @param eventDict: An L{old-style <twisted.python.log>}, log event.
    @param textFromEventDict: callable that can format an old-style event as a
        string.  Passed here rather than imported to avoid circular dependency.
    r   r   r!   NÚlog_textz
{log_text}r'   ÚlogLevelr%   Úlog_namespacer"   r   r   )r   ÚKeyErrorr   r-   Úinfo)r4   r5   r6   ÚtextÚlevelr   r   r   ÚpublishToNewObserver]   s4   ÿr>   )r2   Útypingr   r   r   r   r   Úzope.interfacer   Ú_formatr	   Ú_interfacesr
   r   Ú_levelsr   Ú_stdlibr   r   Útwisted.python.logr   r   r3   r>   r   r   r   r   Ú<module>   s(   Fÿ
þýü