a  ze@s~dZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZedjZdCd d ZdDd d ZdEddZddZGdddejZeZz ddlZWneyYn 0ejZZddddZejjZejj Z ejj!Z!dde!dddZ"ddZ#ddddZ$dd Z%d!d"Z&ddd#d$d%Z'ej(d&d'Z)dFddd(d)Z*ddd*d+Z+ej(d,d-Z,ee,_Gd.d/d/ej-Z.dd0d1d2d3Z/dd0d1d4d5Z0ddd6d7Z1d8d9Z2e 3Z4iZ5d:d;Z6dd?Z8d@dAZ9e6Z:e9Z;e7Ze9Z?e7Z@e8ZAdS)G)Task create_taskFIRST_COMPLETEDFIRST_EXCEPTION ALL_COMPLETEDwaitwait_for as_completedsleepgathershield ensure_futurerun_coroutine_threadsafe current_task all_tasks_register_task_unregister_task _enter_task _leave_taskN) base_tasks) coroutines)events) exceptions)futures) _is_coroutinecCs|durt}t|SN)rget_running_loop_current_tasksgetloopr"A/opt/bitninja-python-dojo/embedded/lib/python3.9/asyncio/tasks.pyr"srcs\durtd}z tt}WqJtyD|d7}|dkr@Yq0qJqfdd|DS)Nrrcs&h|]}t|ur|s|qSr")r _get_loopdone.0tr r"r# <szall_tasks..)rrlist _all_tasks RuntimeErrorr!iZtasksr"r r#r)s  rcs\durtd}z tt}WqJtyD|d7}|dkr@Yq0qJqfdd|DS)Nrrr$csh|]}t|ur|qSr")rr%r'r r"r#r*Uz$_all_tasks_compat..)rget_event_loopr+r,r-r.r"r r#_all_tasks_compat@s  r2cCs2|dur.z |j}Wnty$Yn 0||dSr)set_nameAttributeError)tasknamer3r"r"r#_set_task_nameXs   r7cseZdZdZdddfdd ZfddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddddZ dddddZd"ddZd#fdd Zd d!ZZS)$rTN)r!r6cstj|d|jr|jd=t|s:d|_td||durRdt|_n t ||_d|_ d|_ ||_ t |_|jj|j|jdt|dS)Nr Fza coroutine was expected, got zTask-context)super__init___source_tracebackr iscoroutine_log_destroy_pending TypeError_task_name_counter_namestr _must_cancel _fut_waiter_coro contextvarsZ copy_context_context_loop call_soon _Task__stepr)selfcoror!r6 __class__r"r#r<ts   z Task.__init__csF|jtjkr8|jr8|dd}|jr,|j|d<|j|tdS)Nz%Task was destroyed but it is pending!)r5messageZsource_traceback) _staterZ_PENDINGr?r=rIZcall_exception_handlerr;__del__)rLr:rNr"r#rRs  z Task.__del__cCs|Srr")clstyper"r"r#__class_getitem__szTask.__class_getitem__cCs t|Sr)rZ_task_repr_inforLr"r"r# _repr_infoszTask._repr_infocCs|jSr)rFrVr"r"r#get_corosz Task.get_corocCs|jSr)rBrVr"r"r#get_namesz Task.get_namecCst||_dSr)rCrB)rLvaluer"r"r#r3sz Task.set_namecCs tddS)Nz*Task does not support set_result operationr-)rLresultr"r"r# set_resultszTask.set_resultcCs tddS)Nz-Task does not support set_exception operationr[)rL exceptionr"r"r# set_exceptionszTask.set_exception)limitcCs t||Sr)rZ_task_get_stack)rLr`r"r"r# get_stackszTask.get_stack)r`filecCst|||Sr)rZ_task_print_stack)rLr`rbr"r"r# print_stacks zTask.print_stackcCs>d|_|rdS|jdur.|jj|dr.dSd|_||_dSNFmsgT)Z_log_tracebackr&rEcancelrD_cancel_message)rLrfr"r"r#rgs z Task.cancelc s|rtd|d||jr>t|tjs8|}d|_|j}d|_t |j |zz"|durp| d}n | |}Wnt y}z:|jrd|_tj|jdnt|jWYd}~n d}~0tjy}z||_tWYd}~nd}~0ttfy>}zt|WYd}~nd}~0typ}zt|WYd}~n~d}~00t|dd}|durjt||j urtd|d|d}|j j|j||jd n|r>||urtd |}|j j|j||jd n>d|_|j |j!|jd ||_|jrh|jj|jdrhd|_n*td |d |}|j j|j||jd n||dur|j j|j|jd n\t"#|rtd |d |}|j j|j||jd n$td|}|j j|j||jd Wt$|j |d}nt$|j |d}0dS)Nz_step(): already done: z, Fre_asyncio_future_blockingzTask z got Future z attached to a different loopr9zTask cannot await on itself: z-yield was used instead of yield from in task z with z;yield was used instead of yield from for generator in task zTask got bad yield: )%r&rInvalidStateErrorrD isinstanceCancelledError_make_cancelled_errorrFrErrIsendthrow StopIterationr;rgrhr]rZZ_cancelled_excKeyboardInterrupt SystemExitr_ BaseExceptiongetattrrr%r-rJrKrHriadd_done_callback _Task__wakeupinspectZ isgeneratorr)rLexcrMr\blockingnew_excrNr"r#Z__steps   $  $            z Task.__stepc CsLz |Wn.ty:}z||WYd}~nd}~00|d}dSr)r\rsrK)rLfuturerxr"r"r#Z__wakeupFs   z Task.__wakeup)N)N)__name__ __module__ __qualname__r?r<rRrUrWrXrYr3r]r_rarcrgrKrv __classcell__r"r"rNr#rbs  "Wr)r6cCs t}||}t|||Sr)rrrr7)rMr6r!r5r"r"r#rcs  r)r!timeout return_whencst|st|r(tdt|j|s4td|tt t fvrPtd|durbt nt jdtddt|}tdd|Drt jd tddfd d |D}t|||IdHS) Nzexpect a list of futures, not z#Set of coroutines/Futures is empty.zInvalid return_when value: [The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10. stacklevelcss|]}t|VqdSr)rr>r(fr"r"r# r0zwait..zThe explicit passing of coroutine objects to asyncio.wait() is deprecated since Python 3.8, and scheduled for removal in Python 3.11.csh|]}t|dqSr r rr r"r#r*r0zwait..)risfuturerr>r@rTr| ValueErrorrrrrrwarningswarnDeprecationWarningsetany_wait)fsr!rrr"r r#rus$ rcGs|s|ddSr)r&r])waiterargsr"r"r#_release_waitersrr c s|durt}ntjdtdd|dur4|IdHS|dkrt||d}|rX|St||dIdHz |Wn0t j y}zt |WYd}~nd}~00t | }| |t|}tt|}t||d}||zz|IdHWnTt j yL|r*|YW|S||t||dIdHYn0|rj|W|S||t||dIdHz |Wn2t j y}zt |WYd}~nd}~00t W|n |0dS)Nrrrrr )rrrrrr r&r\_cancel_and_waitrrl TimeoutError create_future call_laterr functoolspartialrurgremove_done_callback)futrr!rxrtimeout_handlecbr"r"r#rsZ                 rc s|d|dur"||tt|fdd}|D]}||q@z2IdHWdurn|D]}||qrn&dur|D]}||q0tt}}|D]"}|r| |q| |q||fS)NcsZd8dks4tks4tkrV|sV|durVdurDsVddS)Nrr)rr cancelledr^rgr&r]rZcounterrrrr"r#_on_completions z_wait.._on_completion) rrrlenrurgrrr&add)rrrr!rrr&pendingr"rr#rs0     rc sP|}tt|}||z ||IdHW||n ||0dSr)rrrrrurgr)rr!rrr"r"r#r!s   r)r!rc#st|st|r(tdt|jdur@tjdt ddddl m }|ddurft fdd t|Ddfd d }fd d fdd}D]}|qr|dur؈||ttD] }|VqdS)Nz#expect an iterable of futures, not rrrr)Queuer csh|]}t|dqSrrrr r"r#r*Qr0zas_completed..cs*D]}|dqdSr)r put_nowaitclearr)rr&todor"r# _on_timeoutTs  z!as_completed.._on_timeoutcs4sdS||s0dur0dSr)removerrgr)r&rrr"r#rZs    z$as_completed.._on_completioncs$IdH}|durtj|Sr)rrrr\r)r&r"r# _wait_for_onebsz#as_completed.._wait_for_one)rrrr>r@rTr|rrrqueuesrrr1rrurranger)rr!rrrrr_r")rr&r!rrr#r2s*      rccs dVdSrr"r"r"r"r#__sleep0qs rcs~|durtjdtdd|dkr0tIdH|S|dur@t}|}||tj ||}z|IdHW| S| 0dS)Nrrrr) rrrrrrrrrZ_set_result_unless_cancelledrg)delayr\r!r{hr"r"r#r }s&  r cCst|r6|durt}||}|jr2|jd=|St|rb|dur^|t|ur^t d|St |r|t t ||dStddS)Nr8zRThe future belongs to a different loop than the one specified as the loop argumentr z:An asyncio.Future, a coroutine or an awaitable is required)rr>rr1rr=rrr%rrwZ isawaitabler _wrap_awaitabler@)Zcoro_or_futurer!r5r"r"r#r s    r ccs|EdHSr) __await__)Z awaitabler"r"r#rsrcs,eZdZddfdd ZdddZZS)_GatheringFutureNr cstj|d||_d|_dS)Nr F)r;r< _children_cancel_requested)rLchildrenr!rNr"r#r<sz_GatheringFuture.__init__cCs:|r dSd}|jD]}|j|drd}q|r6d|_|Srd)r&rrgr)rLrfretchildr"r"r#rgs  z_GatheringFuture.cancel)N)r|r}r~r<rgrr"r"rNr#rsrFr!return_exceptionscGs(|durtjdtddt|||dS)Nrrrr)rrr_gather)r!rcoros_or_futuresr"r"r#r s r cs|s*|durt}|gSfdd}i}gdd|D]f}||vrt||d}|dur|t|}||urd|_d7|||<||n||} |qRt |dS)Ncsd7r$|s |dSsd|rF|}|dS|}|durd|dSkrg}D]J}|rt|jdurdn|j}n|}|dur|}| |qtj r|}|n  |dS)Nr) r&rr^rmr_rrlrhr\appendrr])rrxresultsresrZ nfinishedZnfutsouterrr"r#_done_callbacks<    z_gather.._done_callbackrr Fr) rr1rr]r rr%r?rurr)r!rrrZ arg_to_futargrr"rr#rs2 7     rcst|durtjdtddt||dr0St}|fddfdd}|S) Nrrrr cs\r|s|dS|r.n*|}|durJ|n|dSr)rr^rgr_r]r\)innerrxrr"r#_inner_done_callback}s  z$shield.._inner_done_callbackcssdSr)r&rr)rrr"r#_outer_done_callbacksz$shield.._outer_done_callback) rrrr r&rr%rru)rr!rr")rrrr#r Xs     r cs:tstdtjfdd}|S)NzA coroutine object is requiredc slzttdWnNttfy0Yn8tyf}z rP|WYd}~n d}~00dS)Nr )rZ _chain_futurer rrrqrsset_running_or_notify_cancelr_)rxrMr{r!r"r#callbacks z*run_coroutine_threadsafe..callback)rr>r@ concurrentrFutureZcall_soon_threadsafe)rMr!rr"rr#r s    r cCst|dSr)r,rr5r"r"r#rsrcCs4t|}|dur(td|d|d|t|<dS)NzCannot enter into task z while another task z is being executed.rrr-r!r5rr"r"r#rs    rcCs2t|}||ur(td|d|dt|=dS)Nz Leaving task z! does not match the current task .rrr"r"r#rs    rcCst|dSr)r,discardrr"r"r#rsr)rrrrr,r)N)N)N)N)B__all__concurrent.futuresrrGrrw itertoolstypesrweakrefrrrrrrrcount__next__rArrr2r7Z _PyFuturerZ_PyTaskZ_asyncio ImportErrorZ_CTaskrrrrrrrrrr coroutinerr r rrrr rr r WeakSetr,rrrrrZ_py_register_taskZ_py_unregister_taskZ_py_enter_taskZ_py_leave_taskZ_c_register_taskZ_c_unregister_taskZ _c_enter_taskZ _c_leave_taskr"r"r"r#s            v    +P,?  &]?$