o
    >hE                     @   sR  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-Z.Z/da0e1 a2da3da4i Z5e6e e6e  dd Z7dd Z8d(ddZ9G dd de:Zde dfddZ;ee"G dd de:Z<e/dfd d!Z=e: Z>G d"d# d#e:Z?d$d% Z@d&d' ZAe?t+ZBeBjCZCeBjDZDeBjEZEeBjFZFeBjGZGeBjHZHeBjIZIeBjJZJeBjKZKeBjLZLeBjMZMeBjNZNeBjOZOeBjPZPeBjQZQeBjRZReBjSZSeBjTZTejUZUejVZVd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                  O   s   d S N )argskwargsr   r   h/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/txaio/tx.py_no_opL      r"   c                 C   s   t |  d S r   )_categoriesupdate)
categoriesr   r   r!   add_log_categoriesP      r'   c                 C   s,   | d urt jd ur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*   r   r   r!   with_configT   s   r-   c                   @   sT   e Zd ZdddZdddZdd Zdd	 ZdddZdd ZdddZ	dd Z
dS )r   Nc                 C   sH   |sJ d|||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loggerr/   r.   r   r   r!   __init__g   s   
zLogger.__init__c                 C   s   | S r   r   )r7   oselftyper   r   r!   __get__u   s   zLogger.__get__c                 O   sJ   d|v r|d t v rt }t |d |d< | jj|g|R i | d S )Nlog_categoryformat)r$   tuplegetr0   emitr7   r8   r   r    r   r   r!   _log}   s   zLogger._logc                 O   sT   t | jt |k rd S |dkr| j|i |S t|}| j|g|R i |S )Ntrace)r   indexr4   _tracer   lookupByNamerD   rC   r   r   r!   rB      s   
zLogger.emitTc                 C   s   |  | || _dS )zt
        Set the log level. If keep is True, then it will not change along with
        global log changes.
        N)r3   r1   )r7   r8   keepr   r   r!   r2      s   

zLogger.set_log_levelc              	   C   s   t |}tt D ]Z\}}|dkrq	||kr5t| |d }|tkr$|d u r*t| |t |dkr4t| dt q	t| |d td fv rc|dkrKt| d| j nt| |t| jt	
| |dkrct| d| j q	|| _d S )NnoneerrorfailurerE   )r   rF   	enumerategetattrr"   setattrrG   r   rD   r   rH   _failurer4   )r7   r8   desired_indexidxnamecurrentr   r   r!   r3      s*   

zLogger._set_log_levelc                 O   s   | j j|g|R i |S r   )r0   rL   )r7   r?   r   kwr   r   r!   rP      s   zLogger._failurec                 O   s   | j |ddi| d S )Ntxaio_traceT)debug)r7   r   rU   r   r   r!   rG      s   zLogger._trace)NNNNr   T)__name__
__module____qualname__r:   r=   rD   rB   r2   r3   rP   rG   r   r   r   r!   r   e   s    

	

r   c                 C   sl   t  j}d|jv r|jd j}d|j|j}n|jd }|j	j
dkr,|d |j	j
 }t| |||d}|S )Nr7   z{0}.{1}rY   z<module>.)r8   r/   r9   r.   )inspectcurrentframef_backf_locals	__class__r?   rZ   rY   	f_globalsf_codeco_namer   )r8   r9   r.   cfclsr/   r   r   r!   make_logger   s   


rg   c                   @   sF   e Zd ZdZejejejejej	ej	dZ
dd Zdd Zdd Zd	S )
_LogObserverzQ
    Internal helper.

    An observer which formats events to a given file.
    )criticalrK   warnr   rW   rE   c                 C   s   || _ t|| _d | _d S r   )_filer   _encode_levels)r7   outr   r   r!   r:      s   

z_LogObserver.__init__c                    s4    j d u rtt fddtD  _ | j v S )Nc                    s,   g | ]}t |kr|d kr j| qS )rJ   )r   rF   to_tx).0lvlr7   target_levelr   r!   
<listcomp>   s
    z2_LogObserver._acceptable_level.<locals>.<listcomp>)rm   r   rF   r4   )r7   r8   r   rr   r!   _acceptable_level   s   


z_LogObserver._acceptable_levelc                 C   s   |d d u r&d t|d t|d tj}| jr|d}| j| d S d|v rO| 	|d rQd t|d t
|tj}| jrG|d}| j| d S d S d S )N
log_formatz
{0} {1}{2}log_timelog_failureutf8	log_level)r?   r   failure_format_tracebackoslineseprl   encoderk   writeru   r   )r7   eventmsgr   r   r!   __call__   s&   




z_LogObserver.__call__N)rY   rZ   r[   __doc__r   ri   rK   rj   r   rW   ro   r:   ru   r   r   r   r   r!   rh      s    	
rh   c                 C   sb   |t vrtd|dt trdS da|att | r!t| ag }tr*|	t t
| 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+   r?   join_started_loggingr4   set_global_log_levelrh   	_observerappendr   beginLoggingTo)rn   r8   
_observersr   r   r!   start_logging  s"   

r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zeed	fd
dZdd Z	d,ddZ
dd Zdd Zdd Zd-ddZdd Zd,ddZd,ddZd,dd Zd,d!d"Zd#d$ Zd.d&d'Zd(d) Zd*d+ Zd	S )/r,   c                 C   s
   || _ d S r   )_config)r7   r)   r   r   r!   r:   6     
z_TxApi.__init__c                 C   s6   zd |jjj| W S  ty   d | Y S w )z_
        :param fail: must be an IFailedFuture
        returns a unicode error-message
        z{0}: {1}z+Failed to produce failure message for "{0}")r?   valuera   rY   getErrorMessage	Exceptionr7   r	   r   r   r!   failure_message9  s   z_TxApi.failure_messagec                 C      |j S )z\
        :param fail: must be an IFailedFuture
        returns a traceback instance
        )tbr   r   r   r!   failure_tracebackF  s   z_TxApi.failure_tracebackc                 C   s<   zt  }|j|d | W S  ty   d| Y S w )zP
        :param fail: must be an IFailedFuture
        returns a string
        )filez,Failed to format failure traceback for '{0}')ioStringIOprintTracebackgetvaluer   r?   )r7   r	   fr   r   r!   r{   M  s   
z_TxApi.failure_format_tracebackNc                 C   sN   |t ur|t urtdt|d}|t urt|| |S |t ur%t|| |S )Nz"Cannot have both result and error.)	canceller)_unspecified
ValueErrorr   resolvereject)r7   resultrK   r   r   r   r   r!   create_futureY  s   


z_TxApi.create_futurec                 C   s   t |S r   )r   )r7   r   r   r   r!   create_future_successd  s   z_TxApi.create_future_successc                 C   s   t t|S r   )r	   create_failure)r7   rK   r   r   r!   create_future_errorg     z_TxApi.create_future_errorc              
   O   s`   t |r%z
t||i |W S  ty$ } z
t|W  Y d }~S d }~ww t|g|R i |S r   )r   r   	TypeErrorr   r   )r7   funr   r    er   r   r!   	as_futurej  s   z_TxApi.as_futurec                 C   s
   t |tS r   )
isinstancer   )r7   objr   r   r!   	is_futures  r   z_TxApi.is_futurec                 O   s"   t |  j||g|R i |S r   )r
   	_get_loop	callLater)r7   delayr   r   r    r   r   r!   
call_laterv  s   "z_TxApi.call_laterd   c                    s,    fdd} fdd}t |d |||d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                      s       S r   )r   secondsr   r7   r   r!   get_seconds  r   z._TxApi.make_batched_timer.<locals>.get_secondsc                    s      j| |g|R i |S r   )r   r   )r   r   r   r    r   r   r!   create_delayed_call  s   z6_TxApi.make_batched_timer.<locals>.create_delayed_callg     @@)seconds_providerdelayed_call_creatorr   )r7   bucket_seconds
chunk_sizer   r   r   r   r!   make_batched_timery  s   z_TxApi.make_batched_timerc                 C   r   r   )called)r7   futurer   r   r!   	is_called  s   z_TxApi.is_calledc                 C   s   | | d S r   )callback)r7   r   r   r   r   r!   r     r(   z_TxApi.resolvec                 C   sD   |d u rt  }nt|trt|}n	t|tstd|| d S )Nz&reject requires a Failure or Exception)r   r   r   r   r+   errback)r7   r   rK   r   r   r!   r     s   


z_TxApi.rejectc                 C   s   |   d S r   )cancel)r7   r   r   r   r   r!   r     r   z_TxApi.cancelc                 C   s   |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   )r7   	exceptionr   r   r!   r     s   z_TxApi.create_failurec                 C   s>   |dusJ |du r|dusJ | | |S ||| |S )z]
        callback or errback may be None, but at least one must be
        non-None.
        N)
addErrbackaddCallbacks)r7   r   r   r   r   r   r!   add_callbacks  s   
z_TxApi.add_callbacksTc                    s,    fdd}t t| d}t||d  |S )Nc                    s0   g }| D ]\}}| | |s s|  q|S r   )r   raiseException)resrtnokr   consume_exceptionsr   r!   	completed  s   
z _TxApi.gather.<locals>.completed)consumeErrors)r   listr   )r7   futuresr   r   dlr   r   r!   gather  s   z_TxApi.gatherc                 C   s   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   )r7   r   dr   r   r!   sleep  s   z_TxApi.sleepc                 C   s(   | j jdu rddlm} || j _| j jS )z!
        internal helper
        Nr   )reactor)r   r*   twisted.internetr   )r7   r   r   r   r!   r     s   z_TxApi._get_loopr   )r   rX   )rY   rZ   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!   r,   4  s*    
	






r,   c                 C   s"   t D ]
}|js||  q| adS )zH
    Set the global log level on all loggers instantiated by txaio.
    N)r5   r1   r3   r4   )r8   itemr   r   r!   r     s
   
r   c                   C   s   t S r   )r4   r   r   r   r!   get_global_log_level  r#   r   r   )Wr   r|   sysweakrefr]   	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   WeakSetr5   r4   r   r$   registerr"   r'   r-   objectrg   rh   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   r!   <module>   s   


\< ;
