a
    !fv                     @   s  d dl Z d dlmZ d dlmZmZ ddlmZmZm	Z	 zd dl
Z
W n eyZ   dZ
Y n0 zd dlZW n ey~   dZY n0 edddZG d	d
 d
ZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZdS )    N)TracebackType)OptionalType   )ExceptionMappingPoolTimeoutmap_exceptionsreturnc                  C   sp   zdd l } W n ty"   d}Y n
0 |  }|dvr<td|dkrTtd u rTtd|dkrltd u rltd|S )Nr   asyncio)r   trioz/Running under an unsupported async environment.zBRunning with asyncio requires installation of 'httpcore[asyncio]'.r   z<Running with trio requires installation of 'httpcore[trio]'.)sniffioImportErrorcurrent_async_libraryRuntimeErroranyior   )r   environment r   Z/var/www/html/python-backend/venv/lib/python3.9/site-packages/httpcore/_synchronization.pyr      s     
r   c                   @   s\   e Zd ZddddZddddZd dddZdeee  ee ee	 dd	d
dZ
dS )	AsyncLockNr	   c                 C   s
   d| _ d S N _backendselfr   r   r   __init__0   s    zAsyncLock.__init__c                 C   s6   t  | _| jdkrt | _n| jdkr2t | _dS z~
        Detect if we're running under 'asyncio' or 'trio' and create
        a lock with the correct implementation.
        r   r   N)r   r   r   Lock
_trio_lockr   _anyio_lockr   r   r   r   setup3   s
    

zAsyncLock.setupc                    sH   | j s|   | j dkr*| j I d H  n| j dkrD| j I d H  | S Nr   r   )r   r!   r   acquirer    r   r   r   r   
__aenter__>   s    

zAsyncLock.__aenter__exc_type	exc_value	tracebackr
   c                    s.   | j dkr| j  n| j dkr*| j  d S r"   )r   r   releaser    r   r&   r'   r(   r   r   r   	__aexit__I   s    

zAsyncLock.__aexit__)NNN)__name__
__module____qualname__r   r!   r$   r   r   BaseExceptionr   r+   r   r   r   r   r   /   s      
r   c                   @   sL   e Zd ZddddZddddZddddZdee dd	d
dZdS )
AsyncEventNr	   c                 C   s
   d| _ d S r   r   r   r   r   r   r   V   s    zAsyncEvent.__init__c                 C   s6   t  | _| jdkrt | _n| jdkr2t | _dS r   )r   r   r   Event_trio_eventr   _anyio_eventr   r   r   r   r!   Y   s
    

zAsyncEvent.setupc                 C   s<   | j s|   | j dkr$| j  n| j dkr8| j  d S r"   )r   r!   r2   setr3   r   r   r   r   r4   d   s    

zAsyncEvent.settimeoutr
   c              	      s  | j s|   | j dkrtjti}|d u r2tdn|}t|J t|  | j	 I d H  W d    n1 sp0    Y  W d    n1 s0    Y  nx| j dkrt
ti}t|J t|  | j	 I d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   infr   )r   r!   r   ZTooSlowErrorr   floatr   Z
fail_afterr2   waitTimeoutErrorr   r3   )r   r6   Ztrio_exc_mapZtimeout_or_infZanyio_exc_mapr   r   r   r9   m   s    


N
zAsyncEvent.wait)N)	r,   r-   r.   r   r!   r4   r   r8   r9   r   r   r   r   r0   U   s   	r0   c                   @   sF   e Zd ZeddddZddddZdddd	Zddd
dZdS )AsyncSemaphoreNboundr
   c                 C   s   || _ d| _d S r   )_boundr   r   r=   r   r   r   r      s    zAsyncSemaphore.__init__r	   c                 C   sJ   t  | _| jdkr(tj| j| jd| _n| jdkrFtj| j| jd| _dS )z
        Detect if we're running under 'asyncio' or 'trio' and create
        a semaphore with the correct implementation.
        r   )initial_valueZ	max_valuer   N)r   r   r   	Semaphorer>   _trio_semaphorer   _anyio_semaphorer   r   r   r   r!      s    


zAsyncSemaphore.setupc                    sH   | j s|   | j dkr*| j I d H  n| j dkrD| j I d H  d S r"   )r   r!   rB   r#   rC   r   r   r   r   r#      s    

zAsyncSemaphore.acquirec                    s.   | j dkr| j  n| j dkr*| j  d S r"   )r   rB   r)   rC   r   r   r   r   r)      s    

zAsyncSemaphore.release)r,   r-   r.   intr   r!   r#   r)   r   r   r   r   r;   ~   s   	r;   c                   @   sN   e Zd ZddddZd dddZd
eee  ee ee dddd	Z	dS )AsyncShieldCancellationNr	   c                 C   s>   t  | _| jdkr"tjdd| _n| jdkr:tjdd| _dS )z
        Detect if we're running under 'asyncio' or 'trio' and create
        a shielded scope with the correct implementation.
        r   T)shieldr   N)r   r   r   ZCancelScope_trio_shieldr   _anyio_shieldr   r   r   r   r      s
    

z AsyncShieldCancellation.__init__c                 C   s.   | j dkr| j  n| j dkr*| j  | S r"   )r   rG   	__enter__rH   r   r   r   r   rI      s
    


z!AsyncShieldCancellation.__enter__r%   c                 C   s:   | j dkr| j||| n| j dkr6| j||| d S r"   )r   rG   __exit__rH   r*   r   r   r   rJ      s    

z AsyncShieldCancellation.__exit__)NNN
r,   r-   r.   r   rI   r   r   r/   r   rJ   r   r   r   r   rE      s   	   
rE   c                   @   sN   e Zd ZddddZd dddZd
eee  ee ee dddd	Z	dS )r   Nr	   c                 C   s   t  | _d S N)	threadingr   _lockr   r   r   r   r      s    zLock.__init__c                 C   s   | j   | S rL   )rN   r#   r   r   r   r   rI      s    
zLock.__enter__r%   c                 C   s   | j   d S rL   )rN   r)   r*   r   r   r   rJ      s    zLock.__exit__)NNNrK   r   r   r   r   r      s      
r   c                   @   s>   e Zd ZddddZddddZd
ee dddd	ZdS )r1   Nr	   c                 C   s   t  | _d S rL   )rM   r1   _eventr   r   r   r   r      s    zEvent.__init__c                 C   s   | j   d S rL   )rO   r4   r   r   r   r   r4      s    z	Event.setr5   c                 C   s(   |t dkrd }| jj|ds$t d S )Nr7   )r6   )r8   rO   r9   r   )r   r6   r   r   r   r9      s    z
Event.wait)N)r,   r-   r.   r   r4   r   r8   r9   r   r   r   r   r1      s   r1   c                   @   s8   e Zd ZeddddZddddZdddd	ZdS )
rA   Nr<   c                 C   s   t j|d| _d S )N)value)rM   rA   
_semaphorer?   r   r   r   r      s    zSemaphore.__init__r	   c                 C   s   | j   d S rL   )rQ   r#   r   r   r   r   r#      s    zSemaphore.acquirec                 C   s   | j   d S rL   )rQ   r)   r   r   r   r   r)      s    zSemaphore.release)r,   r-   r.   rD   r   r#   r)   r   r   r   r   rA      s   rA   c                   @   s@   e Zd Zd dddZdeee  ee ee ddddZdS )	ShieldCancellationr	   c                 C   s   | S rL   r   r   r   r   r   rI      s    zShieldCancellation.__enter__Nr%   c                 C   s   d S rL   r   r*   r   r   r   rJ      s    zShieldCancellation.__exit__)NNN)	r,   r-   r.   rI   r   r   r/   r   rJ   r   r   r   r   rR      s      
rR   )rM   typesr   typingr   r   _exceptionsr   r   r   r   r   r   strr   r   r0   r;   rE   r   r1   rA   rR   r   r   r   r   <module>   s(   

&)$*