grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \>ã @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*