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

  \>  ã               @   s  d dddddg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	 ej
Z
ejZejZejZejZejZejZejd ZG dd„ dƒZG dd„ dƒZeZdd„ Zdd„ Zdd„ Zdd„ Zddœdd„ZyddlZW n ek
rö   Y nX ej ZZdS )ÚCancelledErrorÚTimeoutErrorÚInvalidStateErrorÚFutureÚwrap_futureÚisfutureé    Né   )Úbase_futures)Úcompat)Úeventsc               @   s0   e Zd ZdZdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú_TracebackLoggerÚloopÚsource_tracebackÚexcÚtbc             C   s    |j | _|j| _|| _d | _d S )N)Ú_loopr   Ú_source_tracebackr   r   r   )ÚselfÚfuturer   © r   ú'/usr/lib64/python3.6/asyncio/futures.pyÚ__init__R   s    z_TracebackLogger.__init__c             C   s,   | j }|d k	r(d | _ tj|j||jƒ| _d S )N)r   Ú	tracebackÚformat_exceptionÚ	__class__Ú__traceback__r   )r   r   r   r   r   ÚactivateX   s
    
z_TracebackLogger.activatec             C   s   d | _ d | _d S )N)r   r   )r   r   r   r   Úclear_   s    z_TracebackLogger.clearc             C   sb   | j r^d}| jr:djtj| jƒƒ}|d7 }|d|jƒ  7 }|dj| j ƒjƒ 7 }| jjd|iƒ d S )Nz*Future/Task exception was never retrieved
Ú z0Future/Task created at (most recent call last):
z%s
Úmessage)r   r   Újoinr   Úformat_listÚrstripr   Úcall_exception_handler)r   ÚmsgÚsrcr   r   r   Ú__del__c   s    z_TracebackLogger.__del__N)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r&   r   r   r   r   r      s
   2r   c               @   s´   e Zd ZeZdZdZdZdZdZ	dZ
ddœdd„ZejZdd„ ZejrNdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejr°eZdS ) r   NF)r   c            C   s@   |d krt jƒ | _n|| _g | _| jjƒ r<t jtjdƒƒ| _d S )Nr   )	r   Úget_event_loopr   Ú
_callbacksZ	get_debugÚextract_stackÚsysÚ	_getframer   )r   r   r   r   r   r   ”   s    
zFuture.__init__c             C   s   d| j jdj| jƒ ƒf S )Nz<%s %s>ú )r   r'   r    Ú
_repr_info)r   r   r   r   Ú__repr__¥   s    zFuture.__repr__c             C   sD   | j s
d S | j}d| jj || dœ}| jr4| j|d< | jj|ƒ d S )Nz %s exception was never retrieved)r   Ú	exceptionr   r   )Ú_log_tracebackÚ
_exceptionr   r'   r   r   r#   )r   r   Úcontextr   r   r   r&   ¬   s    
zFuture.__del__c             C   s&   d| _ | jtkrdS t| _| jƒ  dS )NFT)r4   Ú_stateÚ_PENDINGÚ
_CANCELLEDÚ_schedule_callbacks)r   r   r   r   Úcancel¼   s    
zFuture.cancelc             C   sD   | j d d … }|sd S g | j d d …< x|D ]}| jj|| ƒ q*W d S )N)r,   r   Ú	call_soon)r   Z	callbacksÚcallbackr   r   r   r:   Ê   s    
zFuture._schedule_callbacksc             C   s
   | j tkS )N)r7   r9   )r   r   r   r   Ú	cancelledØ   s    zFuture.cancelledc             C   s
   | j tkS )N)r7   r8   )r   r   r   r   ÚdoneÞ   s    zFuture.donec             C   s<   | j tkrt‚| j tkr tdƒ‚d| _| jd k	r6| j‚| jS )NzResult is not ready.F)r7   r9   r   Ú	_FINISHEDr   r4   r5   Ú_result)r   r   r   r   Úresultæ   s    


zFuture.resultc             C   s,   | j tkrt‚| j tkr tdƒ‚d| _| jS )NzException is not set.F)r7   r9   r   r@   r   r4   r5   )r   r   r   r   r3   ö   s    

zFuture.exceptionc             C   s*   | j tkr| jj|| ƒ n| jj|ƒ d S )N)r7   r8   r   r<   r,   Úappend)r   Úfnr   r   r   Úadd_done_callback  s    
zFuture.add_done_callbackc                s<   ‡ fdd„| j D ƒ}t| j ƒt|ƒ }|r8|| j d d …< |S )Nc                s   g | ]}|ˆ kr|‘qS r   r   )Ú.0Úf)rD   r   r   ú
<listcomp>  s    z/Future.remove_done_callback.<locals>.<listcomp>)r,   Úlen)r   rD   Zfiltered_callbacksZremoved_countr   )rD   r   Úremove_done_callback  s
    zFuture.remove_done_callbackc             C   s4   | j tkrtdj| j | ƒƒ‚|| _t| _ | jƒ  d S )Nz{}: {!r})r7   r8   r   ÚformatrA   r@   r:   )r   rB   r   r   r   Ú
set_result   s
    
zFuture.set_resultc             C   s‚   | j tkrtdj| j | ƒƒ‚t|tƒr,|ƒ }t|ƒtkr@tdƒ‚|| _t	| _ | j
ƒ  tjrbd| _nt| |ƒ| _| jj| jjƒ d S )Nz{}: {!r}zPStopIteration interacts badly with generators and cannot be raised into a FutureT)r7   r8   r   rK   Ú
isinstanceÚtypeÚStopIterationÚ	TypeErrorr5   r@   r:   r
   ÚPY34r4   r   Z
_tb_loggerr   r<   r   )r   r3   r   r   r   Úset_exception,  s    

zFuture.set_exceptionc             c   s   | j ƒ sd| _| V  | jƒ S )NT)r?   Ú_asyncio_future_blockingrB   )r   r   r   r   Ú__iter__D  s    zFuture.__iter__) r'   r(   r)   r8   r7   rA   r5   r   r   rS   r4   r   r	   Z_future_repr_infor1   r2   r
   rQ   r&   r;   r:   r>   r?   rB   r3   rE   rJ   rL   rR   rT   ZPY35Ú	__await__r   r   r   r   r   n   s2   
c             C   s   | j ƒ rd S | j|ƒ d S )N)r>   rL   )ZfutrB   r   r   r   Ú_set_result_unless_cancelledS  s    rV   c             C   sN   |j ƒ r| jƒ  | jƒ sd S |jƒ }|d k	r8| j|ƒ n|jƒ }| j|ƒ d S )N)r>   r;   Zset_running_or_notify_cancelr3   rR   rB   rL   )Ú
concurrentÚsourcer3   rB   r   r   r   Ú_set_concurrent_future_stateZ  s    rY   c             C   sP   |j ƒ rd S | j ƒ r|jƒ  n.| jƒ }|d k	r:|j|ƒ n| jƒ }|j|ƒ d S )N)r>   r;   r3   rR   rB   rL   )rX   Údestr3   rB   r   r   r   Ú_copy_future_statei  s    
r[   c                sª   t ˆƒ r"tˆtjjƒ r"tdƒ‚t ˆƒ rDtˆtjjƒ rDtdƒ‚t ˆƒrRˆjnd ‰t ˆƒrdˆjnd ‰dd„ ‰ ‡‡‡fdd„}‡ ‡‡‡fdd„}ˆj|ƒ ˆj|ƒ d S )	Nz(A future is required for source argumentz-A future is required for destination argumentc             S   s"   t | ƒrt|| ƒ n
t| |ƒ d S )N)r   r[   rY   )r   Úotherr   r   r   Ú
_set_state�  s    z!_chain_future.<locals>._set_statec                s2   | j ƒ r.ˆd ksˆˆ kr"ˆjƒ  nˆjˆjƒ d S )N)r>   r;   Úcall_soon_threadsafe)Údestination)Ú	dest_looprX   Úsource_loopr   r   Ú_call_check_cancel“  s    
z)_chain_future.<locals>._call_check_cancelc                sJ   ˆj ƒ rˆd k	rˆjƒ rd S ˆd ks,ˆˆkr8ˆ ˆ| ƒ nˆjˆ ˆ| ƒ d S )N)r>   Z	is_closedr^   )rX   )r]   r`   r_   ra   r   r   Ú_call_set_stateš  s    z&_chain_future.<locals>._call_set_state)r   rM   rW   Zfuturesr   rP   r   rE   )rX   r_   rb   rc   r   )r]   r`   r_   rX   ra   r   Ú_chain_future}  s    	
rd   )r   c            C   s2   t | ƒr| S |d krtjƒ }|jƒ }t| |ƒ |S )N)r   r   r+   Zcreate_futurerd   )r   r   Z
new_futurer   r   r   r   §  s    
)Ú__all__Zconcurrent.futuresrW   Zloggingr.   r   r   r	   r
   r   r   r   r   r   r8   r9   r@   ÚDEBUGZSTACK_DEBUGr   r   Z	_PyFuturerV   rY   r[   rd   r   Z_asyncioÚImportErrorZ_CFuturer   r   r   r   Ú<module>   s<   

P c*