U ,ab3@sdZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ej Z ej Z ej Z ejZejdZGdd d ZeZd d Zd d ZddZddZddZddZddddZz ddlZWnek rYn XejZZdS))Future wrap_futureisfutureN) base_futures)events) exceptions)format_helpersc@seZdZeZdZdZdZdZdZ dZ ddddZ e j ZddZdd Zed d Zejd d Zd dZddZddZddZddZddZddZddddZddZd d!Zd"d#Zd$d%ZeZ dS)&rNFloopcCs@|dkrt|_n||_g|_|jr )format __class____name__join _repr_inforrrr__repr__Vs  zFuture.__repr__cCsF|js dS|j}|jjd||d}|jr6|j|d<|j|dS)Nz exception was never retrieved)message exceptionfutureZsource_traceback)_Future__log_traceback _exceptionrrrr Zcall_exception_handler)rexccontextrrr__del__Zs  zFuture.__del__cCs|jSN)r#rrrr_log_tracebackjszFuture._log_tracebackcCst|rtdd|_dS)Nz'_log_traceback can only be set to FalseF)bool ValueErrorr#)rvalrrrr)nscCs|j}|dkrtd|S)Nz!Future object is not initialized.)r RuntimeErrorrrrrget_looptszFuture.get_loopcCs&d|_|jtkrdSt|_|dS)NFT)r#_state_PENDING _CANCELLED_Future__schedule_callbacksrrrrcancel{s  z Future.cancelcCsH|jdd}|sdSg|jdd<|D]\}}|jj|||dq(dSNr&)rr call_soon)rZ callbackscallbackctxrrrZ__schedule_callbackss  zFuture.__schedule_callbackscCs |jtkSr()r/r1rrrr cancelledszFuture.cancelledcCs |jtkSr()r/r0rrrrdonesz Future.donecCs@|jtkrtj|jtkr$tdd|_|jdk r:|j|jS)NzResult is not ready.F) r/r1rCancelledError _FINISHEDInvalidStateErrorr#r$_resultrrrrresults    z Future.resultcCs0|jtkrtj|jtkr$tdd|_|jS)NzException is not set.F)r/r1rr;r<r=r#r$rrrrr!s    zFuture.exceptionr5cCsB|jtkr|jj|||dn |dkr.t}|j||fdSr4)r/r0r r6 contextvarsZ copy_contextrappend)rfnr&rrradd_done_callbacks  zFuture.add_done_callbackcs<fdd|jD}t|jt|}|r8||jdd<|S)Ncs g|]\}}|kr||fqSrr).0fr8rBrr sz/Future.remove_done_callback..)rlen)rrBZfiltered_callbacksZ removed_countrrFrremove_done_callbacks zFuture.remove_done_callbackcCs8|jtkr t|jd|||_t|_|dS)N: )r/r0rr=r>r<r2)rr?rrr set_results  zFuture.set_resultcCsb|jtkr t|jd|t|tr0|}t|tkrDtd||_t |_| d|_ dS)NrJzPStopIteration interacts badly with generators and cannot be raised into a FutureT) r/r0rr= isinstancetype StopIteration TypeErrorr$r<r2r#)rr!rrr set_exceptions   zFuture.set_exceptionccs,|sd|_|V|s$td|S)NTzawait wasn't used with future)r:_asyncio_future_blockingr-r?rrrr __await__s zFuture.__await__)!r __module__ __qualname__r0r/r>r$r rrQr#rrZ_future_repr_inforrr'propertyr)setterr.r3r2r9r:r?r!rCrIrKrPrR__iter__rrrrrs8    rcCs,z |j}Wntk rYnX|S|jSr()r.AttributeErrorr )futr.rrr _get_loops  rZcCs|r dS||dSr()r9rK)rYr?rrr_set_result_unless_cancelledsr[cCsXt|}|tjjkr tj|jS|tjjkr8tj|jS|tjjkrPtj|jS|SdSr()rM concurrentfuturesr;rargs TimeoutErrorr=)r%Z exc_classrrr_convert_future_exc#s      r`cCsR|r||sdS|}|dk r<|t|n|}||dSr()r9r3Zset_running_or_notify_cancelr!rPr`r?rK)r\sourcer!r?rrr_set_concurrent_future_state/srbcCsT|r dS|r|n2|}|dk r>|t|n|}||dSr()r9r3r!rPr`r?rK)radestr!r?rrr_copy_future_state>s rdcststtjjstdts._set_statecs2|r.dkskr"n jdSr()r9r3call_soon_threadsafe) destination) dest_loopra source_looprr_call_check_cancelhs z)_chain_future.._call_check_cancelcsJrdk rrdSdks,kr8|n|dSr()r9Z is_closedrg)ra)rfrirhrjrr_call_set_stateos z&_chain_future.._call_set_state)rrLr\r]rrOrZrC)rarhrkrlr)rfrirhrarjr _chain_futureRs   rmr cCs2t|r |S|dkrt}|}t|||Sr()rrr Z create_futurerm)r"r Z new_futurerrrr|s r)__all__Zconcurrent.futuresr\r@Zloggingrrrrr rr0r1r<DEBUGZ STACK_DEBUGrZ _PyFuturerZr[r`rbrdrmrZ_asyncio ImportErrorZ_CFuturerrrrs8     q  *