U
    ]                     @   s   d dl Z d dlZd dlmZ ddlmZm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   )
PoolLimitsTimeoutConfigc                   @   s:   e Zd ZdZddddZddddZdddd	ZdS )
TimeoutFlaga  
    A timeout flag holds a state of either read-timeout or write-timeout mode.

    We use this so that we can attempt both reads and writes concurrently, while
    only enforcing timeouts in one direction.

    During a request/response cycle we start in write-timeout mode.

    Once we've sent a request fully, or once we start seeing a response,
    then we switch to read-timeout mode instead.
    Nreturnc                 C   s   d| _ d| _d S )NFTZraise_on_read_timeoutZraise_on_write_timeoutself r   v/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/httpx/concurrency/base.py__init__   s    zTimeoutFlag.__init__c                 C   s   d| _ d| _dS )z4
        Set the flag to read-timeout mode.
        TFNr	   r
   r   r   r   set_read_timeouts   s    zTimeoutFlag.set_read_timeoutsc                 C   s   d| _ d| _dS )z5
        Set the flag to write-timeout mode.
        FTNr	   r
   r   r   r   set_write_timeouts    s    zTimeoutFlag.set_write_timeouts)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s   r   c                   @   sv   e Zd ZdZedddZdeeej	e
dddZe
dd	d
dZde
eddddZddddZedddZdS )BaseTCPStreamz
    A TCP stream with read/write operations. Abstracts away any asyncio-specific
    interfaces into a more generic base class, that we can use with alternate
    backends, or for stand-alone test cases.
    r   c                 C   s
   t  d S NNotImplementedErrorr
   r   r   r   get_http_version/   s    zBaseTCPStream.get_http_versionN)ntimeoutflagr   c                    s
   t  d S r   r   )r   r   r   r   r   r   r   read2   s    zBaseTCPStream.read)datar   c                 C   s
   t  d S r   r   )r   r   r   r   r   write_no_block7   s    zBaseTCPStream.write_no_block)r   r   r   c                    s
   t  d S r   r   )r   r   r   r   r   r   write:   s    zBaseTCPStream.writec                    s
   t  d S r   r   r
   r   r   r   close=   s    zBaseTCPStream.closec                 C   s
   t  d S r   r   r
   r   r   r   is_connection_dropped@   s    z#BaseTCPStream.is_connection_dropped)NN)N)r   r   r   r   strr   intr   typingAnybytesr   r   r    r!   boolr"   r   r   r   r   r   (   s        r   c                   @   s2   e Zd ZdZejdddZejddddZdS )		BaseQueuezG
    A FIFO queue. Abstracts away any asyncio-specific interfaces.
    r   c                    s
   t  d S r   r   r
   r   r   r   getI   s    zBaseQueue.getN)valuer   c                    s
   t  d S r   r   )r   r+   r   r   r   putL   s    zBaseQueue.put)r   r   r   r   r%   r&   r*   r,   r   r   r   r   r)   D   s   r)   c                   @   sH   e Zd ZdZddddZedddZdddd	Zddd
dZdS )	BaseEventzJ
    An event object. Abstracts away any asyncio-specific interfaces.
    Nr   c                 C   s
   t  d S r   r   r
   r   r   r   setU   s    zBaseEvent.setc                 C   s
   t  d S r   r   r
   r   r   r   is_setX   s    zBaseEvent.is_setc                 C   s
   t  d S r   r   r
   r   r   r   clear[   s    zBaseEvent.clearc                    s
   t  d S r   r   r
   r   r   r   wait^   s    zBaseEvent.wait)	r   r   r   r   r.   r(   r/   r0   r1   r   r   r   r   r-   P   s
   r-   c                   @   s,   e Zd ZdZddddZddddZdS )BasePoolSemaphorezk
    A semaphore for use with connection pooling.

    Abstracts away any asyncio-specific interfaces.
    Nr   c                    s
   t  d S r   r   r
   r   r   r   acquirei   s    zBasePoolSemaphore.acquirec                 C   s
   t  d S r   r   r
   r   r   r   releasel   s    zBasePoolSemaphore.release)r   r   r   r   r3   r4   r   r   r   r   r2   b   s   r2   c                   @   s   e Zd Zeeejej e	e
dddZe
eeje	e
dddZeeddd	Zejejejejd
ddZdd ZejejejejdddZdd ZeedddZedddZejejddddZdS )ConcurrencyBackend)hostnameportssl_contextr   r   c                    s
   t  d S r   r   )r   r6   r7   r8   r   r   r   r   open_tcp_streamq   s    z"ConcurrencyBackend.open_tcp_stream)streamr6   r8   r   r   c                    s
   t  d S r   r   )r   r:   r6   r8   r   r   r   r   	start_tlsz   s    zConcurrencyBackend.start_tls)limitsr   c                 C   s
   t  d S r   r   )r   r<   r   r   r   get_semaphore   s    z ConcurrencyBackend.get_semaphore)funcargskwargsr   c                    s
   t  d S r   r   )r   r>   r?   r@   r   r   r   run_in_threadpool   s    z$ConcurrencyBackend.run_in_threadpoolc                   sT   G dd dt   fdd}z| ||I d H V  W q  k
rL   Y qPY qX qd S )Nc                   @   s   e Zd ZdS )zCConcurrencyBackend.iterate_in_threadpool.<locals>.IterationCompleteN)r   r   r   r   r   r   r   IterationComplete   s   rB   c                    s*   z
t | W S  tk
r$     Y nX d S r   )nextStopIteration)iteratorrB   r   r   next_wrapper   s    
z>ConcurrencyBackend.iterate_in_threadpool.<locals>.next_wrapper)	ExceptionrA   )r   rE   rG   r   rF   r   iterate_in_threadpool   s    z(ConcurrencyBackend.iterate_in_threadpool)	coroutiner?   r@   r   c                 O   s
   t  d S r   r   )r   rJ   r?   r@   r   r   r   run   s    zConcurrencyBackend.runc                 c   s2   z|  |jV  W q  tk
r*   Y q.Y q X q d S r   )rK   	__anext__StopAsyncIteration)r   Zasync_iteratorr   r   r   iterate   s    zConcurrencyBackend.iterate)max_sizer   c                 C   s
   t  d S r   r   )r   rO   r   r   r   create_queue   s    zConcurrencyBackend.create_queuer   c                 C   s
   t  d S r   r   r
   r   r   r   create_event   s    zConcurrencyBackend.create_eventBaseBackgroundManager)rJ   r?   r   c                 G   s
   t  d S r   r   )r   rJ   r?   r   r   r   background_manager   s    z%ConcurrencyBackend.background_managerN)r   r   r   r#   r$   r%   OptionalsslZ
SSLContextr   r   r9   r;   r   r2   r=   Callabler&   rA   rI   rK   rN   r)   rP   r-   rQ   rS   r   r   r   r   r5   p   s>   
	     r5   c                   @   sH   e Zd Zd dddZdeje eeddddZdeddd	d
Z	dS )rR   r   c                    s
   t  d S r   r   r
   r   r   r   
__aenter__   s    z BaseBackgroundManager.__aenter__N)exc_type	exc_value	tracebackr   c                    s
   t  d S r   r   )r   rX   rY   rZ   r   r   r   	__aexit__   s    zBaseBackgroundManager.__aexit__)	exceptionr   c                    s@   |d kr|  d d d I d H  n|j}|  t|||I d H  d S r   )r[   __traceback__type)r   r\   rZ   r   r   r   r!      s    zBaseBackgroundManager.close)NNN)N)
r   r   r   rW   r%   ZTypeBaseExceptionr   r[   r!   r   r   r   r   rR      s      rR   )rU   r%   typesr   configr   r   r   r   r)   r-   r2   r5   rR   r   r   r   r   <module>   s    C