
    Vh                         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y)z
Basic log observers.
    )CallableOptional)implementer)Failure   )ILogObserverLogEvent)LoggerzITemporarily disabling observer {observer} due to exception: {log_failure}c                   `    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y)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                 F    t        |      | _        t        |       | _        y )Nobserver)list
_observersr
   log)selfr   s     H/home/dcms/DCMS/lib/python3.12/site-packages/twisted/logger/_observer.py__init__zLogPublisher.__init__   s    y/4(    r   c                     t        |      st        d|      || j                  vr| j                  j                  |       yy)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#   sB     !8EFF4??*OO""8, +r   c                 Z    	 | j                   j                  |       y# t        $ r Y y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.   s+    	OO""8, 		s    	**eventc                 :    dvrd}ndt         ddf fd}g } j                  D ]  }| ||       	  |        |D ].  \  }} j                  |      }|j                  t        ||       0 y# t        $ r |j                  |t	               f       Y rw xY w)z8
        Forward events to contained observers.
        	log_traceNr   r   c                 2    d   j                  | f       y)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#>BE< < <  	>H h>	> (7 	#NG66~FK!'   	  >&&')'<=>s   A33$BBc                 R    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s|  y w)N ).0obsr   s     r   	<genexpr>z7LogPublisher._errorLoggerForObserver.<locals>.<genexpr>g   s     Dc80CcDs   	r   )r   r   r
   )r   r   errorPublishers    ` r   r*   z$LogPublisher._errorLoggerForObserver]   s(     &DT__D
 ~..r   )__name__
__module____qualname____doc__r   r   r   r"   r	   r/   r
   r*   r2   r   r   r   r      sg    )< )D )	-L 	-T 	-	| 	 	"h "4 "H/ / /r   r   r#   r   Nc                      y)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      so   
 & & * /  P 
 \R/ R/ R/j \ T  r   