o
     d+                     @   s   d dl Z d dlZd dlZd dlZd dlmZ ejdk r"d dlmZ nd dlmZ dej	de
fddZejd	d
dZG dd dee ZG dd deZejdeddZG dd deje ZdS )    N)TracebackType)      )Protocolobjreturnc                 C   s<   t | tjr| j} t | tjst| pt| ot| jS N)
isinstance	functoolspartialfuncasyncioiscoroutinefunctioncallable__call__)r    r   ;/usr/local/lib/python3.10/dist-packages/starlette/_utils.pyis_async_callable   s   
r   T_coT)	covariantc                
   @   sr   e Zd Zdejejdef fddZdefddZdej	ej
e  dej	e d	ej	e dejedf fd
dZdS )AwaitableOrContextManagerr   Nc                 C   s   d S r   r   selfr   r   r   	__await__"   s   z#AwaitableOrContextManager.__await__c                       d S r   r   r   r   r   r   
__aenter__%      z$AwaitableOrContextManager.__aenter__$_AwaitableOrContextManager__exc_type%_AwaitableOrContextManager__exc_value%_AwaitableOrContextManager__tracebackc                    r   r   r   )r   r   r   r   r   r   r   	__aexit__(   s   z#AwaitableOrContextManager.__aexit__)__name__
__module____qualname__typing	GeneratorAnyr   r   r   OptionalTypeBaseExceptionr   Unionboolr    r   r   r   r   r   !   s    r   c                   @   s   e Zd ZdddZdS )SupportsAsyncCloser   Nc                    r   r   r   r   r   r   r   close2   r   zSupportsAsyncClose.close)r   N)r!   r"   r#   r-   r   r   r   r   r,   1   s    r,   SupportsAsyncCloseTypeF)boundr   c                   @   sp   e Zd ZdZdeje ddfddZdejej	def fddZ
defd	d
Zdej	dejdef fddZdS ) AwaitableOrContextManagerWrapperawenteredr2   r   Nc                 C   s
   || _ d S r   )r2   )r   r2   r   r   r   __init__>      
z)AwaitableOrContextManagerWrapper.__init__c                 C   s
   | j  S r   )r2   r   r   r   r   r   r   A   r5   z*AwaitableOrContextManagerWrapper.__await__c                    s   | j I d H | _| jS r   r1   r   r   r   r   r   D   s   z+AwaitableOrContextManagerWrapper.__aenter__argsc                    s   | j  I d H  d S r   )r3   r-   )r   r6   r   r   r   r    H   s   z*AwaitableOrContextManagerWrapper.__aexit__)r!   r"   r#   	__slots__r$   	Awaitabler.   r4   r%   r&   r   r   r*   r+   r    r   r   r   r   r0   ;   s    "r0   )r   r
   sysr$   typesr   version_infotyping_extensionsr   r&   r+   r   TypeVarr   r   r,   r.   Genericr0   r   r   r   r   <module>   s     
	