U
    $i                     @   s,  U 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 ddlmZ dZejedf ed< ejZed	ZG d
d deeZedddZejreddejejejef ejejg ef  eje edddZneddddZeddddZ dZ!ej"dd dk ree!7 ZeejdddZ#dS )    N   )includesLoop)__version__)new_event_looprun.__all___Tc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   3/tmp/pip-unpacked-wheel-6lmrvi0o/uvloop/__init__.pyr      s   r   returnc                   C   s   t  S )zReturn a new event loop.r   r   r   r   r   r      s    r   loop_factorydebug)mainr   r   r   c                C   s   dS )5The preferred way of running a coroutine with uvloop.Nr   )r   r   r   r   r   r   r      s    r   c                   sP   fdd}t jdd }|dkrt dk	r6tdt sNtd | }z,t| |dk	rr|| || W S z2t
| ||  t|dr||  W 5 td |	  X X n~|d	kr$t dk	rtdtjf ||d
|}|| W  5 Q R  S Q R X n(|dks2ttj| f||d
|S dS )r   c                     s$   t  } t| tstd I d H S )Nz)uvloop.run() uses a non-uvloop event loop)	__asyncio_get_running_loop
isinstancer   	TypeError)loopr   r   r   wrapper)   s    
zrun.<locals>.wrapperN   )   
   z8asyncio.run() cannot be called from a running event loopz"a coroutine was expected, got {!r}shutdown_default_executor)r      r   r      )_sysversion_infor   r   RuntimeErroriscoroutine
ValueErrorformatset_event_loopclose_cancel_all_tasksrun_until_completeZshutdown_asyncgenshasattrr!   Z	set_debugZRunnerr   AssertionError)r   r   r   Z
run_kwargsr   vir   runnerr   r   r   r   &   s`    	





 r   r   c                 C   st   t | }|sd S |D ]}|  q| t j|ddi |D ]0}| rLq>| d k	r>| d| |d q>d S )NZreturn_exceptionsTz1unhandled exception during asyncio.run() shutdown)message	exceptiontask)r   Z	all_taskscancelr.   ZgatherZ	cancelledr5   Zcall_exception_handler)r   Z	to_cancelr6   r   r   r   r-   h   s"    

r-   )installEventLoopPolicyr   r      )namer   c                    s   | t krtd|  dn"tjd d dkr<td|  ddd ld d fdd	}G fd
ddttd |t d<  t d< t |  S )Nz"module 'uvloop' has no attribute ''r   r:   z;' (it was removed in Python 3.16, use uvloop.run() instead)r   r   c                      s2   t jdd dkr"tjdtdd t   dS )zA helper function to install uvloop policy.

        This function is deprecated and will be removed in Python 3.16.
        Use `uvloop.run()` instead.
        Nr   r#   zRuvloop.install() is deprecated in favor of uvloop.run() starting with Python 3.12.r   )
stacklevel)r%   r&   	_warningswarnDeprecationWarningr   Zset_event_loop_policyr   )r9   r   r   r8      s    z__getattr__.<locals>.installc                       s   e Zd ZdZedddZejrDejdddZ	ej
ejddd	ZG d
d d jZddddZed fddZeje ddddZedddZdS )z$__getattr__.<locals>.EventLoopPolicyal  Event loop policy for uvloop.

        This class is deprecated and will be removed in Python 3.16.
        Use `uvloop.run()` instead.

        >>> import asyncio
        >>> import uvloop
        >>> asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
        >>> asyncio.get_event_loop()
        <uvloop.Loop running=False closed=False debug=False>
        r   c                 S   s   t  S N)r   selfr   r   r   _loop_factory   s    z2__getattr__.<locals>.EventLoopPolicy._loop_factoryc                 S   s   d S rB   r   rC   r   r   r   get_child_watcher   s    z6__getattr__.<locals>.EventLoopPolicy.get_child_watcher)watcherr   c                 S   s   d S rB   r   )rD   rG   r   r   r   set_child_watcher   s    z6__getattr__.<locals>.EventLoopPolicy.set_child_watcherc                   @   s    e Zd ZU dZeje ed< dS )z+__getattr__.<locals>.EventLoopPolicy._LocalN_loop)r   r   r   rI   _typingOptional_AbstractEventLoop__annotations__r   r   r   r   _Local   s   
rN   Nc                 S   s   |   | _d S rB   )rN   _localrC   r   r   r   __init__   s    z-__getattr__.<locals>.EventLoopPolicy.__init__c                    s&   | j jdkrtd  j | j jS )z~Get the event loop for the current context.

            Returns an instance of EventLoop or raises an exception.
            Nz,There is no current event loop in thread %r.)rO   rI   r'   current_threadr<   rC   	threadingr   r   get_event_loop   s    z3__getattr__.<locals>.EventLoopPolicy.get_event_loopr3   c                 S   s4   |dk	r(t |ts(tdt|j d|| j_dS )zSet the event loop.Nz<loop must be an instance of AbstractEventLoop or None, not 'r=   )r   rL   r   typer   rO   rI   )rD   r   r   r   r   r+      s
    z3__getattr__.<locals>.EventLoopPolicy.set_event_loopc                 S   s   |   S )zvCreate a new event loop.

            You must call set_event_loop() to make this the current event loop.
            )rE   rC   r   r   r   r      s    z3__getattr__.<locals>.EventLoopPolicy.new_event_loop)r   r   r   __doc__r   rE   rJ   TYPE_CHECKINGNoReturnrF   AnyrH   localrN   rP   rL   rT   rK   r+   r   r   rR   r   r   r9      s   r9   ZAbstractEventLoopPolicyr8   )_deprecated_namesAttributeErrorr%   r&   rS   getattrr   globals)r<   r8   r   )r9   rS   r   __getattr__   s    
E

r_   )$Zasyncior   typingrJ   sysr%   warningsr?    r   Z
__includesr   r   Z
__BaseLoop_versionr   r	   TuplestrrM   ZAbstractEventLooprL   TypeVarr
   r   rW   	CoroutinerY   rK   Callableboolr   r-   r[   r&   r_   r   r   r   r   <module>   s:    

B