
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \+  ã               @   s®  d ddg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
lmZ ejd Zejj o eejjdƒƒZyejZejZW n ek
rÎ   dZdZY nX y
ejZW n ek
rö   dd„ ZY nX yddlmZ m!Z" W n e#k
�r*   d Z Z"Y nX dd„ Z$e$ƒ Z%[$dd„ Z&G dd„ dƒZ'dd „ Ze(ƒ Z)dd„ Zej*e'fZ+e dk	�r†e+e f7 Z+edk	�ršefe+ Z+dd„ Z,dd„ Z-dS )Ú	coroutineÚiscoroutinefunctionÚiscoroutineé    Né   )Úcompat)Ú	constants)Úevents)Úbase_futures)ÚloggerZ
YIELD_FROMZPYTHONASYNCIODEBUGc             C   s   dS )NF© )Úfuncr   r   ú*/usr/lib64/python3.6/asyncio/coroutines.pyÚ<lambda>/   s    r   )Ú	CoroutineÚ	Awaitablec              C   sF   G dd„ dƒ} dd„ }d}| ƒ }||ƒ}t |ƒ |j|ƒ |j|fkS )	Nc               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z!has_yield_from_bug.<locals>.MyGenc             S   s
   d | _ d S )N)Ú	send_args)Úselfr   r   r   Ú__init__;   s    z*has_yield_from_bug.<locals>.MyGen.__init__c             S   s   | S )Nr   )r   r   r   r   Ú__iter__=   s    z*has_yield_from_bug.<locals>.MyGen.__iter__c             S   s   dS )Né*   r   )r   r   r   r   Ú__next__?   s    z*has_yield_from_bug.<locals>.MyGen.__next__c             W   s
   || _ d S )N)r   )r   Zwhatr   r   r   ÚsendA   s    z&has_yield_from_bug.<locals>.MyGen.sendN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   ÚMyGen:   s   r   c             s   s   | E d H  d S )Nr   )Úgenr   r   r   Úyield_from_genD   s    z*has_yield_from_bug.<locals>.yield_from_genr   é   é   )r   r   r   )Únextr   r   )r   r   Úvaluer   Úcoror   r   r   Úhas_yield_from_bug9   s    

r#   c             C   s
   t | d ƒS )N)ÚCoroWrapper)r   r   r   r   Údebug_wrapperP   s    r%   c               @   sÌ   e Zd Zd%dd„Zdd„ Zdd„ Zdd	„ Zer8d
d„ Zndd„ Zd&dd„Z	dd„ Z
edd„ ƒZedd„ ƒZedd„ ƒZejrÀdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZd#d$„ ZdS )'r$   Nc             C   s>   || _ || _tjtjdƒƒ| _t|dd ƒ| _t|dd ƒ| _	d S )Nr   r   r   )
r   r   r   Úextract_stackÚsysÚ	_getframeÚ_source_tracebackÚgetattrr   r   )r   r   r   r   r   r   r   [   s
    zCoroWrapper.__init__c             C   s@   t | ƒ}| jr0| jd }|d|d |d f 7 }d| jj|f S )Nr   z, created at %s:%sr   z<%s %s>éÿÿÿÿ)Ú_format_coroutiner)   Ú	__class__r   )r   Ú	coro_reprÚframer   r   r   Ú__repr__c   s
    
zCoroWrapper.__repr__c             C   s   | S )Nr   )r   r   r   r   r   j   s    zCoroWrapper.__iter__c             C   s   | j jd ƒS )N)r   r   )r   r   r   r   r   m   s    zCoroWrapper.__next__c             G   s4   t jƒ }|j}|jj|j tkr(|d }| jj|ƒS )Nr   )	r'   r(   Úf_backÚf_codeÚco_codeÚf_lastiÚ_YIELD_FROMr   r   )r   r!   r/   Zcallerr   r   r   r   u   s
    zCoroWrapper.sendc             C   s   | j j|ƒS )N)r   r   )r   r!   r   r   r   r   }   s    c             C   s   | j j|||ƒS )N)r   Úthrow)r   Útyper!   Ú	tracebackr   r   r   r6   €   s    zCoroWrapper.throwc             C   s
   | j jƒ S )N)r   Úclose)r   r   r   r   r9   ƒ   s    zCoroWrapper.closec             C   s   | j jS )N)r   Úgi_frame)r   r   r   r   r:   †   s    zCoroWrapper.gi_framec             C   s   | j jS )N)r   Ú
gi_running)r   r   r   r   r;   Š   s    zCoroWrapper.gi_runningc             C   s   | j jS )N)r   Úgi_code)r   r   r   r   r<   Ž   s    zCoroWrapper.gi_codec             C   s,   t | jdd ƒ}|d k	r(tdj| j|ƒƒ‚| S )NÚcr_awaitz;Cannot await on coroutine {!r} while it's awaiting for {!r})r*   r   ÚRuntimeErrorÚformat)r   r=   r   r   r   Ú	__await__”   s    zCoroWrapper.__await__c             C   s   | j jS )N)r   Úgi_yieldfrom)r   r   r   r   rA   œ   s    zCoroWrapper.gi_yieldfromc             C   s   | j jS )N)r   r=   )r   r   r   r   r=       s    zCoroWrapper.cr_awaitc             C   s   | j jS )N)r   Ú
cr_running)r   r   r   r   rB   ¤   s    zCoroWrapper.cr_runningc             C   s   | j jS )N)r   Úcr_code)r   r   r   r   rC   ¨   s    zCoroWrapper.cr_codec             C   s   | j jS )N)r   Úcr_frame)r   r   r   r   rD   ¬   s    zCoroWrapper.cr_framec             C   s’   t | dd ƒ}t |dd ƒ}|d kr,t |dd ƒ}|d k	rŽ|jd
krŽd|  }t | df ƒ}|r„djtj|ƒƒ}|dtj› d	�7 }||jƒ 7 }tj	|ƒ d S )Nr   r:   rD   r   z%r was never yielded fromr)   Ú zB
Coroutine object created at (most recent call last, truncated to z last lines):
r+   )
r*   r4   Újoinr8   Úformat_listr   ZDEBUG_STACK_DEPTHÚrstripr
   Úerror)r   r   r/   ÚmsgÚtbr   r   r   Ú__del__°   s    zCoroWrapper.__del__)N)NN)r   r   r   r   r0   r   r   Ú_YIELD_FROM_BUGr   r6   r9   Úpropertyr:   r;   r<   r   ZPY35r@   rA   r=   rB   rC   rD   rL   r   r   r   r   r$   X   s(   


r$   c                sp   t ˆƒrˆS tjˆƒrˆ‰ ntjˆƒ‡fdd„ƒ‰ tsNtdkrDˆ }qftˆ ƒ}ntjˆƒ‡ ‡fdd„ƒ}t|_|S )z„Decorator to mark coroutines.

    If the coroutine is not yielded from before it is destroyed,
    an error message is logged.
    c              ?   sv   ˆ | |Ž}t j|ƒs(tj|ƒs(t|tƒr4|E d H }n>td k	rry
|j}W n tk
rZ   Y nX t|tƒrr|ƒ E d H }|S )N)	r	   ZisfutureÚinspectZisgeneratorÚ
isinstancer$   Ú_AwaitableABCr@   ÚAttributeError)ÚargsÚkwÚresZ
await_meth)r   r   r   r"   Ò   s    



zcoroutine.<locals>.coroNc                 s@   t ˆ | |Žˆd�}|jr |jd= tˆdd ƒ|_tˆdd ƒ|_|S )N)r   r   r   r   r+   )r$   r)   r*   r   r   )rS   ÚkwdsÚw)r"   r   r   r   Úwrapperê   s    zcoroutine.<locals>.wrapper)Ú_inspect_iscoroutinefunctionrO   ÚisgeneratorfunctionÚ	functoolsÚwrapsÚ_DEBUGÚ_types_coroutineÚ_is_coroutine)r   rX   r   )r"   r   r   r   Â   s    

c             C   s   t | ddƒtkpt| ƒS )z6Return True if func is a decorated coroutine function.r_   N)r*   r_   rY   )r   r   r   r   r   ÿ   s    c             C   s
   t | tƒS )z)Return True if obj is a coroutine object.)rP   Ú_COROUTINE_TYPES)Úobjr   r   r   r     s    c       
      C   s  t | dƒ r’t | dƒ r’t| dt| dt| ƒjƒƒ}dj|ƒ}d}y
| j}W n4 tk
r~   y
| j}W n tk
rx   Y nX Y nX |rŽdj|ƒS |S d }t| t	ƒrÀ| j
}| j}|d k	rÄdj|ƒ}n| }|d krÚtj|f i ƒ}d }t | dƒrö| jrö| j}nt | dƒ�r| j�r| j}d }t | dƒ�r0| j�r0| j}nt | d	ƒ�rJ| j�rJ| j}d
}|�rb|j�rb|j}d}|}t| t	ƒ�rÚtj| j
ƒ �rÚ| j
d k	�rÚtj| j
ƒ}	|	d k	�r°|	\}}|d k�rÊd|||f }nd|||f }n:|d k	�rú|j}d|||f }n|�r|j}d|||f }|S )NrC   r<   r   r   z{}()Fz
{} runningrD   r:   z<empty co_filename>r   z%s done, defined at %s:%sz%s running, defined at %s:%sz%s running at %s:%s)Úhasattrr*   r7   r   r?   rB   rR   r;   rP   r$   r   r   r   Z_format_callbackrC   r<   rD   r:   Úco_filenamerO   rZ   Z_get_function_sourceÚf_linenoÚco_firstlineno)
r"   Z	coro_nameZrunningr   Z	coro_codeZ
coro_frameÚfilenameÚlinenor.   Úsourcer   r   r   r,     sx    







r,   ).Ú__all__r[   rO   ZopcodeÚosr'   r8   ÚtypesrE   r   r   r   r	   Úlogr
   Zopmapr5   ÚflagsÚignore_environmentÚboolÚenvironÚgetr]   r   r^   ÚCoroutineTypeZ_types_CoroutineTyperR   r   rY   Úcollections.abcr   Z_CoroutineABCr   rQ   ÚImportErrorr#   rM   r%   r$   Úobjectr_   ÚGeneratorTyper`   r   r,   r   r   r   r   Ú<module>   sZ   




j:




