U
    c6{iù  ã                   @   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                   @   sH   e Zd ZdZefee ddœdd„Zeddœdd„Z	e
dd	œ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}]
        >>>
    N)ÚsizeÚreturnc                 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   ú:/tmp/pip-unpacked-wheel-hfbvu0bz/twisted/logger/_buffer.pyÚ__init__%   s    z"LimitedHistoryLogObserver.__init__)Úeventr   c                 C   s   | j  |¡ d S )N)r   Úappend)r   r   r   r   r   Ú__call__,   s    z"LimitedHistoryLogObserver.__call__)ÚotherObserverr   c                 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   Zzope.interfacer   Z_interfacesr   r   r   r	   r   r   r   r   Ú<module>   s   