
    Vhy              	           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             Zdedeeef   deeeef   gee   f   ddfdZy)z)
Integration with L{twisted.python.log}.
    )TYPE_CHECKINGAnyCallableDictOptional)implementer   )formatEvent)ILogObserverLogEvent)LogLevel)StringifiableFromEventfromStdlibLogLevelMapping)r   c                   4    e Zd ZdZddZdefdZdeddfdZy)	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.
    returnNc                     || _         y)zr
        @param legacyObserver: a legacy observer to which this observer will
            forward events.
        N)legacyObserver)selfr   s     F/home/dcms/DCMS/lib/python3.12/site-packages/twisted/logger/_legacy.py__init__z!LegacyLogObserverWrapper.__init__    s    
 -    c                 &    dj                  |       S )Nz0{self.__class__.__name__}({self.legacyObserver})r   )formatr   s    r   __repr__z!LegacyLogObserverWrapper.__repr__'   s    AHHdHSSr   eventc                    d|vrd|d<   d|vr|d   |d<   d|vr|j                  dd      |d<   d|vrK|j                  d	d
      9d|d<   t        |j                               |d<   t        |d   t              sd|d<   d|v r(d|vr|d   |d<   d|vrd|d<   d|vrCt        |      |d<   n4d|vr0|d   t        j                  t        j                  fv rd|d<   nd|d<   | j                  |       y
)z
        Forward events to the legacy observer after editing them to
        ensure compatibility.

        @param event: an event
        message 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   s     r   __call__z!LegacyLogObserverWrapper.__call__*   s,    E!!E)!*-E&M5 #iic:E(O 5 UYY|T%B%N /E(O"8"FE, eI.6#%i  E!%#(#7i %#$i E!*51ee#[!hnnh6G6G%HH#$i #$i E"r   )r   ILegacyLogObserverr   N)	__name__
__module____qualname____doc__r   strr   r   r3   r    r   r   r   r      s-    -T# T0#h 0#4 0#r   r   observer	eventDicttextFromEventDictr   Nc                 `   d|vr|d   |d<   d|vr ||      }|
||d<   d|d<   d|vrTd|v r	 t         |d      }n;d	|v r'|d	   rt        j                  }n!t        j                  }nt        j                  }|||d<   d
|vrd|d
<   d|vrd|v r|d   |d<    | |       y# t        $ r d}Y 6w xY w)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   r2   info)r:   r;   r<   textlevels        r   publishToNewObserverrE   ]   s    , " )& 1	*9$ +$(Ij!&2Il#)#"1)J2GH )## )) MME%*Ik"i'%1	/"9$Y)>"+H"5	,Y'  s   B B-,B-)r8   typingr   r   r   r   r   zope.interfacer   _formatr
   _interfacesr   r   _levelsr   _stdlibr   r   twisted.python.logr4   r   r9   rE   r    r   r   <module>rM      s   
 @ ? &   /  FE \C# C# C#L66CH~6  c3h 0(3- ?@6 
	6r   