U
    nËj«
  ã                   @  sÞ   d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZ ejdkrxd dlmZmZ nd dlmZmZ er˜d	d
lmZ edƒZeddd�ZedƒZG dd„ dee ƒZG dd„ ded�ZdS )é    )ÚannotationsN)ÚABCMetaÚabstractmethod)Ú	AwaitableÚCallable)ÚTracebackType)ÚTYPE_CHECKINGÚAnyÚProtocolÚTypeVarÚoverload)é   é   )ÚTypeVarTupleÚUnpacké   )ÚCancelScopeÚT_RetvalÚT_contraT)ÚcontravariantÚPosArgsTc                   @  sF   e Zd Zedddœdd„ƒZedddœdd„ƒZdd
ddœdd„Zd	S )Ú
TaskStatuszTaskStatus[None]ÚNone)ÚselfÚreturnc                 C  s   d S ©N© ©r   r   r   ú4/tmp/pip-unpacked-wheel-k8mofgf9/anyio/abc/_tasks.pyÚstarted   s    zTaskStatus.startedr   )Úvaluer   c                 C  s   d S r   r   ©r   r    r   r   r   r      s    NzT_contra | Nonec                 C  s   dS )zx
        Signal that the task has started.

        :param value: object passed back to the starter of the task
        Nr   r!   r   r   r   r      s    )N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s
   r   c                   @  s€   e Zd ZU dZded< eddœdddd	d
œdd„ƒZeddœddddd
œdd„ƒZed dœdd„ƒZedddddœdd„ƒZ	dS )Ú	TaskGroupz£
    Groups several asynchronous tasks together.

    :ivar cancel_scope: the cancel scope inherited by all child tasks
    :vartype cancel_scope: CancelScope
    r   Zcancel_scopeN)Únamez,Callable[[Unpack[PosArgsT]], Awaitable[Any]]zUnpack[PosArgsT]Úobjectr   )ÚfuncÚargsr&   r   c                G  s   dS )a  
        Start a new task in this task group.

        :param func: a coroutine function
        :param args: positional arguments to call the function with
        :param name: name of the task, for the purposes of introspection and debugging

        .. versionadded:: 3.0
        Nr   ©r   r(   r&   r)   r   r   r   Ú
start_soon/   s    zTaskGroup.start_soonzCallable[..., Awaitable[Any]]r	   c                Ç  s   dS )aØ  
        Start a new task and wait until it signals for readiness.

        :param func: a coroutine function
        :param args: positional arguments to call the function with
        :param name: name of the task, for the purposes of introspection and debugging
        :return: the value passed to ``task_status.started()``
        :raises RuntimeError: if the task finishes without calling
            ``task_status.started()``

        .. versionadded:: 3.0
        Nr   r*   r   r   r   Ústart@   s    zTaskGroup.start)r   c                 Ã  s   dS )z:Enter the task group context and allow starting new tasks.Nr   r   r   r   r   Ú
__aenter__T   s    zTaskGroup.__aenter__ztype[BaseException] | NonezBaseException | NonezTracebackType | Nonezbool | None)Úexc_typeÚexc_valÚexc_tbr   c                 Ã  s   dS )z<Exit the task group context waiting for all tasks to finish.Nr   )r   r.   r/   r0   r   r   r   Ú	__aexit__X   s    zTaskGroup.__aexit__)
r"   r#   r$   Ú__doc__Ú__annotations__r   r+   r,   r-   r1   r   r   r   r   r%   %   s   
üür%   )Ú	metaclass)Ú
__future__r   ÚsysÚabcr   r   Úcollections.abcr   r   Útypesr   Útypingr   r	   r
   r   r   Úversion_infor   r   Ztyping_extensionsZ_core._tasksr   r   r   r   r   r%   r   r   r   r   Ú<module>   s   
