
    \d                         d Z ddl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Z ee	           G d	 d
                      Z ee	          de
ddfd            ZdS )z
Basic log observers.
    )CallableOptional)implementer)Failure   )ILogObserverLogEvent)LoggerzITemporarily disabling observer {observer} due to exception: {log_failure}c                   b    e Zd ZdZdeddfdZdeddfdZdeddfdZd	eddfd
Z	dede
fdZdS )LogPublisherz
    I{ILogObserver} that fans out events to other observers.

    Keeps track of a set of L{ILogObserver} objects and forwards
    events to each.
    	observersreturnNc                 X    t          |          | _        t          |           | _        d S )Nobserver)list
_observersr
   log)selfr   s     8lib/python3.11/site-packages/twisted/logger/_observer.py__init__zLogPublisher.__init__   s%    y//4(((    r   c                     t          |          st          d|          || j        vr| j                            |           dS dS )zq
        Registers an observer with this publisher.

        @param observer: An L{ILogObserver} to add.
        zObserver is not callable: N)callable	TypeErrorr   appendr   r   s     r   addObserverzLogPublisher.addObserver#   s]     !! 	GEEEFFF4?**O""8,,,,, +*r   c                 ^    	 | j                             |           dS # t          $ r Y dS w xY w)zv
        Unregisters an observer with this publisher.

        @param observer: An L{ILogObserver} to remove.
        N)r   remove
ValueErrorr   s     r   removeObserverzLogPublisher.removeObserver.   sE    	O""8,,,,, 	 	 	DD	s    
,,eventc                 \    dvrd}ndt           ddf fd}g } j        D ]N}| ||           	  |           # t          $ r& |                    |t	                      f           Y Kw xY w|D ]7\  }}                     |          }|                    t          ||           8dS )z8
        Forward events to contained observers.
        	log_traceNr   r   c                 B    d                              | f           dS )z
                Add tracing information for an observer.

                @param observer: an observer being forwarded to
                r%   N)r   )r   r#   r   s    r   tracez$LogPublisher.__call__.<locals>.traceB   s)     k"))4*:;;;;;r   )failurer   )r   r   	Exceptionr   r   _errorLoggerForObserverr(   OBSERVER_DISABLED)r   r#   r'   brokenObserversr   brokenObserverr(   errorLoggers   ``      r   __call__zLogPublisher.__call__9   s$    e##>BEE< < < < < < < < <  	> 	>H h> > > >&&'))'<=====> (7 	 	#NG66~FFK!'      	 	s   ?-A/.A/c                 X    t          fd| j        D              }t          |          S )z
        Create an error-logger based on this logger, which does not contain the
        given bad observer.

        @param observer: The observer which previously had an error.

        @return: A L{Logger} without the given observer.
        c              3   $   K   | ]
}|u|V  d S )N ).0obsr   s     r   	<genexpr>z7LogPublisher._errorLoggerForObserver.<locals>.<genexpr>g   s-      DDc80C0Cc0C0C0C0CDDr   r   )r   r   r
   )r   r   errorPublishers    ` r   r*   z$LogPublisher._errorLoggerForObserver]   s;     &DDDDT_DDD
 ~....r   )__name__
__module____qualname____doc__r   r   r   r"   r	   r/   r
   r*   r2   r   r   r   r      s         )< )D ) ) ) )	-L 	-T 	- 	- 	- 	-	| 	 	 	 	 	"h "4 " " " "H/ / / / / / / /r   r   r#   r   Nc                     dS )zD
    I{ILogObserver} that does nothing with the events it sees.
    Nr2   )r#   s    r   bitbucketLogObserverr<   l   s      r   )r:   typingr   r   zope.interfacer   twisted.python.failurer   _interfacesr   r	   _loggerr
   r+   r   r<   r2   r   r   <module>rB      s  
  & % % % % % % % & & & & & & * * * * * * / / / / / / / /       P 
 \R/ R/ R/ R/ R/ R/ R/ R/j \ T      r   