
    tfE                        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            a+ej,        ej-        cZ.Z/da0 ej1                    a2da3da4i Z5 ej6        e            ej6        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?tV                    ZBeBjC        ZCeBjD        ZDeBjE        ZEeBjF        ZFeBjG        ZGeBjH        ZHeBjI        ZIeBjJ        ZJeBjK        ZKeBjL        ZLeBjM        ZMeBjN        ZNeBjO        ZOeBjP        ZPeBjQ        ZQeBjR        ZReBjS        ZSeBjT        ZTejU        ZUejV        ZVdS )"    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                      d S N )argskwargss     G/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/txaio/tx.py_no_opr$   L   s    D    c                 :    t                               |            d S 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   sA    ;"v{$'>'>'  
 &>>r%   c                   F    e Zd ZddZddZd Zd ZddZd Zdd	Z	d
 Z
dS )r   Nc                     |s
J d             |||          | _         d| _        |r|                     |           n|                     t                     t
                              |            d S )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__g   s    ======vx9EEE).& 	,u%%%%
+++Tr%   c                     | S r   r    )r<   oselftypes      r#   __get__zLogger.__get__u   s	     r%   c                     d|v r@|d         t           v r1t                      }t                               |d                   |d<    | j        j        |g|R i | d S )Nlog_categoryformat)r'   tuplegetr5   emitr<   r=   r!   r"   s       r#   _logzLogger._log}   sm     V##~(>+(M(M77D*vn/EFFF8%1$111&11111r%   c                     t          j        | j                  t          j        |          k     rd S |dk    r | j        |i |S t	          j        |          } | j        |g|R i |S )Ntrace)r   indexr9   _tracer   lookupByNamerK   rJ   s       r#   rI   zLogger.emit   s~    DO,,z/?/F/FFFFG4;////%e,,ty0000000r%   Tc                 >    |                      |           || _        dS )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||k    rQt          | |d           }|t          k    r|t          | |t                     |dk    rt          | dt                     ct          | |d           t          d fv ro|dk    rt          | d| j                   n6t          | |t          | j        t          j
        |                               |dk    rt          | d| j                   || _        d S )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   s1    #(//$Z00 	@ 	@KS$v~~]""!$d33&((GOD$///7??D)V444 4t,,>>wgt{;;;;d '	83H3N3N O OQ Q Q wi???r%   c                 .     | j         j        |g|R i |S r   )r5   rV   )r<   rF   r!   kws       r#   rZ   zLogger._failure   s'    #t|#F8T888R888r%   c                 $     | j         |ddi| d S )Ntxaio_traceT)debug)r<   r!   r`   s      r#   rO   zLogger._trace   s&     	
D1d1b11111r%   )NNNNr   T)__name__
__module____qualname__r?   rC   rK   rI   r7   r8   rZ   rO   r    r%   r#   r   r   e   s              2 2 2	1 	1 	1. . . .     >9 9 9 92 2 2 2 2r%   r   c                 2   t          j                    j        }d|j        v r3|j        d         j        }d                    |j        |j                  }n/|j        d         }|j	        j
        dk    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k&!+$$S^S\BB		L,	9
** "C")*;;I%9V%' ' 'FMr%   c                   r    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dS )_LogObserverzQ
    Internal helper.

    An observer which formats events to a given file.
    )criticalrU   warnr   rc   rM   c                 J    || _         t          |          | _        d | _        d S r   )_filer   _encode_levels)r<   outs     r#   r?   z_LogObserver.__init__   s#    
2377r%   c                       j         2t          j        t                     fdt          D              _         | j         v S )Nc                 f    g | ]-}t          j        |          k    |d k     j        |         .S )rT   )r   rN   to_tx).0lvlr<   target_levels     r#   
<listcomp>z2_LogObserver._acceptable_level.<locals>.<listcomp>   sE       #C((L88SF]] 
3=J]]r%   )r|   r   rN   r9   )r<   r=   r   s   ` @r#   _acceptable_levelz_LogObserver._acceptable_level   sZ    <%+J77L    %  DL
 $$r%   c                 H   |d         d                     t          |d                   t          |d                   t          j                  }| j        r|                    d          }| j                            |           d S d|v r| 	                    |d                   r{d                     t          |d                   t          |          t          j                  }| j        r|                    d          }| j                            |           d S d S d S )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((JS!!!!! e##(>(>u[?Q(R(R#"))uZ011&&J 
 < -**V,,C
  %%%%% $###r%   N)re   rf   rg   __doc__r   rw   rU   rx   r   rc   r   r?   r   r   r    r%   r#   rv   rv      sx          % E  % % %& & & & &r%   rv   c                 `   |t           vr;t          d                    |d                    t                                         t          rdS da|at          t
                     | rt          |           ag }t          r|	                    t                     t          j        |           dS )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0000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dS )r/   c                     || _         d S r   )_config)r<   r,   s     r#   r?   z_TxApi.__init__6  s    r%   c                     	 d                     |j        j        j         |j                              S # t
          $ r d                     |          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  st    
	N$$
$-$$&&    	N 	N 	N@GGMMMMM	Ns   14 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    
 wr%   c                     	 t          j                    } |j        |           |                                S # t          $ r d                    |          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  sp    
	OADQ''''::<< 	O 	O 	OAHHNNNNN	Os   7: AANc                     |t           ur|t           urt          d          t          |          }|t           urt          ||           n|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  st    %%%|*C*CAB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          $ r}t          |          cY d }~S d }~ww xY wt	          |g|R i |S r   )r   r   	TypeErrorr   r   )r<   funr!   r"   es        r#   	as_futurez_TxApi.as_futurej  s    s## 	..%cc4&:6&:&:;;; . . .*1--------.S242226222s   & 
A	AA	A	c                 ,    t          |t                    S r   )
isinstancer   )r<   objs     r#   	is_futurez_TxApi.is_futures  s    #x(((r%   c                 d     t          |                                           j        ||g|R i |S r   )r   	_get_loop	callLater)r<   delayr   r!   r"   s        r#   
call_laterz_TxApi.call_laterv  s9    7|DNN,,--7sTTTTTVTTTr%   d   c                 D      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                  P                                                                      S r   )r   seconds)r<   s   r#   get_secondsz._TxApi.make_batched_timer.<locals>.get_seconds  s    >>##++---r%   c                 L                                      j        | |g|R i |S r   )r   r   )r   r   r!   r"   r<   s       r#   create_delayed_callz6_TxApi.make_batched_timer.<locals>.create_delayed_call  s2    -4>>##-eSJ4JJJ6JJJr%   g     @@)seconds_providerdelayed_call_creatorr   )r<   bucket_seconds
chunk_sizer   r   s   `    r#   make_batched_timerz_TxApi.make_batched_timery  sc    	. 	. 	. 	. 	.	K 	K 	K 	K 	K V#Z(!4
 
 
 	
r%   c                     |j         S r   )called)r<   futures     r#   	is_calledz_TxApi.is_called  s
    }r%   c                 0    |                     |           d S r   )callback)r<   r   r   s      r#   r   z_TxApi.resolve  s    r%   c                     |t                      }nIt          |t                    rt          |          }n$t          |t                    st	          d          |                    |           d S )Nz&reject requires a Failure or Exception)r   r   r   r   r.   errback)r<   r   rU   s      r#   r   z_TxApi.reject  sn    ="$$EEy)) 	MENNEEeW-- M"#KLLLur%   c                 .    |                                  d S r   )cancel)r<   r   r   s      r#   r   z_TxApi.cancel  s    r%   c                 @    |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%%%yyr%   c                 r    |J ||J |                     |           n|                    ||           |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  sV    
 !!!&&&g&&&& '222r%   Tc                 p    fd}t          t          |                    }t          ||d            |S )Nc                 v    g }| D ]2\  }}|                     |           |ss|                                 3|S r   )r   raiseException)resrtnokr   consume_exceptionss       r#   	completedz _TxApi.gather.<locals>.completed  sU    C" + +U

5!!! +"4 +((***Jr%   )consumeErrors)r   listr   )r<   futuresr   r   dls     `  r#   gatherz_TxApi.gather  sP    	 	 	 	 	 $w--7IJJJ 	b)T***	r%   c                 ~    t                      }|                                                     ||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  s6     JJ""5!*d;;;r%   c                 V    | j         j        ddlm} || j         _        | j         j        S )z!
        internal helper
        Nr   )reactor)r   r-   twisted.internetr   )r<   r   s     r#   r   z_TxApi._get_loop  s6     <$000000 'DL|  r%   r   )r   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  sz         N N N  
O 
O 
O $0|t 	 	 	 	  + + + +3 3 3) ) )U U U
 
 
 
6               
 
 
 
     *	 	 	
! 
! 
! 
! 
!r%   r/   c                 V    t           D ]}|j        s|                    |            | adS )zH
    Set the global log level on all loggers instantiated by txaio.
    N)r:   r6   r8   r9   )r=   items     r#   r   r     s<      ' '- 	'&&&JJJr%   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 H H H H H H H H 0 0 0 0 0 0 0 0 4 4 4 4 4 4 # # # # # # ? ? ? ? ? ? ? ? ? ? 5 5 5 5 5 5       ' ' ' ' ' '       G G G G G G G G G G B B B B B B B B B B 1 1 1 1 1 1 ' ' ' ' ' '	:sz  	7?
   w        	 	 	# # #	 	 	 	"Y2 Y2 Y2 Y2 Y2V Y2 Y2 Y2x 7T    ( 
,9& 9& 9& 9& 9&6 9& 9& 9&x V 1 1 1 1> vxxw! w! w! w! w!V w! w! w!t     vf~~ . 2 '@ *$: "6 "	"	$
!4 "	

				,*		
-'r%   