U
    nËjÛ	  ã                   @  st   d dl mZ d dlZd dlmZ ddlmZmZ ejddd�Z	ejd	d
d�Z
d
dgZG dd„ dƒZG dd
„ d
ƒZdS )é    )ÚannotationsN)ÚTracebackTypeé   )ÚRequestÚResponseÚTÚBaseTransport)ÚboundÚAÚAsyncBaseTransportc                   @  sP   e Zd Zdddœdd„Zddddd	d
œdd„Zdddœdd„Zd	dœdd„ZdS )r   r   ©ÚselfÚreturnc                 C  s   | S ©N© ©r   r   r   ú:/tmp/pip-unpacked-wheel-7ig9zwdf/httpx/_transports/base.pyÚ	__enter__   s    zBaseTransport.__enter__Nútype[BaseException] | NoneúBaseException | NoneúTracebackType | NoneÚNone©Úexc_typeÚ	exc_valueÚ	tracebackr   c                 C  s   |   ¡  d S r   )Úclose©r   r   r   r   r   r   r   Ú__exit__   s    zBaseTransport.__exit__r   r   ©Úrequestr   c                 C  s   t dƒ‚dS )aT  
        Send a single HTTP request and return a response.

        Developers shouldn't typically ever need to call into this API directly,
        since the Client class provides all the higher level user-facing API
        niceties.

        In order to properly release any network resources, the response
        stream should *either* be consumed immediately, with a call to
        `response.stream.read()`, or else the `handle_request` call should
        be followed with a try/finally block to ensuring the stream is
        always closed.

        Example usage:

            with httpx.HTTPTransport() as transport:
                req = httpx.Request(
                    method=b"GET",
                    url=(b"https", b"www.example.com", 443, b"/"),
                    headers=[(b"Host", b"www.example.com")],
                )
                resp = transport.handle_request(req)
                body = resp.stream.read()
                print(resp.status_code, resp.headers, body)


        Takes a `Request` instance as the only argument.

        Returns a `Response` instance.
        z0The 'handle_request' method must be implemented.N©ÚNotImplementedError©r   r    r   r   r   Úhandle_request   s    ÿzBaseTransport.handle_request©r   c                 C  s   d S r   r   r   r   r   r   r   =   s    zBaseTransport.close)NNN)Ú__name__Ú
__module__Ú__qualname__r   r   r$   r   r   r   r   r   r      s      ü#c                   @  sP   e Zd Zdddœdd„Zddddd	d
œdd„Zdddœdd„Zd	dœdd„ZdS )r   r
   r   c                 Ã  s   | S r   r   r   r   r   r   Ú
__aenter__B   s    zAsyncBaseTransport.__aenter__Nr   r   r   r   r   c                 Ã  s   |   ¡ I d H  d S r   )Úacloser   r   r   r   Ú	__aexit__E   s    zAsyncBaseTransport.__aexit__r   r   r   c                 Ã  s   t dƒ‚d S )Nz6The 'handle_async_request' method must be implemented.r!   r#   r   r   r   Úhandle_async_requestM   s    ÿz'AsyncBaseTransport.handle_async_requestr%   c                 Ã  s   d S r   r   r   r   r   r   r*   U   s    zAsyncBaseTransport.aclose)NNN)r&   r'   r(   r)   r+   r,   r*   r   r   r   r   r   A   s      ü)Ú
__future__r   ÚtypingÚtypesr   Z_modelsr   r   ÚTypeVarr   r
   Ú__all__r   r   r   r   r   r   Ú<module>   s   3