U
    nËjœ
  ã                   @  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mZ d dlm	Z	 ej
dkr\d dlmZ nd dlmZ dZej
dk r z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-pzfrzqh9/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   -   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   Úclose1   ó    zSupportsAsyncClose.closeN)r   r   r    r&   r   r   r   r   r!   0   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__:   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/   =   s    z*AwaitableOrContextManagerWrapper.__await__r(   c                 Ã  s   | j I d H | _| jS r   r+   r$   r   r   r   Ú
__aenter__@   s    z+AwaitableOrContextManagerWrapper.__aenter__r   zNone | bool)Úargsr   c                 Ç  s   | j  ¡ I d H  d S r   )r-   r&   )r%   r1   r   r   r   Ú	__aexit__D   s    z*AwaitableOrContextManagerWrapper.__aexit__N)r   r   r    Ú	__slots__r.   r/   r0   r2   r   r   r   r   r*   7   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_excgroupsI   s    
r:   r   Ústr)Úscoper   c                 C  sZ   | d }|   dd¡}|s|S | |¡s*|S ||kr6dS |t|ƒ dkrV|t|ƒd … S |S )NÚpathÚ	root_pathÚ ú/)ÚgetÚ
startswithr7   )r<   r=   r>   r   r   r   Úget_route_pathU   s    
rC   )"Ú
__future__r   r   r   ÚsysÚtypingÚ
contextlibr   Zstarlette.typesr   Úversion_infor   Ztyping_extensionsr6   Zexceptiongroupr	   ÚImportErrorÚTypeVarr
   ÚCallableÚ	AwaitableZAwaitableCallableÚoverloadr   r   ÚAsyncContextManagerÚProtocolr   r!   r(   ÚGenericr*   r:   rC   r   r   r   r   Ú<module>   s<   



&