U e5dƒ„ã@srdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZe d¡jZdAd d „ZdBd d „ZdCdd„Zdd„ZGdd„dejƒZeZz ddlZWnek rôYn XejZZddœdd„ZejjZejj Z ejj!Z!dde!dœdd„Z"dd„Z#ddœdd„Z$dd „Z%d!d"„Z&ddd#œd$d%„Z'ej(d&d'„ƒZ)dDddœd(d)„Z*ddœd*d+„Z+ej(d,d-„ƒZ,ee,_Gd.d/„d/ej-ƒZ.dd0d1œd2d3„Z/ddœd4d5„Z0d6d7„Z1e  2¡Z3iZ4d8d9„Z5d:d;„Z6dd?„Z8e5Z9e8Z:e6Z;e7Ze6Z?e7Z@dS)E)ÚTaskÚ create_taskÚFIRST_COMPLETEDÚFIRST_EXCEPTIONÚ ALL_COMPLETEDÚwaitÚwait_forÚ as_completedÚsleepÚgatherÚshieldÚ ensure_futureÚrun_coroutine_threadsafeÚ current_taskÚ all_tasksÚ_register_taskÚ_unregister_taskÚ _enter_taskÚ _leave_taskéNé)Ú base_tasks)Ú coroutines)Úevents)Ú exceptions)Úfutures)Ú _is_coroutinecCs|dkrt ¡}t |¡S©N)rÚget_running_loopÚ_current_tasksÚget©Úloop©r"ú%/usr/lib64/python3.8/asyncio/tasks.pyr"srcs^ˆdkrt ¡‰d}z ttƒ}WqLtk rF|d7}|dkrB‚YqXqLq‡fdd„|DƒS)Nrréècs&h|]}t |¡ˆkr| ¡s|’qSr")rÚ _get_loopÚdone©Ú.0Útr r"r#Ú <sÿzall_tasks..)rrÚlistÚ _all_tasksÚ RuntimeError©r!ÚiZtasksr"r r#r)s rcs^ˆdkrt ¡‰d}z ttƒ}WqLtk rF|d7}|dkrB‚YqXqLq‡fdd„|DƒS)Nrrr$csh|]}t |¡ˆkr|’qSr")rr%r'r r"r#r*Usz$_all_tasks_compat..)rÚget_event_loopr+r,r-r.r"r r#Ú_all_tasks_compat@s r1cCs4|dk r0z |j}Wntk r&Yn X||ƒdSr)Úset_nameÚAttributeError)ÚtaskÚnamer2r"r"r#Ú_set_task_nameXs  r6cs¼eZdZdZed$dd„ƒZed%dd„ƒZdddœ‡fdd „ Z‡fd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zddœdd„Zdddœdd„Zdd„Zd&‡fd d!„ Zd"d#„Z‡ZS)'rTNcCs(tjdtdd�|dkr t ¡}t|ƒS)NzVTask.current_task() is deprecated since Python 3.7, use asyncio.current_task() insteadé©Ú stacklevel)ÚwarningsÚwarnÚDeprecationWarningrr0r©Úclsr!r"r"r#rtsýzTask.current_taskcCstjdtdd�t|ƒS)NzPTask.all_tasks() is deprecated since Python 3.7, use asyncio.all_tasks() insteadr7r8)r:r;r<r1r=r"r"r#r„s ýzTask.all_tasks)r!r5cs˜tƒj|d�|jr|jd=t |¡s:d|_td|›�ƒ‚|dkrRdtƒ›�|_n t |ƒ|_d|_ d|_ ||_ t  ¡|_|jj|j|jd�t|ƒdS)Nr éÿÿÿÿFza coroutine was expected, got zTask-©Úcontext)ÚsuperÚ__init__Ú_source_tracebackrÚ iscoroutineÚ_log_destroy_pendingÚ TypeErrorÚ_task_name_counterÚ_nameÚstrÚ _must_cancelÚ _fut_waiterÚ_coroÚ contextvarsZ copy_contextÚ_contextÚ_loopÚ call_soonÚ _Task__stepr)ÚselfÚcoror!r5©Ú __class__r"r#rC�s   z Task.__init__csF|jtjkr8|jr8|ddœ}|jr,|j|d<|j |¡tƒ ¡dS)Nz%Task was destroyed but it is pending!)r4ÚmessageZsource_traceback) Z_staterZ_PENDINGrFrDrPZcall_exception_handlerrBÚ__del__)rSrArUr"r#rX§sþ  z Task.__del__cCs t |¡Sr)rZ_task_repr_info©rSr"r"r#Ú _repr_info²szTask._repr_infocCs|jSr)rMrYr"r"r#Úget_coroµsz Task.get_corocCs|jSr)rIrYr"r"r#Úget_name¸sz Task.get_namecCst|ƒ|_dSr)rJrI)rSÚvaluer"r"r#r2»sz Task.set_namecCs tdƒ‚dS)Nz*Task does not support set_result operation©r-)rSÚresultr"r"r#Ú set_result¾szTask.set_resultcCs tdƒ‚dS)Nz-Task does not support set_exception operationr^)rSÚ exceptionr"r"r#Ú set_exceptionÁszTask.set_exception)ÚlimitcCs t ||¡Sr)rZ_task_get_stack)rSrcr"r"r#Ú get_stackÄszTask.get_stack)rcÚfilecCst |||¡Sr)rZ_task_print_stack)rSrcrer"r"r#Ú print_stackÛs zTask.print_stackcCs4d|_| ¡rdS|jdk r*|j ¡r*dSd|_dS©NFT)Z_log_tracebackr&rLÚcancelrKrYr"r"r#rhæs  z Task.cancelc sÖ| ¡rt d|›d|›�¡‚|jr>t|tjƒs8t ¡}d|_|j}d|_t|j |ƒ�zfz"|dkrp|  d¡}n |  |¡}WnÐt k rÆ}z*|jr¦d|_tƒ ¡ntƒ |j¡W5d}~XY�nötjk rætƒ ¡Y�nÖttfk �r}ztƒ |¡‚W5d}~XY�n tk �rL}ztƒ |¡W5d}~XY�npXt|ddƒ}|dk �r@t |¡|j k �r¤td|›d|›d�ƒ}|j j|j||jd�nš|�r||k�rÚtd |›�ƒ}|j j|j||jd�n8d|_|j|j|jd�||_|j�r>|j ¡�r>d|_n*td |›d |›�ƒ}|j j|j||jd�n||dk�r`|j j|j|jd�n\t  !|¡�r˜td |›d |›�ƒ}|j j|j||jd�n$td |›�ƒ}|j j|j||jd�W5t |j |ƒd}XdS)Nz_step(): already done: z, FÚ_asyncio_future_blockingzTask z got Future z attached to a different loopr@zTask 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&rZInvalidStateErrorrKÚ isinstanceÚCancelledErrorrMrLrrPrÚsendÚthrowÚ StopIterationrBrhr`r]ÚKeyboardInterruptÚ SystemExitrbÚ BaseExceptionÚgetattrrr%r-rQrRrOriÚadd_done_callbackÚ _Task__wakeupÚinspectZ isgenerator)rSÚexcrTr_ZblockingÚnew_excrUr"r#Z__steps¨ÿ         ÿÿ ÿÿÿ ÿÿ  ÿÿÿ  z Task.__stepc CsJz | ¡Wn,tk r8}z| |¡W5d}~XYn X| ¡d}dSr)r_rqrR)rSÚfuturervr"r"r#Z__wakeup[s  z Task.__wakeup)N)N)N)Ú__name__Ú __module__Ú __qualname__rFÚ classmethodrrrCrXrZr[r\r2r`rbrdrfrhrRrtÚ __classcell__r"r"rUr#rbs$    !Tr)r5cCs t ¡}| |¡}t||ƒ|Sr)rrrr6)rTr5r!r4r"r"r#rxs  r)r!ÚtimeoutÚ return_whencƒsœt |¡st |¡r(tdt|ƒj›�ƒ‚|s4tdƒ‚|tt t fkrPtd|›�ƒ‚ˆdkrbt   ¡‰nt jdtdd�‡fdd„t|ƒ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.r7r8csh|]}t|ˆd�’qS©r ©r ©r(Úfr r"r#r*¨szwait..)rÚisfuturerrErGÚtyperyÚ ValueErrorrrrrrr:r;r<ÚsetÚ_wait)Úfsr!r~rr"r r#rŠs þrcGs| ¡s| d¡dSr)r&r`)ÚwaiterÚargsr"r"r#Ú_release_waiter­sr�r c Ãs”|dkrt ¡}ntjdtdd�|dkr4|IdHS|dkr®t||d�}| ¡rX| ¡St||d�IdHz | ¡Wn.t j k r¤}zt   ¡|‚W5d}~XYn Xt   ¡‚|  ¡}|  |t|¡}t t|¡}t||d�}| |¡zžz|IdHWnPt j k �rF| ¡�r$| ¡YW¢dS| |¡t||d�IdH‚YnX| ¡�r^| ¡W¢*S| |¡t||d�IdHt   ¡‚W5| ¡XdS)Nr€r7r8rr )rrr:r;r<r r&r_Ú_cancel_and_waitrrkÚ TimeoutErrorÚ create_futureÚ call_laterr�Ú functoolsÚpartialrsrhÚremove_done_callback)Úfutr~r!rvr‹Útimeout_handleÚcbr"r"r#r²sL  þ            rc ƒsÄ| ¡‰d‰|dk r"| |tˆ¡‰t|ƒ‰‡‡‡‡fdd„}|D]}| |¡q@zˆIdHW5ˆdk rpˆ ¡|D]}| |¡qtXtƒtƒ}}|D]"}| ¡r°|  |¡q˜|  |¡q˜||fS)NcsZˆd8‰ˆdks4ˆtks4ˆtkrV| ¡sV| ¡dk rVˆdk rDˆ ¡ˆ ¡sVˆ d¡dS)Nrr)rrÚ cancelledrarhr&r`©r„©Zcounterrr–r‹r"r#Ú_on_completionsÿþþ ýz_wait.._on_completion) r�r‘r�Úlenrsrhr”rˆr&Úadd)rŠr~rr!r›r„r&Zpendingr"ršr#r‰ús(    r‰c ÃsF| ¡}t t|¡}| |¡z| ¡|IdHW5| |¡XdSr)r�r’r“r�rsr”rh)r•r!r‹r—r"r"r#rŽ&s  rŽ)r!r~c#sðt |¡st |¡r(tdt|ƒj›�ƒ‚ddlm}|ˆd�‰ˆdkrPt   ¡‰nt j dt dd�‡fdd „t|ƒDƒ‰d‰‡‡‡fd d „}‡‡‡fd d „‰‡fdd„}ˆD]}| ˆ¡qªˆrÒ|dk rÒˆ ||¡‰ttˆƒƒD] }|ƒVqÞdS)Nz#expect an iterable of futures, not r)ÚQueuer r€r7r8csh|]}t|ˆd�’qSr�r‚rƒr r"r#r*Uszas_completed..cs*ˆD]}| ˆ¡ˆ d¡qˆ ¡dSr)r”Ú put_nowaitÚclearr™)r›r&Útodor"r#Ú _on_timeoutXs  z!as_completed.._on_timeoutcs4ˆsdSˆ |¡ˆ |¡ˆs0ˆdk r0ˆ ¡dSr)ÚremoverŸrhr™)r&r–r¡r"r#r›^s    z$as_completed.._on_completionc“s$ˆ ¡IdH}|dkrtj‚| ¡Sr)rrr�r_r™)r&r"r#Ú _wait_for_onefsz#as_completed.._wait_for_one)rr…rrErGr†ryZqueuesržrr0r:r;r<rˆrsr‘Úrangerœ)rŠr!r~ržr¢r¤r„Ú_r")r›r&r!r–r¡r#r7s*   þ    rccs dVdSrr"r"r"r"r#Ú__sleep0us r§cÃsr|dkrtƒIdH|S|dkr*t ¡}ntjdtdd�| ¡}| |tj ||¡}z|IdHW¢S|  ¡XdS)Nrr€r7r8) r§rrr:r;r<r�r‘rZ_set_result_unless_cancelledrh)Zdelayr_r!rxÚhr"r"r#r �s$  þþr cCsˆt |¡r6|dkrt ¡}| |¡}|jr2|jd=|St |¡rb|dk r^|t |¡k r^t dƒ‚|St   |¡r|t t |ƒ|d�Stdƒ‚dS)Nr?zRThe 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)rrErr0rrDrr…r%r‡ruZ isawaitabler Ú_wrap_awaitablerG)Zcoro_or_futurer!r4r"r"r#r ˜s    r ccs| ¡EdHSr)Ú __await__)Z awaitabler"r"r#r©°sr©cs*eZdZddœ‡fdd„ Zdd„Z‡ZS)Ú_GatheringFutureNr cstƒj|d�||_d|_dS)Nr F)rBrCÚ _childrenÚ_cancel_requested)rSÚchildrenr!rUr"r#rCÄsz_GatheringFuture.__init__cCs6| ¡r dSd}|jD]}| ¡rd}q|r2d|_|Srg)r&r¬rhr­)rSZretZchildr"r"r#rhÉs z_GatheringFuture.cancel)ryrzr{rCrhr}r"r"rUr#r«¼sr«F)r!Úreturn_exceptionscsÜ|s<|dkrt ¡}ntjdtdd�| ¡‰ˆ g¡ˆS‡‡‡‡‡fdd„}i}g‰d‰d‰|D]f}||kr¸t||d�}|dkrŽt  |¡}||k rœd|_ ˆd 7‰|||<|  |¡n||}ˆ  |¡qdt ˆ|d�‰ˆS) Nr€r7r8csÒˆd7‰ˆ ¡r$| ¡s | ¡dSˆsd| ¡rFt ¡}ˆ |¡dS| ¡}|dk rdˆ |¡dSˆˆkrÎg}ˆD]8}| ¡rŠt ¡}n| ¡}|dkr¢| ¡}| |¡qtˆjrĈ t ¡¡n ˆ  |¡dS)Nr) r&r˜rarrkrbr_Úappendr­r`)r•rvZresultsÚres©r®Z nfinishedZnfutsÚouterr¯r"r#Ú_done_callbacks4    zgather.._done_callbackrr Fr)rr0r:r;r<r�r`r rr%rFrsr°r«)r!r¯Zcoros_or_futuresr´Z arg_to_futÚargr•r"r²r#r Øs: þ 1     r cst|dk rtjdtdd�t||d�‰ˆ ¡r0ˆSt ˆ¡}| ¡‰‡fdd„‰‡‡fdd„}ˆ ˆ¡ˆ |¡ˆS) Nr€r7r8r cs\ˆ ¡r| ¡s| ¡dS| ¡r.ˆ ¡n*| ¡}|dk rJˆ |¡nˆ | ¡¡dSr)r˜rarhrbr`r_)Úinnerrv©r³r"r#Ú_inner_done_callbackus  z$shield.._inner_done_callbackcsˆ ¡sˆ ˆ¡dSr)r&r”r·)r¸r¶r"r#Ú_outer_done_callback†sz$shield.._outer_done_callback) r:r;r<r r&rr%r�rs)rµr!r¹r")r¸r¶r³r#r Psþ     r cs:t ˆ¡stdƒ‚tj ¡‰‡‡‡fdd„}ˆ |¡ˆS)NzA coroutine object is requiredc slzt tˆˆd�ˆ¡WnNttfk r2‚Yn6tk rf}zˆ ¡rTˆ |¡‚W5d}~XYnXdS)Nr )rZ _chain_futurer rprorqZset_running_or_notify_cancelrb)rv©rTrxr!r"r#Úcallback˜s z*run_coroutine_threadsafe..callback)rrErGÚ concurrentrÚFutureZcall_soon_threadsafe)rTr!r»r"rºr#r �s    r cCst |¡dSr)r,r�©r4r"r"r#r®srcCs4t |¡}|dk r(td|›d|›d�ƒ‚|t|<dS)NzCannot enter into task z while another task z is being executed.©rrr-©r!r4rr"r"r#r³s rcCs2t |¡}||k r(td|›d|›d�ƒ‚t|=dS)Nz Leaving task z! does not match the current task Ú.r¿rÀr"r"r#r»s rcCst |¡dSr)r,Údiscardr¾r"r"r#rÃsr)rrrrr,r)N)N)N)N)AÚ__all__Zconcurrent.futuresr¼rNr’ruÚ itertoolsÚtypesr:ÚweakrefÚrrrrrrÚcountÚ__next__rHrrr1r6Z _PyFuturerZ_PyTaskZ_asyncioÚ ImportErrorZ_CTaskrrrrrr�rr‰rŽrÚ coroutiner§r r r©r½r«r r r ZWeakSetr,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†                #H,>  x?$