a
    ӗa]"                     @   s   d Z ddlZddlZddlZ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 ddlmZ dd	 Ze ZG d
d dZdd Ze Zdd ZejejejjefZe Zdd Zdd ZdS ))	coroutineiscoroutinefunctioniscoroutine    N   )base_futures)	constants)format_helpers)loggerc                   C   s"   t jjp t jj o ttjdS )NZPYTHONASYNCIODEBUG)sysflagsdev_modeignore_environmentboolosenvironget r   r   5/home/manager/Python-3.9.10/Lib/asyncio/coroutines.py_is_debug_mode   s    r   c                   @   s   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdddZdd Z	e
dd Ze
dd Ze
dd Zdd Ze
dd Zdd ZdS )CoroWrapperNc                 C   sZ   t |st |sJ ||| _|| _ttd| _	t
|dd | _t
|dd | _d S )Nr   __name____qualname__)inspectisgeneratorr   genfuncr   extract_stackr
   	_getframe_source_tracebackgetattrr   r   )selfr   r   r   r   r   __init__'   s    zCoroWrapper.__init__c                 C   sJ   t | }| jr4| jd }|d|d  d|d  7 }d| jj d| dS )	Nz, created at r   :r   < >)_format_coroutiner   	__class__r   )r    	coro_reprframer   r   r   __repr__/   s
    
zCoroWrapper.__repr__c                 C   s   | S Nr   r    r   r   r   __iter__7   s    zCoroWrapper.__iter__c                 C   s   | j d S r,   r   sendr-   r   r   r   __next__:   s    zCoroWrapper.__next__c                 C   s   | j |S r,   r/   )r    valuer   r   r   r0   =   s    zCoroWrapper.sendc                 C   s   | j |||S r,   )r   throw)r    typer2   	tracebackr   r   r   r3   @   s    zCoroWrapper.throwc                 C   s
   | j  S r,   )r   closer-   r   r   r   r6   C   s    zCoroWrapper.closec                 C   s   | j jS r,   )r   gi_framer-   r   r   r   r7   F   s    zCoroWrapper.gi_framec                 C   s   | j jS r,   )r   
gi_runningr-   r   r   r   r8   J   s    zCoroWrapper.gi_runningc                 C   s   | j jS r,   )r   gi_coder-   r   r   r   r9   N   s    zCoroWrapper.gi_codec                 C   s   | S r,   r   r-   r   r   r   	__await__R   s    zCoroWrapper.__await__c                 C   s   | j jS r,   )r   gi_yieldfromr-   r   r   r   r;   U   s    zCoroWrapper.gi_yieldfromc                 C   s   t | dd }t |dd }|d ur||jdkr|| d}t | dd}|rrdt|}|dtj d	7 }|| 7 }t	| d S )
Nr   r7   r"   z was never yielded fromr   r    zB
Coroutine object created at (most recent call last, truncated to z last lines):
)
r   f_lastijoinr5   format_listr   DEBUG_STACK_DEPTHrstripr	   error)r    r   r*   msgtbr   r   r   __del__Y   s    

zCoroWrapper.__del__)N)NN)r   
__module__r   r!   r+   r.   r1   r0   r3   r6   propertyr7   r8   r9   r:   r;   rE   r   r   r   r   r   $   s"   





r   c                    sz   t jdtdd trS tr. ntfdd t	  t
sX }nt fdd}t|_|S )zDecorator to mark coroutines.

    If the coroutine is not yielded from before it is destroyed,
    an error message is logged.
    zN"@coroutine" decorator is deprecated since Python 3.8, use "async def" instead   )
stacklevelc                  ?   st    | i |}t |s,t|s,t|tr8|E d H }n8z
|j}W n tyT   Y n0 t|tj	j
rp| E d H }|S r,   )r   isfuturer   r   
isinstancer   r:   AttributeErrorcollectionsabc	Awaitable)argskwresZ
await_methr   r   r   coroz   s    
zcoroutine.<locals>.coroc                     sD   t  | i |d}|jr$|jd= tdd |_tdd |_|S )NrS   r"   r   r   )r   r   r   r   r   )rP   kwdswrT   r   r   r   wrapper   s    zcoroutine.<locals>.wrapper)warningswarnDeprecationWarningr   r   isgeneratorfunction	functoolswrapstypesr   _DEBUG_is_coroutine)r   rX   r   rW   r   r   i   s"    


r   c                 C   s   t | pt| ddtu S )z6Return True if func is a decorated coroutine function.ra   N)r   r   r   ra   rS   r   r   r   r      s    
r   c                 C   s@   t | tv rdS t| tr8ttdk r4tt |  dS dS dS )z)Return True if obj is a coroutine object.Td   FN)r4   _iscoroutine_typecacherK   _COROUTINE_TYPESlenadd)objr   r   r   r      s    
r   c           
         st  t | sJ t| t  fdd}dd }d }t| drF| jrF| j}nt| dr\| jr\| j}|| }|s~|| rz| dS |S d }t| dr| jr| j}nt| d	r| jr| j}|jpd
}d} r0| j	d ur0t
| j	s0t| j	}|d ur|\}}|d u r| d| d| }	n| d| d| }	n@|d urV|j}| d| d| }	n|j}| d| d| }	|	S )Nc                    s`    rt | jdi S t| dr,| jr,| j}n*t| drD| jrD| j}ndt| j d}| dS )Nr   r   r   r$   z without __name__>z())r   Z_format_callbackr   hasattrr   r   r4   )rT   	coro_nameZis_corowrapperr   r   get_name   s    z#_format_coroutine.<locals>.get_namec                 S   sD   z| j W S  ty>   z| jW  Y S  ty8   Y Y dS 0 Y n0 d S )NF)
cr_runningrL   r8   )rT   r   r   r   
is_running   s    z%_format_coroutine.<locals>.is_runningcr_coder9   z runningr7   cr_framez<empty co_filename>r   z done, defined at r#   z running, defined at z running at )r   rK   r   rh   rn   r9   r7   ro   co_filenamer   r   r\   r   Z_get_function_sourcef_linenoco_firstlineno)
rT   rk   rm   Z	coro_coderi   Z
coro_framefilenamelinenosourcer)   r   rj   r   r'      sL    
	




r'   ) __all__collections.abcrM   r]   r   r   r
   r5   r_   rY   r<   r   r   r   logr	   r   r`   r   r   objectra   r   CoroutineTypeGeneratorTyperN   	Coroutinerd   setrc   r   r'   r   r   r   r   <module>   s0   E8