
    IhC&                    D   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ erddlmZ dZ eed      Z ed      d        Z G d de      Ze	j:                   G d d             Z G d d      Zeefd       Z  G d d      Z!y)z&Base async HTTP client implementation.    )annotationsN)	responses)TYPE_CHECKING)Thenablemaybe_promisepromise)	HttpError)coro)bytes_to_str)
maybe_listmemoize)TracebackType)HeadersResponseRequest
BaseClientpypy_version_infoi  )maxsizec                P    dj                  d | j                  d      D              S )N-c              3  <   K   | ]  }|j                           y wN)
capitalize).0ps     U/var/www/html/planif/env/lib/python3.12/site-packages/kombu/asynchronous/http/base.py	<genexpr>z#normalize_header.<locals>.<genexpr>   s     ;qALLN;s   )joinsplit)keys    r   normalize_headerr!      s    88;CIIcN;;;    c                      e Zd ZdZdZdZy)r   z%Represents a mapping of HTTP headers.FN)__name__
__module____qualname____doc__complete	_prev_key r"   r   r   r      s    / H Ir"   r   c                      e Zd ZdZdxZxZxZxZxZxZ	xZ
xZxZxZxZxZZdZdZdZdZdZdZesdZ	 	 	 d
dZddZd	 Zy)r   a?  A HTTP Request.

    Arguments:
    ---------
        url (str): The URL to request.
        method (str): The HTTP method to use (defaults to ``GET``).

    Keyword Arguments:
    -----------------
        headers (Dict, ~kombu.asynchronous.http.Headers): Optional headers for
            this request
        body (str): Optional body for this request.
        connect_timeout (float): Connection timeout in float seconds
            Default is 30.0.
        timeout (float): Time in float seconds before the request times out
            Default is 30.0.
        follow_redirects (bool): Specify if the client should follow redirects
            Enabled by default.
        max_redirects (int): Maximum number of redirects (default 6).
        use_gzip (bool): Allow the server to use gzip compression.
            Enabled by default.
        validate_cert (bool): Set to true if the server certificate should be
            verified when performing ``https://`` requests.
            Enabled by default.
        auth_username (str): Username for HTTP authentication.
        auth_password (str): Password for HTTP authentication.
        auth_mode (str): Type of HTTP authentication (``basic`` or ``digest``).
        user_agent (str): Custom user agent for this request.
        network_interface (str): Network interface to use for this request.
        on_ready (Callable): Callback to be called when the response has been
            received. Must accept single ``response`` argument.
        on_stream (Callable): Optional callback to be called every time body
            content has been read from the socket.  If specified then the
            response body and buffer attributes will not be available.
        on_timeout (callable): Optional callback to be called if the request
            times out.
        on_header (Callable): Optional callback to be called for every header
            line received from the server.  The signature
            is ``(headers, line)`` and note that if you want
            ``response.headers`` to be populated then your callback needs to
            also call ``client.on_header(headers, line)``.
        on_prepare (Callable): Optional callback that is implementation
            specific (e.g. curl client will pass the ``curl`` instance to
            this callback).
        proxy_host (str): Optional proxy host.  Note that a ``proxy_port`` must
            also be provided or a :exc:`ValueError` will be raised.
        proxy_username (str): Optional username to use when logging in
            to the proxy.
        proxy_password (str): Optional password to use when authenticating
            with the proxy server.
        ca_certs (str): Custom CA certificates file to use.
        client_key (str): Optional filename for client SSL key.
        client_cert (str): Optional filename for client SSL certificate.
    Ng      >@T   )
urlmethodon_ready
on_timeout	on_stream
on_prepare	on_headerheaders__weakref____dict__c	                   || _         |xs | j                  | _        t        |      xs
 t               | _        t        |      | _        t        |      | _        t        |      | _        t        |      | _        |	r%|	j                         D ]  \  }
}t        | |
|        t        |t              st        |xs i       }|| _        y r   )r-   r.   r   r   r/   r0   r1   r2   r3   itemssetattr
isinstancer   r4   )selfr-   r.   r/   r0   r1   r2   r3   r4   kwargskvs               r   __init__zRequest.__init__t   s     +%h/<79'
3&y1'
3&y1 $1a#$'7+gm,Gr"   c                <    | j                   j                  ||       y r   )r/   then)r;   callbackerrbacks      r   rA   zRequest.then   s    8W-r"   c                $    dj                  |       S )Nz&<Request: {0.method} {0.url} {0.body}>)formatr;   s    r   __repr__zRequest.__repr__   s    7>>tDDr"   )GETNNNNNNr   )r$   r%   r&   r'   body
user_agentnetwork_interfaceauth_usernameauth_password	auth_mode
proxy_host
proxy_portproxy_usernameproxy_passwordca_certs
client_keyclient_certconnect_timeoutrequest_timeoutfollow_redirectsmax_redirectsuse_gzipvalidate_certPYPY	__slots__r?   rA   rG   r*   r"   r   r   r   *   s    5t /33D 3: 3) 33%3(1333"033A3 	3 OOMHM0	 EI<@".Er"   r   c                  Z    e Zd ZdZesdZ	 	 d	dZd Zed        Z	ed        Z
ed        Zy)
r   a	  HTTP Response.

    Arguments
    ---------
        request (~kombu.asynchronous.http.Request): See :attr:`request`.
        code (int): See :attr:`code`.
        headers (~kombu.asynchronous.http.Headers): See :attr:`headers`.
        buffer (bytes): See :attr:`buffer`
        effective_url (str): See :attr:`effective_url`.
        status (str): See :attr:`status`.

    Attributes
    ----------
        request (~kombu.asynchronous.http.Request): object used to
            get this response.
        code (int): HTTP response code (e.g. 200, 404, or 500).
        headers (~kombu.asynchronous.http.Headers): HTTP headers
            for this response.
        buffer (bytes): Socket read buffer.
        effective_url (str): The destination url for this request after
            following redirects.
        error (Exception): Error instance if the request resulted in
            a HTTP error code.
        status (str): Human equivalent of :attr:`code`,
            e.g. ``OK``, `Not found`, or 'Internal Server Error'.
    )	requestcoder4   buffereffective_urlerrorstatus_bodyr5   Nc                   || _         || _        ||n	t               | _        || _        |xs |j
                  | _        d | _        |xs  t        j                  | j                  d      | _
        || _        | j                  F| j                  dk  s| j                  dkD  r't        | j                  | j                  |       | _        y y y )NUnknown   i+  )r_   r`   r   r4   ra   r-   rb   re   r   getrd   rc   r	   )r;   r_   r`   r4   ra   rb   rc   rd   s           r   r?   zResponse.__init__   s    	")"5w79*9gkk
C	dii C
::499s?dii#o"499dkk4@DJ 7Fr"   c                4    | j                   r| j                   y)zRaise if the request resulted in an HTTP error code.

        Raises
        ------
            :class:`~kombu.exceptions.HttpError`
        N)rc   rF   s    r   raise_for_errorzResponse.raise_for_error   s     ::** r"   c                    | j                   +| j                  | j                  j                         | _         | j                   S )zThe full contents of the response body.

        Note:
        ----
            Accessing this property will evaluate the buffer
            and subsequent accesses will be cached.
        )re   ra   getvaluerF   s    r   rI   zResponse.body   s6     ::{{&![[113
zzr"   c                    | j                   S r   )r`   rF   s    r   status_codezResponse.status_code       yyr"   c                    | j                   S r   )rI   rF   s    r   contentzResponse.content   rp   r"   )NNNNN)r$   r%   r&   r'   r\   r]   r?   rk   propertyrI   ro   rr   r*   r"   r   r   r      sd    6 @	 <@8<A      r"   r   c              #  p  K   	 d \  }}|j                  d      r|sd|_        $|d   j                         rD|j                  }dj	                  |j                  |      xs d|j                         g      ||<   n7|j                  dd      \  }} | |      x}|_        |j                         ||<   w)N   zHTTP/Tr     :)	
startswithr(   isspacer)   r   ri   lstripr   strip)keytliner4   pkeyr    values         r   header_parserr      s     
w??7##G!W__$$DHHgkk$&7&=2t{{}%MNGDMC+JC&*3i/C'# ;;=GCL s   B4B6c                  X    e Zd ZdZeZeZeZd Zd Zd Z	d Z
d Zd Z	 	 	 	 	 	 	 	 d
dZy	)r   zBase class for HTTP clients.

    This class provides the basic structure and functionality for HTTP clients.
    Subclasses should implement specific HTTP client behavior.
    c                0    || _         t               | _        y r   )hubr   _header_parser)r;   r   r<   s      r   r?   zBaseClient.__init__   s    +or"   c                    t        |      xs g D ]<  }t        || j                        s | j                  |fi |}| j                  |       > y r   )r   r:   r   add_request)r;   r_   r<   reqs       r   performzBaseClient.perform   sL    g&," 	"Cc4<<0"dll31&1S!	"r"   c                    t        d      )Nzmust implement add_request)NotImplementedError)r;   r_   s     r   r   zBaseClient.add_request  s    !">??r"   c                     y r   r*   rF   s    r   closezBaseClient.close  s    r"   c                    	 | j                   j                  t        |      |f       y # t        $ r t	               | _         Y y w xY wr   )r   sendr   StopIterationr   )r;   r4   r~   s      r   r3   zBaseClient.on_header	  s>    	2$$l4&8'%BC 	2"//D	2s   &) AAc                    | S r   r*   rF   s    r   	__enter__zBaseClient.__enter__  s    r"   c                $    | j                          y r   )r   )r;   exc_typeexc_valexc_tbs       r   __exit__zBaseClient.__exit__  s     	

r"   N)r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | NonereturnNone)r$   r%   r&   r'   r   r   r   r?   r   r   r   r3   r   r   r*   r"   r   r   r      sb     GGH."@2, & %	
 
r"   r   )"r'   
__future__r   syshttp.clientr   typingr   viner   r   r   kombu.exceptionsr	   kombu.utils.compatr
   kombu.utils.encodingr   kombu.utils.functionalr   r   typesr   __all__hasattrr\   r!   dictr   registerr   r   r   r   r*   r"   r   <module>r      s    , " 
 !   1 1 & # - 6#
:s'( 	< <
d 
 
^E ^E ^EBM M` ' ) )"* *r"   