
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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   sZ   t j|ƒst j|ƒst|ƒ‚|| _|| _tjtj	dƒƒ| _
t|dd ƒ| _t|dd ƒ| _d S )Nr   r   r   )ÚinspectÚisgeneratorr   ÚAssertionErrorr   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   sB   t jƒ }|j}|jdkst‚|jj|j tkr6|d }| jj	|ƒS )Nr   )
r*   r+   Úf_backÚf_lastir(   Úf_codeÚco_codeÚ_YIELD_FROMr   r   )r   r!   r2   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   r9   €   s    zCoroWrapper.throwc             C   s
   | j jƒ S )N)r   Úclose)r   r   r   r   r<   ƒ   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   rD   œ   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   rE   ¤   s    zCoroWrapper.cr_runningc             C   s   | j jS )N)r   Úcr_code)r   r   r   r   rF   ¨   s    zCoroWrapper.cr_codec             C   s   | j jS )N)r   Úcr_frame)r   r   r   r   rG   ¬   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=   rG   r   z%r was never yielded fromr,   Ú zB
Coroutine object created at (most recent call last, truncated to z last lines):
r.   )
r-   r5   Újoinr;   Úformat_listr   ZDEBUG_STACK_DEPTHÚrstripr
   Úerror)r   r   r2   ÚmsgÚtbr   r   r   Ú__del__°   s    zCoroWrapper.__del__)N)NN)r   r   r   r   r3   r   r   Ú_YIELD_FROM_BUGr   r9   r<   Úpropertyr=   r>   r?   r   ZPY35rC   rD   r@   rE   rF   rG   rO   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isfuturer&   r'   Ú
isinstancer$   Ú_AwaitableABCrC   Ú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   )rU   ÚkwdsÚw)r"   r   r   r   Úwrapperê   s    zcoroutine.<locals>.wrapper)Ú_inspect_iscoroutinefunctionr&   ÚisgeneratorfunctionÚ	functoolsÚwrapsÚ_DEBUGÚ_types_coroutineÚ_is_coroutine)r   rZ   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.ra   N)r-   ra   r[   )r   r   r   r   r   ÿ   s    c             C   s
   t | tƒS )z)Return True if obj is a coroutine object.)rR   Ú_COROUTINE_TYPES)Úobjr   r   r   r     s    c       
      C   s&  t | ƒst‚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
r„   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ƒoø| j�r| j}nt| dƒ�r| j�r| j}d }t| dƒ�r>| j�r>| j}nt| d	ƒ�rX| j�rX| j}d
}|�rp|j�rp|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 )NrF   r?   r   r   z{}()Fz
{} runningrG   r=   z<empty co_filename>r   z%s done, defined at %s:%sz%s running, defined at %s:%sz%s running at %s:%s)r   r(   Úhasattrr-   r:   r   rB   rE   rT   r>   rR   r$   r   r   r   Z_format_callbackrF   r?   rG   r=   Úco_filenamer&   r\   Z_get_function_sourceÚf_linenoÚco_firstlineno)
r"   Z	coro_nameZrunningr   Z	coro_codeZ
coro_frameÚfilenameÚlinenor1   Úsourcer   r   r   r/     sz    







r/   ).Ú__all__r]   r&   ZopcodeÚosr*   r;   ÚtypesrH   r   r   r   r	   Úlogr
   Zopmapr8   ÚflagsÚignore_environmentÚboolÚenvironÚgetr_   r   r`   ÚCoroutineTypeZ_types_CoroutineTyperT   r   r[   Úcollections.abcr   Z_CoroutineABCr   rS   ÚImportErrorr#   rP   r%   r$   Úobjectra   ÚGeneratorTyperb   r   r/   r   r   r   r   Ú<module>   sZ   




j:




