
    Vh!	                         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	             Zefd
ee   dee   defdZy)z
File log observer.
    )IOAnyCallableOptional)implementer)ioType   )formatEventAsClassicLogText
formatTimetimeFormatRFC3339)ILogObserverLogEventc                   L    e Zd ZdZdee   deegee	   f   ddfdZ
deddfdZy)	FileLogObserverz9
    Log observer that writes to a file-like object.
    outFileformatEventreturnNc                 `    t        |      t        urd| _        nd| _        || _        || _        y)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   s      D/home/dcms/DCMS/lib/python3.12/site-packages/twisted/logger/_file.py__init__zFileLogObserver.__init__   s-     '?#%,3DN!DN&    eventc                    | j                  |      }|rw| j                  | j                  j                  |       n4| j                  j                  |j	                  | j                               | j                  j                          yy)zG
        Write event to file.

        @param event: An event.
        N)r   r   r   writeencodeflush)r   r   texts      r   __call__zFileLogObserver.__call__(   sg     &~~%##D)##DKK$?@MM! r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r"    r   r   r   r      sK    '#w'-5xj(3-6O-P'	' "h "4 "r   r   r   
timeFormatr   c                 N    dt         dt        t           ff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                 $    t        | fd      S )Nc                     t        |       S )Nr   )er(   s    r   <lambda>z:textFileLogObserver.<locals>.formatEvent.<locals>.<lambda>J   s    
1j(A r   r,   )r
   )r   r(   s    r   r   z(textFileLogObserver.<locals>.formatEventH   s    *A
 	
r   )r   r   r   r   )r   r(   r   s    ` r   textFileLogObserverr/   8   s)     
8 
 

 7K00r   N)r&   typingr   r   r   r   zope.interfacer   twisted.python.compatr   _formatr
   r   r   _interfacesr   r   r   r   r/   r'   r   r   <module>r5      sk   
 / . & ( O O / \"" "" ""L 3D1W1"*3-11r   