Ë
    èU.jk'  ã                  óx  — d Z ddlmZ ddlZddl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 ddlmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZmZ  G d„ de«      Z G d„ d«      ZeefZdd„Z  G d„ d«      Z! G d„ de«      Z ee«       G d„ d«      «       Z" ee«       G d„ d«      «       Z#dd„Z$ G d„ d«      Z%y) z“
Processors and tools specific to the `Twisted <https://twisted.org/>`_
networking engine.

See also :doc:`structlog's Twisted support <twisted>`.
é    )ÚannotationsN)ÚAnyÚCallableÚSequenceÚTextIO©Úlog)ÚFailure)ÚILogObserverÚtextFromEventDict)Úimplementeré   )ÚBoundLoggerBase)Ú_BUILTIN_DEFAULT_PROCESSORS)ÚJSONRenderer)Ú	EventDictÚWrappedLoggerc                  ó$   — e Zd ZdZddd„Zddd„Zy)ÚBoundLoggera  
    Twisted-specific version of `structlog.BoundLogger`.

    Works exactly like the generic one except that it takes advantage of
    knowing the logging methods in advance.

    Use it like::

        configure(
            wrapper_class=structlog.twisted.BoundLogger,
        )

    Nc                ó*   —  | j                   d|fi |¤ŽS )zG
        Process event and call ``log.msg()`` with the result.
        Úmsg©Ú_proxy_to_logger©ÚselfÚeventÚkws      úSC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\structlog/twisted.pyr   zBoundLogger.msg.   ó   € ð %ˆt×$Ñ$ U¨EÑ8°RÑ8Ð8ó    c                ó*   —  | j                   d|fi |¤ŽS )zG
        Process event and call ``log.err()`` with the result.
        Úerrr   r   s      r   r"   zBoundLogger.err4   r   r    ©N)r   z
str | Noner   r   Úreturnr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   © r    r   r   r      s   „ ñô9õ9r    r   c                  ó   — e Zd ZdZdd„Zy)ÚLoggerFactoryzÍ
    Build a Twisted logger when an *instance* is called.

    >>> from structlog import configure
    >>> from structlog.twisted import LoggerFactory
    >>> configure(logger_factory=LoggerFactory())
    c                ó   — t         S )zÄ
        Positional arguments are silently ignored.

        :rvalue: A new Twisted logger.

        .. versionchanged:: 0.4.0
            Added support for optional positional arguments.
        r   )r   Úargss     r   Ú__call__zLoggerFactory.__call__D   s	   € ô ˆ
r    N)r-   r   r$   r   ©r%   r&   r'   r(   r.   r)   r    r   r+   r+   ;   s   „ ñô	r    r+   c                ó  — | j                  dd«      }| j                  dd«      }| j                  dd«      }t        |t        «      rt        |t        «      rt        d«      ‚|rt        |t        «      rt        d«      ‚t        |t        «      st        |t        «      r|xs d}|}t        |t        «      r|}|s!t        j                  «       dk7  r
t        «       }t        |t        «      rt        |t        «      st        |«      }||| fS )	z 
    Removes all possible *_why*s and *_stuff*s, analyzes exc_info and returns
    a tuple of ``(_stuff, _why, eventDict)``.

    **Modifies** *eventDict*!
    Ú_stuffNÚ_whyr   z3Both _stuff and event contain an Exception/Failure.z!Both `_why` and `event` supplied.Úerror)NNN)	ÚpopÚ
isinstanceÚ_FAIL_TYPESÚ
ValueErrorÚstrÚsysÚexc_infor
   ÚBaseException)Ú	eventDictr1   r2   r   s       r   Ú_extractStuffAndWhyr=   S   sâ   € ð �]‰]˜8 TÓ*€FØ�=‰=˜ Ó&€DØ�M‰M˜' 4Ó(€Eä�&œ+Ô&¬:°e¼[Ô+IÜÐNÓOÐOñ ”
˜5¤#Ô&ÜÐ<Ó=Ð=ô �fœkÔ*¬z¸%ÄÔ/MØŠ�wˆØˆä�%œÔØˆá”c—l‘l“nÐ(:Ò:Ü“ˆô �&œ-Ô(´¸FÄGÔ1LÜ˜“ˆà�4˜Ð"Ð"r    c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	ÚReprWrappera  
    Wrap a string and return it as the ``__repr__``.

    This is needed for ``twisted.python.log.err`` that calls `repr` on
    ``_stuff``:

    >>> repr("foo")
    "'foo'"
    >>> repr(ReprWrapper("foo"))
    'foo'

    Note the extra quotes in the unwrapped example.
    c                ó   — || _         y r#   ©Ústring)r   rB   s     r   Ú__init__zReprWrapper.__init__‡   s	   € Øˆ�r    c                ód   — t        || j                  «      xr | j                  |j                  k(  S )z5
        Check for equality, just for tests.
        )r5   Ú	__class__rB   )r   Úothers     r   Ú__eq__zReprWrapper.__eq__Š   s)   € ô
 �u˜dŸn™nÓ-ÒM°$·+±+ÀÇÁÑ2Mð	
r    c                ó   — | j                   S r#   rA   )r   s    r   Ú__repr__zReprWrapper.__repr__’   s   € Ø�{‰{Ðr    N)rB   r8   r$   ÚNone)rF   Úobjectr$   Úbool)r$   r8   )r%   r&   r'   r(   rC   rG   rI   r)   r    r   r?   r?   x   s   „ ñóó
ôr    r?   c                  ó(   — e Zd ZdZ	 	 	 	 	 	 	 	 dd„Zy)r   a  
    Behaves like `structlog.processors.JSONRenderer` except that it formats
    tracebacks and failures itself if called with ``err()``.

    .. note::

        This ultimately means that the messages get logged out using ``msg()``,
        and *not* ``err()`` which renders failures in separate lines.

        Therefore it will break your tests that contain assertions using
        `flushLoggedErrors
        <https://docs.twisted.org/en/stable/api/
        twisted.trial.unittest.SynchronousTestCase.html#flushLoggedErrors>`_.

    *Not* an adapter like `EventAdapter` but a real formatter.  Also does *not*
    require to be adapted using it.

    Use together with a `JSONLogObserverWrapper`-wrapped Twisted logger like
    `plainJSONStdOutLogger` for pure-JSON logs.
    c                óö   — t        |«      \  }}}|dk(  r;||d<   t        |t        «      r+|j                  d¬«      |d<   |j	                  «        n||d<   t        t        j                  | |||«      «      fddifS )Nr"   r   Úverbose)ÚdetailÚ	exceptionÚ
_structlogT)r=   r5   r
   ÚgetTracebackÚcleanFailurer?   ÚGenericJSONRendererr.   ©r   ÚloggerÚnamer<   r1   r2   s         r   r.   zJSONRenderer.__call__¬   s˜   € ô #6°iÓ"@Ñˆ��iØ�5Š=Ø!%ˆI�gÑÜ˜&¤'Ô*Ø)/×)<Ñ)<ÀIÐ)<Ó)N�	˜+Ñ&Ø×#Ñ#Õ%à!%ˆI�gÑô Ü'×0Ñ0Ø˜f d¨Ióóðð ˜4Ð ð	
ð 		
r    N)rW   r   rX   r8   r<   r   r$   z$tuple[Sequence[Any], dict[str, Any]]r/   r)   r    r   r   r   –   s2   „ ñð*
àð
ð ð
ð ð	
ð
 
.ô
r    r   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚPlainFileLogObserverzí
    Write only the plain message without timestamps or anything else.

    Great to just print JSON to stdout where you catch it with something like
    runit.

    Args:
        file: File to print to.

    .. versionadded:: 0.2.0
    c                óH   — |j                   | _        |j                  | _        y r#   )ÚwriteÚ_writeÚflushÚ_flush)r   Úfiles     r   rC   zPlainFileLogObserver.__init__Ô   s   € Ø—j‘jˆŒØ—j‘jˆ�r    c                ó^   — | j                  t        |«      dz   «       | j                  «        y )NÚ
)r]   r   r_   ©r   r<   s     r   r.   zPlainFileLogObserver.__call__Ø   s)   € Ø�‰Ü˜iÓ(Øñô	
ð 	�‰�r    N)r`   r   r$   rJ   )r<   r   r$   rJ   ©r%   r&   r'   r(   rC   r.   r)   r    r   rZ   rZ   Æ   s   „ ñ
ó!ôr    rZ   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚJSONLogObserverWrappera…  
    Wrap a log *observer* and render non-`JSONRenderer` entries to JSON.

    Args:
        observer (ILogObserver):
            Twisted log observer to wrap.  For example
            :class:`PlainFileObserver` or Twisted's stock `FileLogObserver
            <https://docs.twisted.org/en/stable/api/
            twisted.python.log.FileLogObserver.html>`_

    .. versionadded:: 0.2.0
    c                ó   — || _         y r#   )Ú	_observer)r   Úobservers     r   rC   zJSONLogObserverWrapper.__init__ï   s	   € Ø!ˆ�r    c                óž   — d|vr9t        j                  t        |«      |j                  d«      dœ«      f|d<   d|d<   | j	                  |«      S )NrR   Úsystem)r   rk   ÚmessageT)ÚjsonÚdumpsr   Úgetrh   rc   s     r   r.   zJSONLogObserverWrapper.__call__ò   s[   € Ø˜yÑ(ä—
‘
ä!2Ø%ó"ð #,§-¡-°Ó"9ñ	óð	$ˆI�iÑ ð '+ˆI�lÑ#à�~‰~˜iÓ(Ð(r    N)ri   r   r$   rJ   )r<   r   r$   r8   rd   r)   r    r   rf   rf   à   s   „ ñó"ô)r    rf   c                 óF   — t        t        t        j                  «      «      S )aÿ  
    Return a logger that writes only the message to stdout.

    Transforms non-`JSONRenderer` messages to JSON.

    Ideal for JSONifying log entries from Twisted plugins and libraries that
    are outside of your control::

        $ twistd -n --logger structlog.twisted.plainJSONStdOutLogger web
        {"event": "Log opened.", "system": "-"}
        {"event": "twistd 13.1.0 (python 2.7.3) starting up.", "system": "-"}
        {"event": "reactor class: twisted...EPollReactor.", "system": "-"}
        {"event": "Site starting on 8080", "system": "-"}
        {"event": "Starting factory <twisted.web.server.Site ...>", ...}
        ...

    Composes `PlainFileLogObserver` and `JSONLogObserverWrapper` to a usable
    logger.

    .. versionadded:: 0.2.0
    )rf   rZ   r9   Ústdoutr)   r    r   ÚplainJSONStdOutLoggerrr     s   € ô, "Ô"6´s·z±zÓ"BÓCÐCr    c                  ó:   — e Zd ZdZ	 d	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zy)ÚEventAdapterar  
    Adapt an ``event_dict`` to Twisted logging system.

    Particularly, make a wrapped `twisted.python.log.err
    <https://docs.twisted.org/en/stable/api/twisted.python.log.html#err>`_
    behave as expected.

    Args:
        dictRenderer:
            Renderer that is used for the actual log message. Please note that
            structlog comes with a dedicated `JSONRenderer`.

    **Must** be the last processor in the chain and requires a *dictRenderer*
    for the actual formatting as an constructor argument in order to be able to
    fully support the original behaviors of ``log.msg()`` and ``log.err()``.
    Nc                ó(   — |xs	 t         d   | _        y )Néÿÿÿÿ)r   Ú_dictRenderer)r   ÚdictRenderers     r   rC   zEventAdapter.__init__.  s   € ð *ÒLÔ-HÈÑ-LˆÕr    c                óŠ   — |dk(  r,t        |«      \  }}}||d<   d|| j                  |||«      dœfS | j                  |||«      S )Nr"   r   r)   )r1   r2   )r=   rw   rV   s         r   r.   zEventAdapter.__call__6  sh   € ð �5Š=ô
 ':¸)Ó&DÑ#ˆF�D˜)Ø!%ˆI�gÑð à$Ø ×.Ñ.¨v°t¸YÓGñðð ð ×!Ñ! &¨$°	Ó:Ð:r    r#   )rx   z5Callable[[WrappedLogger, str, EventDict], str] | Noner$   rJ   )rW   r   rX   r8   r<   r   r$   r   rd   r)   r    r   rt   rt     sN   „ ñð* ð	Mð BðMð
 
óMð;Ø#ð;Ø+.ð;Ø;Dð;à	ô;r    rt   )r<   r   r$   ztuple[Any, Any, EventDict])r$   rf   )&r(   Ú
__future__r   rm   r9   Útypingr   r   r   r   Útwisted.pythonr	   Útwisted.python.failurer
   Útwisted.python.logr   r   Úzope.interfacer   Ú_baser   Ú_configr   Ú
processorsr   rU   r   r   r   r+   r;   r6   r=   r?   rZ   rf   rr   rt   r)   r    r   Ú<module>rƒ      sÀ   ðñõ #ã Û 
ç 2Ó 2å Ý *ß >Ý &å "Ý 0Ý ;ß ,ô9�/ô 9÷8ñ ð* ˜gÐ&€ó"#÷Jñ ô<-
Ð&ô -
ñ` ˆ\Ó÷ð ó ðñ2 ˆ\Ó÷)ð )ó ð)óDD÷2-;ò -;r    