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