U
    
W[u                     @   sh   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ eeG dd	 d	eZd
d ZdS )z)
Integration with L{twisted.python.log}.
    )implementer   )LogLevel)formatEvent)ILogObserver)fromStdlibLogLevelMappingStringifiableFromEventc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	LegacyLogObserverWrapperz
    L{ILogObserver} that wraps an 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.
    c                 C   s
   || _ dS )z
        @param legacyObserver: a legacy observer to which this observer will
            forward events.
        @type legacyObserver: L{twisted.python.log.ILogObserver}
        N)legacyObserver)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__c                 C   s   d|krd|d< d|kr$|d |d< d|kr<| dd|d< d|kr| d	d
d
k	rd|d< t| |d< t|d tsd|d< d|krd|kr|d |d< d|krd|d< d|krt||d< n.d|kr|d tjtjfkrd|d< nd|d< | 	| d
S )z
        Forward events to the legacy observer after editing them to
        ensure compatibility.

        @param event: an event
        @type event: L{dict}
        messager   timelog_timesystem
log_system-r   
log_formatNz%(log_legacy)s
log_legacyZlog_failureZfailureisErrorr   Zwhy	log_levelr   )
getr   copy
isinstancetupler   r   errorcriticalr
   )r   Zeventr   r   r   __call__,   s.    

z!LegacyLogObserverWrapper.__call__N)__name__
__module____qualname____doc__r   r   r"   r   r   r   r   r	      s   	r	   c                 C   s   d|kr|d |d< d|kr<||}|dk	r<||d< d|d< d|krd|krxzt |d  }W q tk
rt   d}Y qX n&d	|kr|d	 rtj}qtj}ntj}|dk	r||d< d
|krd|d
< d|krd|kr|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 the checks for
        already-defined new-style keys.

    @param observer: A new-style observer to handle this event.
    @type observer: L{ILogObserver}

    @param eventDict: An L{old-style <twisted.python.log>}, log event.
    @type eventDict: L{dict}

    @param textFromEventDict: callable that can format an old-style event as a
        string.  Passed here rather than imported to avoid circular dependency.
    @type textFromEventDict: 1-arg L{callable} taking L{dict} returning L{str}

    @return: L{None}
    r   r   r   NZlog_textz
{log_text}r   ZlogLevelr   Zlog_namespacer   r   r   )r   KeyErrorr   r!   info)ZobserverZ	eventDictZtextFromEventDicttextlevelr   r   r   publishToNewObservera   s2    r+   N)r&   Zzope.interfacer   Z_levelsr   Z_formatr   Z	_observerr   Z_stdlibr   r   objectr	   r+   r   r   r   r   <module>   s   N