U
    e
                     @  s  d dl mZ 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
 ejdkrdd dlmZ nd dlmZ dZejdk rzd d	lmZ W n ek
r   d
ZY nX edZejdeje f ZejdddddZejdddddZdddddZejdddZG dd deje eje eje ZG dd dejZejded
dZG dd deje Z ed d!d"d#Z!d$d%d&d'd(Z"dS ))    )annotationsN)contextmanager)Scope)   
   )	TypeGuardT)r      )BaseExceptionGroupFT.zAwaitableCallable[T]zTypeGuard[AwaitableCallable[T]])objreturnc                 C  s   d S N r   r   r   4/tmp/pip-unpacked-wheel-2mv5qoba/starlette/_utils.pyis_async_callable   s    r   
typing.Anyz(TypeGuard[AwaitableCallable[typing.Any]]c                 C  s   d S r   r   r   r   r   r   r   !   s    c                 C  s2   t | tjr| j} q t| p0t| o0t| jS r   )
isinstance	functoolspartialfuncasyncioiscoroutinefunctioncallable__call__r   r   r   r   r   &   s
    
T_co)	covariantc                   @  s   e Zd ZdS )AwaitableOrContextManagerN)__name__
__module____qualname__r   r   r   r   r   2   s   r   c                   @  s   e Zd ZddddZdS )SupportsAsyncCloseNoner   c                   s   d S r   r   selfr   r   r   close9   s    zSupportsAsyncClose.closeN)r   r   r    r&   r   r   r   r   r!   8   s   r!   SupportsAsyncCloseType)boundr   c                   @  sL   e Zd ZdZdddddZddd	d
ZddddZdddddZdS ) AwaitableOrContextManagerWrapperawenteredz(typing.Awaitable[SupportsAsyncCloseType]r"   )r+   r   c                 C  s
   || _ d S r   )r+   )r%   r+   r   r   r   __init__E   s    z)AwaitableOrContextManagerWrapper.__init__z:typing.Generator[typing.Any, None, SupportsAsyncCloseType]r#   c                 C  s
   | j  S r   )r+   	__await__r$   r   r   r   r.   H   s    z*AwaitableOrContextManagerWrapper.__await__r'   c                   s   | j I d H | _| jS r   r*   r$   r   r   r   
__aenter__K   s    z+AwaitableOrContextManagerWrapper.__aenter__r   zNone | bool)argsr   c                   s   | j  I d H  d S r   )r,   r&   )r%   r0   r   r   r   	__aexit__O   s    z*AwaitableOrContextManagerWrapper.__aexit__N)r   r   r    	__slots__r-   r.   r/   r1   r   r   r   r   r)   B   s
   r)   z$typing.Generator[(None, None, None)]r#   c               
   c  s^   z
d V  W nN t k
rX }  z0trDt| trDt| jdkrD| jd } q | W 5 d } ~ X Y nX d S )N   r   )BaseExceptionhas_exceptiongroupsr   r	   len
exceptions)excr   r   r   collapse_excgroupsT   s    
r9   r   str)scoper   c                 C  s&   |  dd}td| d| d }|S )N	root_path ^path)getresub)r;   r<   Z
route_pathr   r   r   get_route_path`   s    rC   )#
__future__r   r   r   rA   systyping
contextlibr   Zstarlette.typesr   version_infor   Ztyping_extensionsr5   Zexceptiongroupr	   ImportErrorTypeVarr
   Callable	AwaitableZAwaitableCallableoverloadr   r   AsyncContextManagerProtocolr   r!   r'   Genericr)   r9   rC   r   r   r   r   <module>   sN   



	
    