o
    ¯b!	  ã                   @   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d
ee dee defdd„ZdS )z
File log observer.
é    )ÚIOÚAnyÚCallableÚOptional)Úimplementer)ÚioTypeé   )ÚformatEventAsClassicLogTextÚ
formatTimeÚtimeFormatRFC3339)ÚILogObserverÚLogEventc                   @   sJ   e Zd ZdZdee deegee	 f ddfdd„Z
deddfd	d
„ZdS )ÚFileLogObserverz9
    Log observer that writes to a file-like object.
    ÚoutFileÚformatEventÚreturnNc                 C   s*   t |ƒtu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   ú6/usr/lib/python3/dist-packages/twisted/logger/_file.pyÚ__init__   s
   
zFileLogObserver.__init__Úeventc                 C   sL   |   |¡}|r$| jdu r| j |¡ n
| j | | j¡¡ | j ¡  dS 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$   dt dtt f‡ 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   r   c                    s   t | ‡ fdd„d�S )Nc                    s
   t | ˆ ƒS )N©r
   )Úe©r#   r   r   Ú<lambda>J   s   
 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   Úzope.interfacer   Útwisted.python.compatr   Ú_formatr	   r
   r   Ú_interfacesr   r   r   r   r(   r   r   r   r   Ú<module>   s    &ÿÿÿþ