ó
    öÞ j†'  ã                  ó„  • S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	J
r
  SSKJr  SSKJr  SSKJrJr  SS	KJr  S
SKJr  S
SKJr  S
SKJr  S
SKJrJr   " S S\5      r " S S5      r\\4r SS jr! " S S5      r" " S S\5      r\" \5       " S S5      5       r#\" \5       " S S5      5       r$S S jr% " S S5      r&g)!z“
Processors and tools specific to the `Twisted <https://twisted.org/>`_
networking engine.

See also :doc:`structlog's Twisted support <twisted>`.
é    )ÚannotationsN)ÚCallableÚSequence)ÚAnyÚTextIO©Úlog)ÚFailure)ÚILogObserverÚtextFromEventDict)Úimplementeré   )ÚBoundLoggerBase)Ú_BUILTIN_DEFAULT_PROCESSORS)ÚJSONRenderer)Ú	EventDictÚWrappedLoggerc                  ó4   • \ rS rSrSrSSS jjrSSS jjrSrg)	ÚBoundLoggeré    zÿ
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                ó*   • U R                   " SU40 UD6$ )z7
Process event and call ``log.msg()`` with the result.
Úmsg©Ú_proxy_to_logger©ÚselfÚeventÚkws      ÚK/var/www/html/gaurav/venv/lib/python3.13/site-packages/structlog/twisted.pyr   ÚBoundLogger.msg/   ó   € ð ×$Ò$ U¨EÑ8°RÑ8Ð8ó    c                ó*   • U R                   " SU40 UD6$ )z7
Process event and call ``log.err()`` with the result.
Úerrr   r   s      r   r$   ÚBoundLogger.err5   r!   r"   © ©N)r   z
str | Noner   r   Úreturnr   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r$   Ú__static_attributes__r&   r"   r   r   r       s   † ñö9÷9ñ 9r"   r   c                  ó"   • \ rS rSrSrSS jrSrg)ÚLoggerFactoryé<   z¹
Build a Twisted logger when an *instance* is called.

>>> from structlog import configure
>>> from structlog.twisted import LoggerFactory
>>> configure(logger_factory=LoggerFactory())
c                ó   • [         $ )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__ÚLoggerFactory.__call__E   s	   € ô ˆ
r"   r&   N)r3   r   r(   r   ©r)   r*   r+   r,   r-   r4   r.   r&   r"   r   r0   r0   <   s   † ñ÷	r"   r0   c                óˆ  • U R                  SS5      nU R                  SS5      nU R                  SS5      n[        U[        5      (       a   [        U[        5      (       a  [        S5      eU(       a   [        U[        5      (       a  [        S5      e[        U[        5      (       d"  [        U[        5      (       a  U=(       d    SnUn[        U[        5      (       a  UnU(       d#  [
        R                  " 5       S:w  a
  [        5       n[        U[        5      (       a   [        U[        5      (       d  [        U5      nXU 4$ )	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)Ú	eventDictr8   r9   r   s       r   Ú_extractStuffAndWhyrD   T   sø   € ð �]‰]˜8 TÓ*€FØ�=‰=˜ Ó&€DØ�M‰M˜' 4Ó(€Eä�&œ+×&Ñ&¬:°e¼[×+IÑ+IÜÐNÓOÐOö ”
˜5¤#×&Ñ&ÜÐ<Ó=Ð=ô �fœk×*Ñ*¬z¸%Ä×/MÑ/MØ��wˆØˆä�%œ×ÑØˆæ”c—l’l“nÐ(:Ó:Ü“ˆô �&œ-×(Ñ(´¸FÄG×1LÑ1LÜ˜“ˆà˜Ð"Ð"r"   c                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)ÚReprWrapperéy   zï
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                ó   • Xl         g r'   ©Ústring)r   rJ   s     r   Ú__init__ÚReprWrapper.__init__ˆ   s   € Ø�r"   c                ól   • [        XR                  5      =(       a    U R                  UR                  :H  $ )z%
Check for equality, just for tests.
)r<   Ú	__class__rJ   )r   Úothers     r   Ú__eq__ÚReprWrapper.__eq__‹   s'   € ô
 �uŸn™nÓ-×M°$·+±+ÀÇÁÑ2Mð	
r"   c                ó   • U R                   $ r'   rI   )r   s    r   Ú__repr__ÚReprWrapper.__repr__“   s   € Ø�{‰{Ðr"   rI   N)rJ   r?   r(   ÚNone)rO   Úobjectr(   Úbool)r(   r?   )	r)   r*   r+   r,   r-   rK   rP   rS   r.   r&   r"   r   rF   rF   y   s   † ñôô
÷r"   rF   c                  ó2   • \ rS rSrSr        SS jrSrg)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                óô   • [        U5      u  pEnUS:X  a<  XSS'   [        U[        5      (       a"  UR                  SS9US'   UR	                  5         OXSS'   [        [        R                  " XX#5      5      4SS04$ )Nr$   r   Úverbose)ÚdetailÚ	exceptionÚ
_structlogT)rD   r<   r
   ÚgetTracebackÚcleanFailurerF   ÚGenericJSONRendererr4   ©r   ÚloggerÚnamerC   r8   r9   s         r   r4   ÚJSONRenderer.__call__­   s’   € ô #6°iÓ"@Ñˆ�iØ�5‹=Ø!%�gÑÜ˜&¤'×*Ñ*Ø)/×)<Ñ)<ÀIÐ)<Ð)N�	˜+Ñ&Ø×#Ñ#Ô%øà!%�gÑô Ü'×0Ò0Ø dóóðð ˜4Ð ð	
ð 		
r"   r&   N)rc   r   rd   r?   rC   r   r(   z$tuple[Sequence[Any], dict[str, Any]]r6   r&   r"   r   r   r   —   s2   † ñð*
àð
ð ð
ð ð	
ð
 
.÷
r"   r   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚPlainFileLogObserveréÇ   zÑ
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   • UR                   U l        UR                  U l        g r'   )ÚwriteÚ_writeÚflushÚ_flush)r   Úfiles     r   rK   ÚPlainFileLogObserver.__init__Õ   s   € Ø—j‘jˆŒØ—j‘jˆ�r"   c                ó^   • U R                  [        U5      S-   5        U R                  5         g )NÚ
)rk   r   rm   ©r   rC   s     r   r4   ÚPlainFileLogObserver.__call__Ù   s)   € Ø�‰Ü˜iÓ(Øñô	
ð 	�‰�r"   )rm   rk   N)rn   r   r(   rU   )rC   r   r(   rU   ©r)   r*   r+   r,   r-   rK   r4   r.   r&   r"   r   rg   rg   Ç   s   † ñ
ô!÷r"   rg   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚJSONLogObserverWrapperéá   aa  
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                ó   • Xl         g r'   ©Ú	_observer)r   Úobservers     r   rK   ÚJSONLogObserverWrapper.__init__ð   s   € Ø!�r"   c                ó¤   • SU;  a:  [         R                  " [        U5      UR                  S5      S.5      4US'   SUS'   U R	                  U5      $ )Nr^   Úsystem)r   r~   ÚmessageT)ÚjsonÚdumpsr   Úgetrz   rr   s     r   r4   ÚJSONLogObserverWrapper.__call__ó   s[   € Ø˜yÓ(ä—
’
ä!2Ø%ó"ð #,§-¡-°Ó"9ñ	óð	$ˆI�iÑ ð '+ˆI�lÑ#à�~‰~˜iÓ(Ð(r"   ry   N)r{   r   r(   rU   )rC   r   r(   r?   rt   r&   r"   r   rv   rv   á   s   † ñô"÷)r"   rv   c                 óF   • [        [        [        R                  5      5      $ )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
)rv   rg   r@   Ústdoutr&   r"   r   ÚplainJSONStdOutLoggerr†     s   € ô, "Ô"6´s·z±zÓ"BÓCÐCr"   c                  óH   • \ rS rSrSr S   SS jjr        S	S jrSrg)
ÚEventAdapteri  aB  
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                ó2   • U=(       d	    [         S   U l        g )Néÿÿÿÿ)r   Ú_dictRenderer)r   ÚdictRenderers     r   rK   ÚEventAdapter.__init__/  s   € ð *×LÔ-HÈÑ-LˆÕr"   c                ó„   • US:X  a)  [        U5      u  pEnXSS'   SUU R                  XU5      S.4$ U R                  XU5      $ )Nr$   r   r&   )r8   r9   )rD   r‹   rb   s         r   r4   ÚEventAdapter.__call__7  s`   € ð �5‹=ô
 ':¸)Ó&DÑ#ˆF˜)Ø!%�gÑð à$Ø ×.Ñ.¨v¸YÓGñðð ð ×!Ñ! &°	Ó:Ð:r"   )r‹   r'   )rŒ   z5Callable[[WrappedLogger, str, EventDict], str] | Noner(   rU   )rc   r   rd   r?   rC   r   r(   r   rt   r&   r"   r   rˆ   rˆ     sN   † ñð* ð	Mð BðMð
 
õMð;Ø#ð;Ø+.ð;Ø;Dð;à	÷;r"   rˆ   )rC   r   r(   ztuple[Any, Any, EventDict])r(   rv   )'r-   Ú
__future__r   r€   r@   Úcollections.abcr   r   Útypingr   r   Útwisted.pythonr	   Útwisted.python.failurer
   Útwisted.python.logr   r   Úzope.interfacer   Ú_baser   Ú_configr   Ú
processorsr   ra   r   r   r   r0   rB   r=   rD   rF   rg   rv   r†   rˆ   r&   r"   r   Ú<module>rš      sÀ   ðñõ #ã Û 
ç .ß å Ý *ß >Ý &å "Ý 0Ý ;ß ,ô9�/ô 9÷8ñ ð* ˜gÐ&€ô"#÷Jñ ô<-
Ð&ô -
ñ` ˆ\Ó÷ð ó ðñ2 ˆ\Ó÷)ð )ó ð)ôDD÷2-;ò -;r"   