U
    2ÜŸj!	  ã                   @   s�   d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZ ddlmZmZ eeƒG dd	„ d	ƒƒZefee ee ed
œdd„ZdS )z
File log observer.
é    )ÚIOÚAnyÚCallableÚOptional)Úimplementer)ÚioTypeé   )ÚformatEventAsClassicLogTextÚ
formatTimeÚtimeFormatRFC3339)ÚILogObserverÚLogEventc                   @   sD   e Zd ZdZee eegee	 f ddœdd„Z
eddœdd„ZdS )	ÚFileLogObserverz9
    Log observer that writes to a file-like object.
    N)ÚoutFileÚformatEventÚreturnc                 C   s*   t |ƒtk	rd| _nd| _|| _|| _dS )zß
        @param outFile: A file-like object.  Ideally one should be passed which
            accepts text data.  Otherwise, UTF-8 L{bytes} will be used.
        @param formatEvent: A callable that formats an event.
        zutf-8N)r   ÚstrÚ	_encodingÚ_outFiler   )Úselfr   r   © r   ú8/tmp/pip-unpacked-wheel-4b529toj/twisted/logger/_file.pyÚ__init__   s
    zFileLogObserver.__init__©Úeventr   c                 C   sH   |   |¡}|rD| jdkr&| j |¡ n| j | | j¡¡ | j ¡  dS )zG
        Write event to file.

        @param event: An event.
        N)r   r   r   ÚwriteÚencodeÚflush)r   r   Útextr   r   r   Ú__call__(   s    

zFileLogObserver.__call__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r   r   r   r      s    þr   )r   Ú
timeFormatr   c                    s"   t tt dœ‡ fdd„}t| |ƒS )aî  
    Create a L{FileLogObserver} that emits text to a specified (writable)
    file-like object.

    @param outFile: A file-like object.  Ideally one should be passed which
        accepts text data.  Otherwise, UTF-8 L{bytes} will be used.
    @param timeFormat: The format to use when adding timestamp prefixes to
        logged events.  If L{None}, or for events with no C{"log_timestamp"}
        key, the default timestamp prefix of C{"-"} is used.

    @return: A file log observer.
    r   c                    s   t | ‡ fdd„d�S )Nc                    s
   t | ˆ ƒS )N©r
   )Úe©r$   r   r   Ú<lambda>J   ó    z:textFileLogObserver.<locals>.formatEvent.<locals>.<lambda>r%   )r	   )r   r'   r   r   r   H   s     
ÿz(textFileLogObserver.<locals>.formatEvent)r   r   r   r   )r   r$   r   r   r'   r   ÚtextFileLogObserver8   s    r*   N)r#   Útypingr   r   r   r   Zzope.interfacer   Ztwisted.python.compatr   Ú_formatr	   r
   r   Z_interfacesr   r   r   r   r*   r   r   r   r   Ú<module>   s   &ÿ þ