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    &