B p!=p@sdZddlZddlZddlZddlZddlmZddlmZddlm Z ej Z ej Z ej Z ej Z ejZejZejZejdZGdddZeZd d Zd d Zd dZddZddZddddZy ddlZWnek rYn XejZZdS))CancelledError TimeoutErrorInvalidStateErrorFuture wrap_futureisfutureN) base_futures)events)format_helpersc@seZdZeZdZdZdZdZdZ dZ ddddZ e j ZddZdd Zed d Zejd d Zd dZddZddZddZddZddZddZddddZddZd d!Zd"d#Zd$d%ZeZ dS)&rNF)loopcCs@|dkrt|_n||_g|_|jr )format __class____name__join _repr_info)rrrr__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 _exceptionrrrrZcall_exception_handler)rexccontextrrr__del__]s  zFuture.__del__cCs|jS)N)r")rrrr_log_tracebackmszFuture._log_tracebackcCst|rtdd|_dS)Nz'_log_traceback can only be set to FalseF)bool ValueErrorr")rvalrrrr'qscCs|j}|dkrtd|S)Nz!Future object is not initialized.)r RuntimeError)rr rrrget_loopwszFuture.get_loopcCs&d|_|jtkrdSt|_|dS)NFT)r"_state_PENDING _CANCELLED_Future__schedule_callbacks)rrrrcancel~s  z Future.cancelcCsL|jdd}|sdSg|jdd<x"|D]\}}|jj|||dq*WdS)N)r%)rr call_soon)rZ callbackscallbackctxrrrZ__schedule_callbackss zFuture.__schedule_callbackscCs |jtkS)N)r-r/)rrrr cancelledszFuture.cancelledcCs |jtkS)N)r-r.)rrrrdonesz Future.donecCs<|jtkrt|jtkr tdd|_|jdk r6|j|jS)NzResult is not ready.F)r-r/r _FINISHEDrr"r#_result)rrrrresults   z Future.resultcCs,|jtkrt|jtkr tdd|_|jS)NzException is not set.F)r-r/rr7rr"r#)rrrrr s   zFuture.exception)r%cCsB|jtkr|jj|||dn |dkr.t}|j||fdS)N)r%)r-r.rr2 contextvarsZ copy_contextrappend)rfnr%rrradd_done_callbacks  zFuture.add_done_callbackcs<fdd|jD}t|jt|}|r8||jdd<|S)Ncs g|]\}}|kr||fqSrr).0fr4)r<rr sz/Future.remove_done_callback..)rlen)rr<Zfiltered_callbacksZ removed_countr)r<rremove_done_callbacks   zFuture.remove_done_callbackcCs4|jtkrtd|j|||_t|_|dS)Nz{}: {!r})r-r.rrr8r7r0)rr9rrr set_results  zFuture.set_resultcCs^|jtkrtd|j|t|tr,|}t|tkr@td||_t |_| d|_ dS)Nz{}: {!r}zPStopIteration interacts badly with generators and cannot be raised into a FutureT) r-r.rr isinstancetype StopIteration TypeErrorr#r7r0r")rr rrr set_exceptions   zFuture.set_exceptionccs,|sd|_|V|s$td|S)NTzawait wasn't used with future)r6_asyncio_future_blockingr+r9)rrrr __await__s zFuture.__await__)!r __module__ __qualname__r.r-r8r#rrrIr"rr Z_future_repr_inforrr&propertyr'setterr,r1r0r5r6r9r r=rBrCrHrJ__iter__rrrrr s4   rcCs,y |j}Wntk rYnX|S|jS)N)r,AttributeErrorr)futr,rrr _get_loops  rRcCs|r dS||dS)N)r5rC)rQr9rrr_set_result_unless_cancelledsrScCsN|r||sdS|}|dk r8||n|}||dS)N)r5r1Zset_running_or_notify_cancelr rHr9rC) concurrentsourcer r9rrr_set_concurrent_future_state&s rVcCsP|r dS|r|n.|}|dk r:||n|}||dS)N)r5r1r rHr9rC)rUdestr r9rrr_copy_future_state5s  rXcststtjjstdts._set_statecs2|r.dkskr"n jdS)N)r5r1call_soon_threadsafe) destination) dest_looprU source_looprr_call_check_cancel_s z)_chain_future.._call_check_cancelcsJrdk rrdSdks,kr8|n|dS)N)r5Z is_closedr[)rU)rZr]r\r^rr_call_set_statefs  z&_chain_future.._call_set_state)rrDrTZfuturesrrGrRr=)rUr\r_r`r)rZr]r\rUr^r _chain_futureIs     ra)r cCs2t|r |S|dkrt}|}t|||S)N)rr r Z create_futurera)r!r Z new_futurerrrrss r)__all__concurrent.futuresrTr:Zloggingrr r r rrrrr.r/r7DEBUGZ STACK_DEBUGrZ _PyFuturerRrSrVrXrarZ_asyncio ImportErrorZ_CFuturerrrrs:    q *