
    i2                         d Z ddlmZmZmZ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mZ dd	lmZ dd
lmZ ddlmZ  e
ed          Z G d de          ZdS )zSThis module contains methods to make POST and GET requests using the httpx library.    )
CollectionOptionalTupleUnionN)DefaultValue)
get_logger)HTTPVersionODVInput	SocketOpt)warn)NetworkErrorTimedOut)BaseRequest)RequestData)PTBDeprecationWarningHTTPXRequestc                   &   e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 dd	ed
eeee	j
        e	j        f                  dee         dee         dee         dee         dedeee                  deeee	j
        e	j        f                  dee         fdZedefd            Zedee         fd            Zde	j        fdZddZddZdej        ej        ej        ej        fdededee         dee         dee         dee         dee         deeef         fdZdS ) r   a  Implementation of :class:`~telegram.request.BaseRequest` using the library
    `httpx <https://www.python-httpx.org>`_.

    .. versionadded:: 20.0

    Args:
        connection_pool_size (:obj:`int`, optional): Number of connections to keep in the
            connection pool. Defaults to ``1``.

            Note:
                Independent of the value, one additional connection will be reserved for
                :meth:`telegram.Bot.get_updates`.
        proxy_url (:obj:`str`, optional): Legacy name for :paramref:`proxy`, kept for backward
            compatibility. Defaults to :obj:`None`.

            .. deprecated:: 20.7
        read_timeout (:obj:`float` | :obj:`None`, optional): If passed, specifies the maximum
            amount of time (in seconds) to wait for a response from Telegram's server.
            This value is used unless a different value is passed to :meth:`do_request`.
            Defaults to ``5``.
        write_timeout (:obj:`float` | :obj:`None`, optional): If passed, specifies the maximum
            amount of time (in seconds) to wait for a write operation to complete (in terms of
            a network socket; i.e. POSTing a request or uploading a file).
            This value is used unless a different value is passed to :meth:`do_request`.
            Defaults to ``5``.

            Hint:
                This timeout is used for all requests except for those that upload media/files.
                For the latter, :paramref:`media_write_timeout` is used.
        connect_timeout (:obj:`float` | :obj:`None`, optional): If passed, specifies the
            maximum amount of time (in seconds) to wait for a connection attempt to a server
            to succeed. This value is used unless a different value is passed to
            :meth:`do_request`. Defaults to ``5``.
        pool_timeout (:obj:`float` | :obj:`None`, optional): If passed, specifies the maximum
            amount of time (in seconds) to wait for a connection to become available.
            This value is used unless a different value is passed to :meth:`do_request`.
            Defaults to ``1``.

            Warning:
                With a finite pool timeout, you must expect :exc:`telegram.error.TimedOut`
                exceptions to be thrown when more requests are made simultaneously than there are
                connections in the connection pool!
        http_version (:obj:`str`, optional): If ``"2"`` or ``"2.0"``, HTTP/2 will be used instead
            of HTTP/1.1. Defaults to ``"1.1"``.

            .. versionadded:: 20.1
            .. versionchanged:: 20.2
                Reset the default version to 1.1.

            .. versionchanged:: 20.5
                Accept ``"2"`` as a valid value.
        socket_options (Collection[:obj:`tuple`], optional): Socket options to be passed to the
            underlying `library             <https://www.encode.io/httpcore/async/#httpcore.AsyncConnectionPool.__init__>`_.

            Note:
                The values accepted by this parameter depend on the operating system.
                This is a low-level parameter and should only be used if you are familiar with
                these concepts.

            .. versionadded:: 20.7
        proxy (:obj:`str` | ``httpx.Proxy`` | ``httpx.URL``, optional): The URL to a proxy server,
            a ``httpx.Proxy`` object or a ``httpx.URL`` object. For example
            ``'http://127.0.0.1:3128'`` or ``'socks5://127.0.0.1:3128'``. Defaults to :obj:`None`.

            Note:
                * The proxy URL can also be set via the environment variables ``HTTPS_PROXY`` or
                  ``ALL_PROXY``. See `the docs of httpx`_ for more info.
                * HTTPS proxies can be configured by passing a ``httpx.Proxy`` object with
                  a corresponding ``ssl_context``.
                * For Socks5 support, additional dependencies are required. Make sure to install
                  PTB via :command:`pip install "python-telegram-bot[socks]"` in this case.
                * Socks5 proxies can not be set via environment variables.

            .. _the docs of httpx: https://www.python-httpx.org/environment_variables/#proxies

            .. versionadded:: 20.7
        media_write_timeout (:obj:`float` | :obj:`None`, optional): Like :paramref:`write_timeout`,
            but used only for requests that upload media/files. This value is used unless a
            different value is passed to :paramref:`do_request.write_timeout` of
            :meth:`do_request`. Defaults to ``20`` seconds.

            .. versionadded:: 21.0

    )_client_client_kwargs_http_version_media_write_timeout   N      @      ?1.1      4@connection_pool_size	proxy_urlread_timeoutwrite_timeoutconnect_timeoutpool_timeouthttp_versionsocket_optionsproxymedia_write_timeoutc                 x   ||	t          d          |!|}	t          t          dd          d           || _        |
| _        t          j        ||||          }t          j        ||          }|dvrt          d	          |d
k    }|| d}|rt          j        |          nd }||	||d|| _	        	 | 
                                | _        d S # t          $ rZ}dt          |          vrdt          |          vr|dt          |          v rt          d          |t          d          |d }~ww xY w)Nz>The parameters `proxy_url` and `proxy` are mutually exclusive.z20.7z=The parameter `proxy_url` is deprecated. Use `proxy` instead.   )
stacklevelconnectreadwritepool)max_connectionsmax_keepalive_connections)r   2z2.0z2`http_version` must be either '1.1', '2.0' or '2'.r   )http1http2)r$   )timeoutr%   limits	transportzhttpx[http2]zhttpx[socks]z\To use Socks5 proxies, PTB must be installed via `pip install "python-telegram-bot[socks]"`.zTTo use HTTP/2, PTB must be installed via `pip install "python-telegram-bot[http2]"`.)
ValueErrorr   r   r   r   httpxTimeoutLimitsAsyncHTTPTransportr   _build_clientr   ImportErrorstrRuntimeError)selfr   r   r   r    r!   r"   r#   r$   r%   r&   r4   r5   r2   http_kwargsr6   excs                    d/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/telegram/request/_httpxrequest.py__init__zHTTPXRequest.__init__   s     U%6]^^^ E%[  	    *$7!-#	
 
 
 0&:
 
 

 222QRRR% %E	::
 E$-     	 "	
 

 
	--//DLLL 	 	 	SXX--.C2P2P	S))"5   1  	s   :C 
D9AD44D9returnc                     | j         S )zn
        :obj:`str`: Used HTTP version, see :paramref:`http_version`.

        .. versionadded:: 20.2
        )r   r@   s    rC   r#   zHTTPXRequest.http_version   s     !!    c                 $    | j         j        j        S )zSee :attr:`BaseRequest.read_timeout`.

        Returns:
            :obj:`float` | :obj:`None`: The default read timeout in seconds as passed to
                :paramref:`HTTPXRequest.read_timeout`.
        )r   r4   r,   rG   s    rC   r   zHTTPXRequest.read_timeout   s     |#((rH   c                 .    t          j        di | j        S )N )r8   AsyncClientr   rG   s    rC   r<   zHTTPXRequest._build_client   s     774#6777rH   c                 X   K   | j         j        r|                                 | _         dS dS )z#See :meth:`BaseRequest.initialize`.N)r   	is_closedr<   rG   s    rC   
initializezHTTPXRequest.initialize   s4      <! 	0--//DLLL	0 	0rH   c                    K   | j         j        rt                              d           dS | j                                          d{V  dS )z!See :meth:`BaseRequest.shutdown`.z2This HTTPXRequest is already shut down. Returning.N)r   rN   _LOGGERdebugacloserG   s    rC   shutdownzHTTPXRequest.shutdown   sW      <! 	MMNOOOFl!!###########rH   urlmethodrequest_datac                 L  K   | j         j        rt          d          |r|j        nd}|r|j        nd}	t          |t                    r| j         j        j        }t          |t                    r| j         j        j	        }t          |t                    r| j         j        j
        }t          |t                    r|s| j         j        j        n| j        }t          j        ||||          }
	 | j                             ||d| j        i|
||	           d{V }n|# t          j        $ r8}t          |t          j                  rt'          d          |t&          |d}~wt          j        $ r%}t+          d|j        j         d	|           |d}~ww xY w|j        |j        fS )
z#See :meth:`BaseRequest.do_request`.z%This HTTPXRequest is not initialized!Nr*   z
User-Agent)rV   rU   headersr4   filesdatazPool timeout: All connections in the connection pool are occupied. Request was *not* sent to Telegram. Consider adjusting the connection pool size or the pool timeout.)messagezhttpx.z: )r   rN   r?   multipart_datajson_parameters
isinstancer   r4   r,   r+   r.   r-   r   r8   r9   request
USER_AGENTTimeoutExceptionPoolTimeoutr   	HTTPErrorr   	__class____name__status_codecontent)r@   rU   rV   rW   r   r    r!   r"   rZ   r[   r4   reserrs                rC   
do_requestzHTTPXRequest.do_request   s      <! 	HFGGG/;E++/;E|++ lL11 	5</4Lo|44 	;"l2:OlL11 	5</4Lm\22 	c>CbDL066IbM-#	
 
 
	R,,%t7 -        CC % 		$ 		$ 		$#u011 9    # 	R 	R 	R G(>GG#GGHHcQ	R ++s$   .-D F+3EF0 FF)
r   Nr   r   r   r   r   NNr   )rE   N)rf   
__module____qualname____doc__	__slots__intr   r   r>   r8   ProxyURLfloatr	   r   r   rD   propertyr#   r   rL   r<   rO   rT   r   DEFAULT_NONEr   r
   r   bytesrk   rK   rH   rC   r   r   )   sV       T Tl WI %&BF(+),+.(+$):>>B/3H H!H E#u{EI"=>?H uo	H
  H "%H uoH "H !I!67H c5;	9:;H &e_H H H HT "c " " " X" )huo ) ) ) X)8u0 8 8 8 80 0 0 0
$ $ $ $ /3(3(@)4)A+6+C(3(@?, ?,?, ?, {+	?,
 uo?,  ?, "%?, uo?, 
sEz	?, ?, ?, ?, ?, ?,rH   )rn   typingr   r   r   r   r8   telegram._utils.defaultvaluer   telegram._utils.loggingr   telegram._utils.typesr	   r
   r   telegram._utils.warningsr   telegram.errorr   r   telegram.request._baserequestr   telegram.request._requestdatar   telegram.warningsr   rf   rQ   r   rK   rH   rC   <module>r      s.  & Z Y 5 5 5 5 5 5 5 5 5 5 5 5  5 5 5 5 5 5 . . . . . . B B B B B B B B B B ) ) ) ) ) ) 1 1 1 1 1 1 1 1 5 5 5 5 5 5 5 5 5 5 5 5 3 3 3 3 3 3 *X~
.
.E, E, E, E, E,; E, E, E, E, E,rH   