
    h|E                     V   d dl Z d dlZd dlZd dlZd dl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 d dlmZ d dlmZ d dlmZ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!m"Z" d dlm#Z#m$Z$m%Z% d dl	m&Z& d dl'm(Z( dZ)dZ* e       Z+ejX                  ejZ                  cZ.Z/da0 ejb                         Z2da3da4i Z5 ejl                  e        ejl                  e        d Z7d Z8d!dZ9 G d de:      Zde dfdZ; ee"       G d de:             Z<e/dfdZ= e:       Z> G d de:      Z?d Z@d  ZA e?e+      ZBeBj                  ZCeBj                  ZDeBj                  ZEeBj                  ZFeBj                  ZGeBj                  ZHeBj                  ZIeBj                  ZJeBj                  ZKeBj                  ZLeBj                  ZMeBj                  ZNeBj                  ZOeBj                  ZPeBj                  ZQeBj                  ZReBj                  ZSeBj                  ZTej                  ZUej                  ZVy)"    N)partialFailure)maybeDeferredDeferredDeferredList)succeedfail)IReactorTime)provider)IFailedFutureILogger
log_levels)guess_stream_needs_encoding)_Config_BatchedTimer)_util)LoggerformatEventILogObserver)globalLogBeginner
formatTimeLogLevel)ensureDeferred)iscoroutinefunctionTFinfoc                       y N )argskwargss     D/var/www/Befach/backend/env/lib/python3.12/site-packages/txaio/tx.py_no_opr$   L   s        c                 .    t         j                  |        y r   )_categoriesupdate)
categoriess    r#   add_log_categoriesr*   P   s    z"r%   c                 ~    | -t         j                  t         j                  | urt        d      t        t               S )NzTwisted has only a single, global reactor. You passed in a reactor different from the one already configured in txaio.config.loop)configloopRuntimeError_TxApi)r-   s    r#   with_configr0   T   s;    ;;"v{{$'>' 
 &>r%   c                   D    e Zd Zd
dZddZd Zd ZddZd ZddZ	d	 Z
y)r   Nc                     |sJ d        |||      | _         d| _        |r| j                  |       n| j                  t               t
        j                  |        y )Nz$Should not be instantiated directly.)observer	namespaceF)_logger_log_level_set_explicitlyset_log_level_set_log_level
_log_level_loggersadd)selflevelloggerr4   r3   s        r#   __init__zLogger.__init__f   sQ    ===vx9E).&u%
+Tr%   c                     | S r   r    )r<   oselftypes      r#   __get__zLogger.__get__t   s	     r%   c                     d|v r0|d   t         v r%t               }t         j                  |d         |d<    | j                  j                  |g|i | y )Nlog_categoryformat)r'   tuplegetr5   emitr<   r=   r!   r"   s       r#   _logzLogger._log|   sU     V#~(>+(M7D*vn/EFF8%1$1&1r%   c                     t        j                  | j                        t        j                  |      k  ry |dk(  r | j                  |i |S t	        j
                  |      } | j                  |g|i |S )Ntrace)r   indexr9   _tracer   lookupByNamerK   rJ   s       r#   rI   zLogger.emit   sp    DOO,z/?/?/FFG4;;///%%e,tyy0000r%   c                 4    | j                  |       || _        y)zt
        Set the log level. If keep is True, then it will not change along with
        global log changes.
        N)r8   r6   )r<   r=   keeps      r#   r7   zLogger.set_log_level   s    
 	E")-&r%   c                 
   t        j                  |      }t        t               D ]  \  }}|dk(  r||kD  rAt        | |d       }|t        k(  r|t        | |t               |dk(  s@t        | dt               Rt        | |d       t        d fv sh|dk(  rt        | d| j                         n4t        | |t        | j                  t        j                  |                   |dk(  st        | d| j                          || _        y )NnoneerrorfailurerM   )r   rN   	enumerategetattrr$   setattrrO   r   rK   r   rP   _failurer9   )r<   r=   desired_indexidxnamecurrents         r#   r8   zLogger._set_log_level   s     #((/":.ICv~]"!$d3&(GOD$/7?D)V4 4t,>wgt{{; $		8;P;PQU;V(W wi?- /0  r%   c                 B     | j                   j                  |g|i |S r   )r5   rV   )r<   rF   r!   kws       r#   rZ   zLogger._failure   s#    #t||##F8T8R88r%   c                 ,     | j                   |ddi| y )Ntxaio_traceT)debug)r<   r!   r`   s      r#   rO   zLogger._trace   s     	

D1d1b1r%   )NNNNr   T)__name__
__module____qualname__r?   rC   rK   rI   r7   r8   rZ   rO   r    r%   r#   r   r   d   s+    2	1. @92r%   r   c                    t        j                         j                  }d|j                  v r@|j                  d   j                  }dj                  |j                  |j                        }nD|j                  d   }|j                  j                  dk7  r|dz   |j                  j                  z   }t        | |||      }|S )Nr<   z{0}.{1}re   z<module>.)r=   r4   r>   r3   )inspectcurrentframef_backf_locals	__class__rF   rf   re   	f_globalsf_codeco_namer   )r=   r>   r3   cfclsr4   s         r#   make_loggerrt      s     
				&	&Bkk&!++$$S^^S\\B	LL,	99
* "C"))*;*;;I%9VhWFMr%   c                       e Zd ZdZej
                  ej                  ej                  ej                  ej                  ej                  dZ
d Zd Zd Zy)_LogObserverzQ
    Internal helper.

    An observer which formats events to a given file.
    )criticalrU   warnr   rc   rM   c                 @    || _         t        |      | _        d | _        y r   )_filer   _encode_levels)r<   outs     r#   r?   z_LogObserver.__init__   s    
237r%   c                     | j                   \t        j                  t              }t        D cg c].  }t        j                  |      |k  r|dk7  r| j                  |   0 c}| _         || j                   v S c c}w )NrT   )r|   r   rN   r9   to_tx)r<   r=   target_levellvls       r#   _acceptable_levelz_LogObserver._acceptable_level   so    <<%++J7L &##C(L8SF] 

3DL
 $$s   3A7c                    |d   rdj                  t        |d         t        |d         t        j                        }| j
                  r|j                  d      }| j                  j                  |       y d|v r| j                  |d         rodj                  t        |d         t        |      t        j                        }| j
                  r|j                  d      }| j                  j                  |       y y y )N
log_formatz
{0} {1}{2}log_timelog_failureutf8	log_level)rF   r   failure_format_tracebackoslinesepr{   encoderz   writer   r   )r<   eventmsgs      r#   __call__z_LogObserver.__call__   s    
 &%%5,-(})=>

C
 ||jj(JJS! e#(>(>u[?Q(R"))uZ01&JJ
 <<**V,C

  % )S#r%   N)re   rf   rg   __doc__r   rw   rU   rx   r   rc   r   r?   r   r   r    r%   r#   rv   rv      sK     %%E%&r%   rv   c                 "   |t         vr.t        dj                  |dj                  t                           t        ryda|at        t
               | rt        |       ag }t        r|j                  t               t        j                  |       y)z[
    Start logging to the file-like object in ``out``. By default, this
    is stdout.
    z'Invalid log level '{0}'; valid are: {1}z, NT)r   r.   rF   join_started_loggingr9   set_global_log_levelrv   	_observerappendr   beginLoggingTo)r}   r=   
_observerss      r#   start_loggingr     s     J5<<tyy,
 	
 J$
 %	J)$$$Z0r%   c                       e Zd Zd Zd Zd Zd ZeedfdZd Z	ddZ
d	 Zd
 Zd ZddZd ZddZddZddZddZd ZddZd Zd Zy)r/   c                     || _         y r   )_config)r<   r,   s     r#   r?   z_TxApi.__init__6  s	    r%   c                     	 dj                  |j                  j                  j                   |j                               S # t
        $ r dj                  |      cY S w xY w)z_
        :param fail: must be an IFailedFuture
        returns a unicode error-message
        z{0}: {1}z+Failed to produce failure message for "{0}")rF   valuern   re   getErrorMessage	Exceptionr<   r
   s     r#   failure_messagez_TxApi.failure_message9  s`    
	N$$

$$--$$$&   	N@GGMM	Ns   >A AAc                     |j                   S )z\
        :param fail: must be an IFailedFuture
        returns a traceback instance
        )tbr   s     r#   failure_tracebackz_TxApi.failure_tracebackF  s    
 wwr%   c                     	 t        j                         } |j                  |       |j                         S # t        $ r dj                  |      cY S w xY w)zP
        :param fail: must be an IFailedFuture
        returns a string
        )filez,Failed to format failure traceback for '{0}')ioStringIOprintTracebackgetvaluer   rF   )r<   r
   fs      r#   r   z_TxApi.failure_format_tracebackM  sQ    
	OADQ'::< 	OAHHNN	Os   69 AANc                     |t         ur|t         urt        d      t        |      }|t         urt        ||       |S |t         urt	        ||       |S )Nz"Cannot have both result and error.)	canceller)_unspecified
ValueErrorr   resolvereject)r<   resultrU   r   r   s        r#   create_futurez_TxApi.create_futureY  sY    %%|*CABBy)%Av  ,&1er%   c                     t        |      S r   )r	   )r<   r   s     r#   create_future_successz_TxApi.create_future_successd  s    vr%   c                 *    t        t        |            S r   )r
   create_failure)r<   rU   s     r#   create_future_errorz_TxApi.create_future_errorg  s    N5)**r%   c                     t        |      r	 t         ||i |      S t	        |g|i |S # t        $ r}t        |      cY d }~S d }~ww xY wr   )r   r   	TypeErrorr   r   )r<   funr!   r"   es        r#   	as_futurez_TxApi.as_futurej  sX    s#.%c4&:6&:;; S242622  .*1--.s   - 	A
A AAc                 "    t        |t              S r   )
isinstancer   )r<   objs     r#   	is_futurez_TxApi.is_futures  s    #x((r%   c                 ^     t        | j                               j                  ||g|i |S r   )r   	_get_loop	callLater)r<   delayr   r!   r"   s        r#   
call_laterz_TxApi.call_laterv  s-    7|DNN,-77sTTTVTTr%   c                 <      fd} fd}t        |dz  |||      S )a&  
        Creates and returns an object implementing
        :class:`txaio.IBatchedTimer`.

        :param bucket_seconds: the number of seconds in each bucket. That
            is, a value of 5 means that any timeout within a 5 second
            window will be in the same bucket, and get notified at the
            same time. This is only accurate to "milliseconds".

        :param chunk_size: when "doing" the callbacks in a particular
            bucket, this controls how many we do at once before yielding to
            the reactor.
        c                  @     j                         j                         S r   )r   seconds)r<   s   r#   get_secondsz._TxApi.make_batched_timer.<locals>.get_seconds  s    >>#++--r%   c                 N     j                         j                  | |g|i |S r   )r   r   )r   r   r!   r"   r<   s       r#   create_delayed_callz6_TxApi.make_batched_timer.<locals>.create_delayed_call  s)    -4>>#--eSJ4J6JJr%   g     @@)seconds_providerdelayed_call_creatorr   )r<   bucket_seconds
chunk_sizer   r   s   `    r#   make_batched_timerz_TxApi.make_batched_timery  s.    	.	K V#(!4	
 	
r%   c                     |j                   S r   )called)r<   futures     r#   	is_calledz_TxApi.is_called  s    }}r%   c                 &    |j                  |       y r   )callback)r<   r   r   s      r#   r   z_TxApi.resolve  s    r%   c                     |t               }n7t        |t              rt        |      }nt        |t              st	        d      |j                  |       y )Nz&reject requires a Failure or Exception)r   r   r   r   r.   errback)r<   r   rU   s      r#   r   z_TxApi.reject  sD    ="$Ey)ENEeW-"#KLLur%   c                 $    |j                          y r   )cancel)r<   r   r   s      r#   r   z_TxApi.cancel  s    r%   c                 0    |rt        |      S t               S )z
        Create a Failure instance.

        if ``exception`` is None (the default), we MUST be inside an
        "except" block. This encapsulates the exception into an object
        that implements IFailedFuture
        r   )r<   	exceptions     r#   r   z_TxApi.create_failure  s     9%%yr%   c                 d    |J ||J |j                  |       |S |j                  ||       |S )z]
        callback or errback may be None, but at least one must be
        non-None.
        )
addErrbackaddCallbacks)r<   r   r   r   s       r#   add_callbacksz_TxApi.add_callbacks  sN    
 !!!&&&g&  '2r%   c                 X    fd}t        t        |            }t        ||d        |S )Nc                 n    g }| D ],  \  }}|j                  |       |rr|j                          . |S r   )r   raiseException)resrtnokr   consume_exceptionss       r#   	completedz _TxApi.gather.<locals>.completed  s;    C 	E

5!"4((* ! Jr%   )consumeErrors)r   listr   )r<   futuresr   r   dls     `  r#   gatherz_TxApi.gather  s.    	 $w-7IJ 	b)T*	r%   c                 p    t               }| j                         j                  ||j                  d       |S )z
        Inline sleep for use in co-routines.

        :param delay: Time to sleep in seconds.
        :type delay: float
        N)r   r   r   r   )r<   r   ds      r#   sleepz_TxApi.sleep  s-     J""5!**d;r%   c                     | j                   j                  ddlm} || j                   _        | j                   j                  S )z!
        internal helper
        r   )reactor)r   r-   twisted.internetr   )r<   r   s     r#   r   z_TxApi._get_loop  s3     <<$0 'DLL||   r%   r   )d   rd   )re   rf   rg   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r%   r#   r/   r/   4  sr    N
O $0|t 	+3)U
8 
*	!r%   r/   c                 Z    t         D ]   }|j                  r|j                  |        " | ay)zH
    Set the global log level on all loggers instantiated by txaio.
    N)r:   r6   r8   r9   )r=   items     r#   r   r     s,     --&  Jr%   c                      t         S r   )r9   r    r%   r#   get_global_log_levelr     s    r%   r   )Wr   r   sysweakrefrj   	functoolsr   twisted.python.failurer   twisted.internet.deferr   r   r   r	   r
   twisted.internet.interfacesr   zope.interfacer   txaio.interfacesr   r   r   txaio._iotyper   txaior   txaio._commonr   r   twisted.loggerr   _Loggerr   r   r   r   r   r   asyncior   using_twistedusing_asyncior,   stderrstdout_stderr_stdoutr   WeakSetr:   r9   r   r'   registerr$   r*   r0   objectrt   rv   r   r   r/   r   r   _default_apir   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   time_nsperf_counter_nsr    r%   r#   <module>r     s   6 
 	 
    * H H 0 4 # ? ? 5  '  G G B B 1 '	::szz  	7??
    w     	# Z2V Z2z 7T & 
,:&6 :& :&z V 1> xy!V y!x f~ .. 22 '@@ **$:: "66 ""	""	$$
!44 ""	


						,,**			
--''r%   