U
e5d]" � @ s� d Z ddlZddlZddlZddlZddlZddlZddlZddl Z ddl
mZ ddl
mZ ddl
m
Z
ddlmZ dd � Ze� ZG d
d� d�Zdd
� Ze� Zdd� ZejejejjefZe� Zdd� Zdd� ZdS ))� coroutine�iscoroutinefunction�iscoroutine� N� )�base_futures)� constants)�format_helpers)�loggerc C s" t jjp t jj o ttj�d��S )NZPYTHONASYNCIODEBUG)�sys�flags�dev_mode�ignore_environment�bool�os�environ�get� r r �*/usr/lib64/python3.8/asyncio/coroutines.py�_is_debug_mode s �r c @ s� e Zd Zddd�Zdd� Zdd� Zdd � Zd
d� Zddd
�Zdd� Z e
dd� �Ze
dd� �Ze
dd� �Z
dd� Ze
dd� �Zdd� ZdS )�CoroWrapperNc C s> || _ || _t�t�d��| _t|dd �| _t|dd �| _ d S )Nr �__name__�__qualname__)
�gen�funcr �
extract_stackr
� _getframe�_source_traceback�getattrr r )�selfr r r r r �__init__' s
zCoroWrapper.__init__c C sJ t | �}| jr4| jd }|d|d � d|d � �7 }d| jj� d|� d�S ) N�����z
, created at r �:r �<� �>)�_format_coroutiner � __class__r )r � coro_repr�framer r r �__repr__/ s
zCoroWrapper.__repr__c C s | S �Nr �r r r r �__iter__7 s zCoroWrapper.__iter__c C s | j �d �S r* �r �sendr+ r r r �__next__: s zCoroWrapper.__next__c C s | j �|�S r* r- )r �valuer r r r. = s zCoroWrapper.sendc C s | j �|||�S r* )r �throw)r �typer0 � tracebackr r r r1 @ s zCoroWrapper.throwc C s
| j �� S r* )r �closer+ r r r r4 C s zCoroWrapper.closec C s | j jS r* )r �gi_framer+ r r r r5 F s zCoroWrapper.gi_framec C s | j jS r* )r �
gi_runningr+ r r r r6 J s zCoroWrapper.gi_runningc C s | j jS r* )r �gi_coder+ r r r r7 N s zCoroWrapper.gi_codec C s | S r* r r+ r r r � __await__R s zCoroWrapper.__await__c C s | j jS r* )r �gi_yieldfromr+ r r r r9 U s zCoroWrapper.gi_yieldfromc C s� t | dd �}t |dd �}|d k r||jdkr|| �d�}t | dd�}|rrd�t�|��}|dtj� d �7 }||�� 7 }t� |� d S )
Nr r5 r z was never yielded fromr r � zB
Coroutine object created at (most recent call last, truncated to z last lines):
)
r �f_lasti�joinr3 �format_listr ZDEBUG_STACK_DEPTH�rstripr �error)r r r( �msg�tbr r r �__del__Y s
zCoroWrapper.__del__)N)NN)r �
__module__r r r) r, r/ r. r1 r4 �propertyr5 r6 r7 r8 r9 rB r r r r r $ s"
r c sz t jdtdd� t���r�S t���r.�� nt����fdd��� t� � �� t
sX� }nt���� �fdd��}t|_|S )z�Decorator 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 ? sr � | |�}t �|�s(t�|�s(t|t�r4|E d H }n:z
|j}W n tk
rR Y nX t|tj j
�rn|� E d H }|S r* )r Zisfuture�inspectZisgenerator�
isinstancer r8 �AttributeError�collections�abc� Awaitable)�args�kw�resZ
await_meth�r r r �coroz s
�
zcoroutine.