U
    ){f                     @   sT   d gZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ G dd  d Z	d	S )
	TaskGroup    )events)
exceptions)tasks)BaseExceptionGroup   )task_factoryc                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d	d
ddZee	dddZ
dd Zdd Zd	S )r   c                 C   sB   d| _ d| _d| _d | _d | _d| _t | _g | _d | _	d | _
d S )NF)_entered_exiting	_aborting_loop_parent_task_parent_cancel_requestedset_tasks_errors_base_error_on_completed_futself r   S/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/taskgroup/taskgroups.py__init__   s    zTaskGroup.__init__c                 C   sv   dg}| j r"|dt| j   | jr>|dt| j  | jrP|d n| jr`|d d|}d| dS )	N ztasks=zerrors=
cancellingZentered z
<TaskGroup>)r   appendlenr   r   r	   join)r   infoZinfo_strr   r   r   __repr__   s    

zTaskGroup.__repr__c                    s\   | j rtd| dd| _ | jd kr0t | _t| j| _| jd krXtd| d| S )N
TaskGroup z has been already enteredTz! cannot determine the parent task)r	   RuntimeErrorr   r   get_running_loopr   current_taskr   r   r   r   r   
__aenter__,   s    




zTaskGroup.__aenter__c              
      s>  d| _ d }|d k	r,| |r,| jd kr,|| _|d k	rb|tjkrT| jrP| j sPn|}| jsb| 	  | j
r| jd kr~| j | _z| jI d H  W n6 tjk
r } z| js|}| 	  W 5 d }~X Y nX d | _qb| j
rt| jd k	r| j|d k	r||d k	r|tjk	r| j| | jr:| j}d | _td|}|d d S )NTzunhandled errors in a TaskGroup)r
   _is_base_errorr   r   CancelledErrorr   r   Zuncancelr   _abortr   r   r   create_futureAssertionErrorr   r   r   )r   etexctbZpropagate_cancellation_errorexerrorsmer   r   r   	__aexit__<   sJ    

	


zTaskGroup.__aexit__N)namecontextc                C   s   | j std| d| jr2| js2td| d| jrHtd| d|d kr^| j|}nt| j||d}t	|| |
| j | j| |S )Nr"   z has not been enteredz is finishedz is shutting down)r4   )r	   r#   r
   r   r   r   create_task_task_factoryr   _set_task_nameadd_done_callback_on_task_doneadd)r   coror3   r4   taskr   r   r   r5      s    zTaskGroup.create_task)r-   returnc                 C   s   t |tstt |ttfS )N)
isinstanceBaseExceptionr+   
SystemExitKeyboardInterrupt)r   r-   r   r   r   r'      s    zTaskGroup._is_base_errorc                 C   s&   d| _ | jD ]}| s|  qd S )NT)r   r   donecancel)r   tr   r   r   r)      s    
zTaskGroup._abortc                 C   s   | j | | jd k	r2| j s2| j s2| jd | r>d S | }|d krRd S | j| | 	|rx| j
d krx|| _
| j r| jd|d| j d||d d S | js| js|   d| _| j  d S )NTzTask z% has errored out but its parent task z is already completed)message	exceptionr<   )r   discardr   rB   
set_result	cancelledrF   r   r   r'   r   r   r   call_exception_handlerr   r   r)   rC   )r   r<   r-   r   r   r   r9      s.    

zTaskGroup._on_task_done)__name__
__module____qualname__r   r!   r&   r2   r5   r?   boolr'   r)   r9   r   r   r   r   r      s   QN)
__all__asyncior   r   r   Zexceptiongroupr   r   r6   r   r   r   r   r   <module>   s   