a DOg6@sdZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddlm Z ddlm Z e j Z e jZe jZe jZejdZGd d d ZeZd d Zd dZddZddZddZddZddddZz ddlZWneyYn 0ejZZdS))Future wrap_futureisfutureN) GenericAlias) base_futures)events) exceptions)format_helpersc@seZdZeZdZdZdZdZdZ dZ dZ dZ ddddZ ejZddZdd ZeeZed d Zejd d Zd dZddZd(ddZddZddZddZddZddZ ddddZ!d 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__Zs  zFuture.__repr__cCsF|js dS|j}|jjd||d}|jr6|j|d<|j|dS)Nz exception was never retrieved)message exceptionfutureZsource_traceback)_Future__log_traceback _exceptionrrrrZcall_exception_handler)rexccontextrrr__del__^s  zFuture.__del__cCs|jSN)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_messager CancelledError_cancelled_exc __context__rr&rrr_make_cancelled_errors    zFuture._make_cancelled_errorcCs,d|_|jtkrdSt|_||_|dS)NFT)r$_state_PENDING _CANCELLEDr0_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))r6r8rrrr cancelledszFuture.cancelledcCs |jtkSr))r6r7rrrrdonesz Future.donecCsF|jtkr|}||jtkr*tdd|_|jdur@|j|jS)NzResult is not ready.F) r6r8r5 _FINISHEDr InvalidStateErrorr$r%_resultr4rrrresults    z Future.resultcCs6|jtkr|}||jtkr*tdd|_|jS)NzException is not set.F)r6r8r5rCr rDr$r%r4rrrr"s   zFuture.exceptionr=cCsB|jtkr|jj|||dn |dur.t}|j||fdSr<)r6r7rr> contextvarsZ copy_contextrappend)rfnr'rrradd_done_callbacks  zFuture.add_done_callbackcs<fdd|jD}t|jt|}|r8||jdd<|S)Ncs g|]\}}|kr||fqSrr).0fr@rIrr sz/Future.remove_done_callback..)rlen)rrIZfiltered_callbacksZ removed_countrrMrremove_done_callbacks zFuture.remove_done_callbackcCs8|jtkr t|jd|||_t|_|dS)N: )r6r7r rDrErCr9)rrFrrr set_results  zFuture.set_resultcCsb|jtkr t|jd|t|tr0|}t|turDtd||_t |_| d|_ dS)NrQzPStopIteration interacts badly with generators and cannot be raised into a FutureT) r6r7r rD isinstancetype StopIteration TypeErrorr%rCr9r$)rr"rrr set_exceptions   zFuture.set_exceptionccs,|sd|_|V|s$td|S)NTzawait wasn't used with future)rB_asyncio_future_blockingr.rFrrrr __await__s zFuture.__await__)N)'r __module__ __qualname__r7r6rEr%rrr0r2rXr$rrZ_future_repr_inforr r( classmethodr__class_getitem__propertyr*setterr/r5r;r9rArBrFr"rJrPrRrWrY__iter__rrrrrs@     rcCs*z |j}WntyYn0|S|jSr))r/AttributeErrorr)futr/rrr _get_loop(s   rccCs|r dS||dSr))rArR)rbrFrrr_set_result_unless_cancelled4srdcCsXt|}|tjjur tj|jS|tjjur8tj|jS|tjjurPtj|jS|SdSr))rT concurrentfuturesr1r args TimeoutErrorrD)r&Z exc_classrrr_convert_future_exc;s      ricCsR|r||sdS|}|dur<|t|n|}||dSr))rAr;Zset_running_or_notify_cancelr"rWrirFrR)resourcer"rFrrr_set_concurrent_future_stateGsrkcCsT|r dS|r|n2|}|dur>|t|n|}||dSr))rAr;r"rWrirFrR)rjdestr"rFrrr_copy_future_stateVs rmcststtjjstdts._set_statecs2|r.dusur"n jdSr))rAr;call_soon_threadsafe) destination) dest_looprj source_looprr_call_check_cancels z)_chain_future.._call_check_cancelcsJrdurrdSdus,ur8|n|dSr))rAZ is_closedrp)rj)rorrrqrsrr_call_set_states z&_chain_future.._call_set_state)rrSrerfrrVrcrJ)rjrqrtrur)rorrrqrjrsr _chain_futurejs   rvr cCs2t|r |S|durt}|}t|||Sr))rrr Z create_futurerv)r#r Z new_futurerrrrs r)__all__Zconcurrent.futuresrerGZloggingrtypesrrrr r rr7r8rCDEBUGZ STACK_DEBUGrZ _PyFuturercrdrirkrmrvrZ_asyncio ImportErrorZ_CFuturerrrrs<         *