a  ze6@sdZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ej Z ej Z ej Z ejZejdZGdd d ZeZd d Zd d ZddZddZddZddZddddZz ddlZWneyYn 0ejZZdS))Future wrap_futureisfutureN) base_futures)events) exceptions)format_helpersc@seZdZeZdZdZdZdZdZ dZ dZ dZ ddddZ ejZddZdd Zd d Zed d Zejdd ZddZddZd*ddZddZddZddZddZddZddd d!Zd"d#Z d$d%Z!d&d'Z"d(d)Z#e#Z$dS)+rNFloopcCs@|durt|_n||_g|_|jr )format __class____name__join _repr_inforrrr__repr__Ys  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__]s  zFuture.__del__cCs|SNr)clstyperrr__class_getitem__mszFuture.__class_getitem__cCs|jSr()r#rrrr_log_tracebackpszFuture._log_tracebackcCst|rtdd|_dS)Nz'_log_traceback can only be set to FalseF)bool ValueErrorr#)rvalrrrr,tscCs|j}|durtd|S)Nz!Future object is not initialized.)r RuntimeErrorrrrrget_loopzszFuture.get_loopcCs2|jdurt}n t|j}|j|_d|_|Sr()_cancel_messagerCancelledError_cancelled_exc __context__rr%rrr_make_cancelled_errors    zFuture._make_cancelled_errorcCs,d|_|jtkrdSt|_||_|dS)NFT)r#_state_PENDING _CANCELLEDr2_Future__schedule_callbacks)rmsgrrrcancels z Future.cancelcCsH|jdd}|sdSg|jdd<|D]\}}|jj|||dq(dSNr&)rr call_soon)rZ callbackscallbackctxrrrZ__schedule_callbackss  zFuture.__schedule_callbackscCs |jtkSr()r8r:rrrr cancelledszFuture.cancelledcCs |jtkSr()r8r9rrrrdonesz Future.donecCsF|jtkr|}||jtkr*tdd|_|jdur@|j|jS)NzResult is not ready.F) r8r:r7 _FINISHEDrInvalidStateErrorr#r$_resultr6rrrresults    z Future.resultcCs6|jtkr|}||jtkr*tdd|_|jS)NzException is not set.F)r8r:r7rErrFr#r$r6rrrr!s   zFuture.exceptionr?cCsB|jtkr|jj|||dn |dur.t}|j||fdSr>)r8r9r r@ contextvarsZ copy_contextrappend)rfnr&rrradd_done_callbacks  zFuture.add_done_callbackcs<fdd|jD}t|jt|}|r8||jdd<|S)Ncs g|]\}}|kr||fqSrr).0frBrKrr sz/Future.remove_done_callback..)rlen)rrKZfiltered_callbacksZ removed_countrrOrremove_done_callbacks zFuture.remove_done_callbackcCs8|jtkr t|jd|||_t|_|dS)N: )r8r9rrFrGrEr;)rrHrrr set_results  zFuture.set_resultcCsb|jtkr t|jd|t|tr0|}t|turDtd||_t |_| d|_ dS)NrSzPStopIteration interacts badly with generators and cannot be raised into a FutureT) r8r9rrF isinstancer* StopIteration TypeErrorr$rEr;r#)rr!rrr set_exceptions   zFuture.set_exceptionccs,|sd|_|V|s$td|S)NTzawait wasn't used with future)rD_asyncio_future_blockingr0rHrrrr __await__s zFuture.__await__)N)%r __module__ __qualname__r9r8rGr$r rr2r4rYr#rrZ_future_repr_inforrr'r+propertyr,setterr1r7r=r;rCrDrHr!rLrRrTrXrZ__iter__rrrrrs@     rcCs*z |j}WntyYn0|S|jSr()r1AttributeErrorr )futr1rrr _get_loop(s   rbcCs|r dS||dSr()rCrT)rarHrrr_set_result_unless_cancelled4srccCsXt|}|tjjur tj|jS|tjjur8tj|jS|tjjurPtj|jS|SdSr()r* concurrentfuturesr3rargs TimeoutErrorrF)r%Z exc_classrrr_convert_future_exc;s      rhcCsR|r||sdS|}|dur<|t|n|}||dSr()rCr=set_running_or_notify_cancelr!rXrhrHrT)rdsourcer!rHrrr_set_concurrent_future_stateGsrkcCsT|r dS|r|n2|}|dur>|t|n|}||dSr()rCr=r!rXrhrHrT)rjdestr!rHrrr_copy_future_stateVs rmcststtjjstdts._set_statecs2|r.dusur"n jdSr()rCr=call_soon_threadsafe) destination) dest_looprj source_looprr_call_check_cancels z)_chain_future.._call_check_cancelcsJrdurrdSdus,ur8|n|dSr()rCZ is_closedrp)rj)rorrrqrsrr_call_set_states z&_chain_future.._call_set_state)rrUrdrerrWrbrL)rjrqrtrur)rorrrqrjrsr _chain_futurejs   rvr cCs2t|r |S|durt}|}t|||Sr()rrr Z create_futurerv)r"r Z new_futurerrrrs r)__all__concurrent.futuresrdrIloggingrrrrr rr9r:rEDEBUGZ STACK_DEBUGrZ _PyFuturerbrcrhrkrmrvrZ_asyncio ImportErrorZ_CFuturerrrrs:        *