3 \>� @sddddddgZddlZddlZddlZddlZdd lmZdd lmZdd lm Z ej Z ej Z ej Z ej Z ejZejZejZejdZGd d �d �ZGdd�d�ZeZdd�Zdd�Zdd�Zdd�Zdd�dd�Zy ddlZWnek r�Yn XejZZdS)�CancelledError� TimeoutError�InvalidStateError�Future� wrap_future�isfuture�N�)� base_futures)�compat)�eventsc@s0eZdZdZdd�Zdd�Zd d �Zd d �Zd S)�_TracebackLogger�loop�source_traceback�exc�tbcCs |j|_|j|_||_d|_dS)N)�_loopr �_source_tracebackrrr)�self�futurer�r�'/usr/lib64/python3.6/asyncio/futures.py�__init__Rsz_TracebackLogger.__init__cCs,|j}|dk r(d|_tj|j||j�|_dS)N)r� traceback�format_exception� __class__� __traceback__r)rrrrr�activateXs  z_TracebackLogger.activatecCsd|_d|_dS)N)rr)rrrr�clear_sz_TracebackLogger.clearcCsb|jr^d}|jr:djtj|j��}|d7}|d|j�7}|dj|j�j�7}|jjd|i�dS)Nz*Future/Task exception was never retrieved �z0Future/Task created at (most recent call last): z%s �message)rr�joinr� format_list�rstripr �call_exception_handler)r�msg�srcrrr�__del__csz_TracebackLogger.__del__N)r rrr)�__name__� __module__� __qualname__� __slots__rrrr&rrrrr s 2r c@s�eZdZeZdZdZdZdZdZ dZ dd�dd�Z e j Zdd�ZejrNdd �Zd d �Zd d �Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zejr�eZdS) rNF)r cCs@|dkrtj�|_n||_g|_|jj�r� )rr'r � _repr_info)rrrr�__repr__�szFuture.__repr__cCsD|js dS|j}d|jj||d�}|jr4|j|d<|jj|�dS)Nz %s exception was never retrieved)r� exceptionrr)�_log_traceback� _exceptionrr'rrr#)rr�contextrrrr&�s zFuture.__del__cCs&d|_|jtkrdSt|_|j�dS)NFT)r4�_state�_PENDING� _CANCELLED�_schedule_callbacks)rrrr�cancel�s  z Future.cancelcCsD|jdd�}|sdSg|jdd�<x|D]}|jj||�q*WdS)N)r,r� call_soon)rZ callbacks�callbackrrrr:�s  zFuture._schedule_callbackscCs |jtkS)N)r7r9)rrrr� cancelled�szFuture.cancelledcCs |jtkS)N)r7r8)rrrr�done�sz Future.donecCs<|jtkrt�|jtkr td��d|_|jdk r6|j�|jS)NzResult is not ready.F)r7r9r� _FINISHEDrr4r5�_result)rrrr�result�s   z Future.resultcCs,|jtkrt�|jtkr td��d|_|jS)NzException is not set.F)r7r9rr@rr4r5)rrrrr3�s   zFuture.exceptioncCs*|jtkr|jj||�n |jj|�dS)N)r7r8rr<r,�append)r�fnrrr�add_done_callbacks zFuture.add_done_callbackcs<�fdd�|jD�}t|j�t|�}|r8||jdd�<|S)Ncsg|]}|�kr|�qSrr)�.0�f)rDrr� sz/Future.remove_done_callback..)r,�len)rrDZfiltered_callbacksZ removed_countr)rDr�remove_done_callbacks zFuture.remove_done_callbackcCs4|jtkrtdj|j|���||_t|_|j�dS)Nz{}: {!r})r7r8r�formatrAr@r:)rrBrrr� set_result s  zFuture.set_resultcCs�|jtkrtdj|j|���t|t�r,|�}t|�tkr@td��||_t |_|j �t j rbd|_ nt||�|_|jj|jj�dS)Nz{}: {!r}zPStopIteration interacts badly with generators and cannot be raised into a FutureT)r7r8rrK� isinstance�type� StopIteration� TypeErrorr5r@r:r �PY34r4r Z _tb_loggerrr<r)rr3rrr� set_exception,s    zFuture.set_exceptionccs|j�sd|_|V|j�S)NT)r?�_asyncio_future_blockingrB)rrrr�__iter__DszFuture.__iter__) r'r(r)r8r7rAr5rrrSr4rr Z_future_repr_infor1r2r rQr&r;r:r>r?rBr3rErJrLrRrTZPY35� __await__rrrrrns2   cCs|j�r dS|j|�dS)N)r>rL)ZfutrBrrr�_set_result_unless_cancelledSsrVcCsN|j�r|j�|j�sdS|j�}|dk r8|j|�n|j�}|j|�dS)N)r>r;Zset_running_or_notify_cancelr3rRrBrL)� concurrent�sourcer3rBrrr�_set_concurrent_future_stateZs rYcCsP|j�r dS|j�r|j�n.|j�}|dk r:|j|�n|j�}|j|�dS)N)r>r;r3rRrBrL)rX�destr3rBrrr�_copy_future_stateis  r[cs�t�� r"t�tjj� r"td��t�� rDt�tjj� rDtd��t��rR�jnd�t��rd�jnd�dd�����fdd�}����fdd�}�j|��j|�dS) Nz(A future is required for source argumentz-A future is required for destination argumentcSs"t|�rt||�n t||�dS)N)rr[rY)r�otherrrr� _set_state�s z!_chain_future.._set_statecs2|j�r.�dks��kr"�j�n �j�j�dS)N)r>r;�call_soon_threadsafe)� destination)� dest_looprX� source_looprr�_call_check_cancel�s z)_chain_future.._call_check_cancelcsJ�j�r�dk r�j�rdS�dks,��kr8��|�n�j��|�dS)N)r>Z is_closedr^)rX)r]r`r_rarr�_call_set_state�s  z&_chain_future.._call_set_state)rrMrWZfuturesrrPrrE)rXr_rbrcr)r]r`r_rXrar� _chain_future}s   rd)r cCs2t|�r |S|dkrtj�}|j�}t||�|S)N)rr r+Z create_futurerd)rr Z new_futurerrrr�s )�__all__Zconcurrent.futuresrWZloggingr.rrr r r rrrrr8r9r@�DEBUGZ STACK_DEBUGr rZ _PyFuturerVrYr[rdrZ_asyncio� ImportErrorZ_CFuturerrrr�s<     Pc*