U
    (–€h^  ã                   @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ ddlmZ	m
Z d dlmZmZ e jdkrpd dlmZmZ nd dlmZmZ eƒ ZG dd	„ d	ƒZejd
d„ ƒZeddd�Zedddd�Zedddd�Zeddd�Zeddd�ZG dd„ deeeef eeeef ƒZejdd„ ƒZdS )é    N)Úcasté   )Útask_factoryÚTask)ÚSelfÚTypeVar)é   é	   )Ú	GeneratorÚ	Coroutinec                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚWaitTaskRescheduledTc                 C   s   || _ || _d S ©N)Ú_add_done_callbackÚ_abort_func)ÚselfÚadd_done_callbackÚ
abort_func© r   ú5/tmp/pip-unpacked-wheel-rrqp3fat/taskgroup/install.pyÚ__init__   s    zWaitTaskRescheduled.__init__c                 O   s   | j ||ŽS r   )r   )r   ÚargsÚkwargsr   r   r   Úcancel   s    zWaitTaskRescheduled.cancelc                 C   s   t  ¡ S r   )ÚasyncioZget_running_loop©r   r   r   r   Úget_loop   s    zWaitTaskRescheduled.get_loopc                C   s(   | j }| ` |d krtdƒ‚|||ƒ d S )Nz.only one task can listen to a Future at a time)r   ÚAssertionError)r   ÚfnÚcontextÚvr   r   r   r   "   s
    z%WaitTaskRescheduled.add_done_callbackN)Ú__name__Ú
__module__Ú__qualname__Z_asyncio_future_blockingr   r   r   r   r   r   r   r   r      s
   r   c                 c   s   | V S r   r   )r   r   r   r   Ú_async_yield,   s    r#   Ú
_YieldT_coT)Ú	covariantÚ_SendT_contra)ÚcontravariantÚdefaultÚ_ReturnT_co)r%   r(   Ú_SendT_contra_nd)r'   Ú_ReturnT_co_ndc                       s†   e Zd Zeeeef ejdœdd„Z	e
dœdd„Ze
dœdd„Zedœd	d
„Zedœdd„Zeedœdd„Zddœ‡ fdd„Z‡  ZS )ÚWrapCoro)Úcoror   c                 C   s   || _ || _d S r   )Ú_coroÚ_context)r   r-   r   r   r   r   r   <   s    zWrapCoro.__init__)Úreturnc                 C   s   | S r   r   r   r   r   r   Ú	__await__D   s    zWrapCoro.__await__c                 C   s   | S r   r   r   r   r   r   Ú__iter__G   s    zWrapCoro.__iter__c                 C   s   |   ttd ƒ¡S r   )Úsendr   r*   r   r   r   r   Ú__next__J   s    zWrapCoro.__next__c                 G   s&   | j j| jjf|žŽ }|tkr"t‚|S r   )r/   Úrunr.   ÚthrowÚUNCANCEL_DONEÚStopIteration)r   Úexc_infoÚresultr   r   r   r6   M   s    zWrapCoro.throw)r   r0   c                 C   s"   | j  | jj|¡}|tkrt‚|S r   )r/   r5   r.   r3   r7   r8   )r   r   r:   r   r   r   r3   S   s    zWrapCoro.sendNc                    s   t ƒ  ¡  d S r   )ÚsuperÚcloser   ©Ú	__class__r   r   r<   Y   s    zWrapCoro.close)r    r!   r"   r   r$   r*   r+   ÚcontextvarsÚContextr   r   r1   r2   r4   r6   r3   r<   Ú__classcell__r   r   r=   r   r,   8   s   ýr,   c                    s˜   t t ¡ tƒrd V  d S d ‰ t ¡ ‰ˆd k	s0t‚‡ ‡fdd„} ˆ ¡ }t|| ƒ ƒ‰‡ ‡fdd„}tt|ˆj	d�ƒI d H  z
d V  W 5 tt
ƒI d H  X d S )Nc                   “   s   t ˆ ¡ ˆ d�I d H S ©N)r   )r,   Zget_coror   )r   Útaskr   r   Úasyncio_maini   s    z&install_uncancel.<locals>.asyncio_mainc                    s   |‰ ˆj | |d� d S rB   )r   )ÚcallbackZcontext_)r   Únew_taskr   r   r   o   s    z+install_uncancel.<locals>.add_done_callback)r   r   )Ú
isinstancer   Zcurrent_taskÚ_Taskr   r   Ú_task_factoryr#   r   r   r7   )rD   Zloopr   r   )r   rF   rC   r   Úinstall_uncancel]   s&    þÿ

rJ   ) Úsysr?   r   Ú
contextlibÚtypesÚtypingr   Ztasksr   rI   r   rH   Ztyping_extensionsr   r   Úversion_infoÚcollections.abcr
   r   Úobjectr7   r   Ú	coroutiner#   r$   r&   r)   r*   r+   r,   ÚasynccontextmanagerrJ   r   r   r   r   Ú<module>   s2   


þ%