
    Vh                     n    d 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
 dZ ee	       G d d	             Zy
)z'
Log observer that maintains a buffer.
    )deque)DequeOptional)implementer   )ILogObserverLogEventi   c                   J    e Zd ZdZefdee   ddfdZdeddfdZ	de
ddfd	Zy)
LimitedHistoryLogObservera  
    L{ILogObserver} that stores events in a buffer of a fixed size::

        >>> from twisted.logger import LimitedHistoryLogObserver
        >>> history = LimitedHistoryLogObserver(5)
        >>> for n in range(10): history({'n': n})
        ...
        >>> repeats = []
        >>> history.replayTo(repeats.append)
        >>> len(repeats)
        5
        >>> repeats
        [{'n': 5}, {'n': 6}, {'n': 7}, {'n': 8}, {'n': 9}]
        >>>
    sizereturnNc                 &    t        |      | _        y)zx
        @param size: The maximum number of events to buffer.  If L{None}, the
            buffer is unbounded.
        )maxlenN)r   _buffer)selfr   s     F/home/dcms/DCMS/lib/python3.12/site-packages/twisted/logger/_buffer.py__init__z"LimitedHistoryLogObserver.__init__%   s    
 ).T(:    eventc                 :    | j                   j                  |       y )N)r   append)r   r   s     r   __call__z"LimitedHistoryLogObserver.__call__,   s    E"r   otherObserverc                 6    | j                   D ]
  } ||        y)z
        Re-play the buffered events to another log observer.

        @param otherObserver: An observer to replay events to.
        N)r   )r   r   r   s      r   replayToz"LimitedHistoryLogObserver.replayTo/   s     \\ 	!E% 	!r   )__name__
__module____qualname____doc___DEFAULT_BUFFER_MAXIMUMr   intr   r	   r   r   r    r   r   r   r      sJ      .E ;Xc] ; ;#h #4 #!l !t !r   r   N)r   collectionsr   typingr   r   zope.interfacer   _interfacesr   r	   r    r   r"   r   r   <module>r'      s<   
  " & /#  \"! "! "!r   