o
    b                     @   sZ   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	 d	Zd
S )z'
Log observer that maintains a buffer.
    )deque)DequeOptional)implementer   )ILogObserverLogEventi   c                   @   sN   e Zd ZdZefdee ddfddZdeddfdd	Z	d
e
ddfddZdS )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                 C   s   t |d| _dS )zx
        @param size: The maximum number of events to buffer.  If L{None}, the
            buffer is unbounded.
        )maxlenN)r   _buffer)selfr
    r   8/usr/lib/python3/dist-packages/twisted/logger/_buffer.py__init__%   s   z"LimitedHistoryLogObserver.__init__eventc                 C   s   | j | d S )N)r   append)r   r   r   r   r   __call__,   s   z"LimitedHistoryLogObserver.__call__otherObserverc                 C   s   | j D ]}|| qdS )z
        Re-play the buffered events to another log observer.

        @param otherObserver: An observer to replay events to.
        N)r   )r   r   r   r   r   r   replayTo/   s   

z"LimitedHistoryLogObserver.replayTo)__name__
__module____qualname____doc___DEFAULT_BUFFER_MAXIMUMr   intr   r   r   r   r   r   r   r   r   r	      s
    r	   N)r   collectionsr   typingr   r   zope.interfacer   _interfacesr   r   r   r	   r   r   r   r   <module>   s   