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

    .. versionadded:: 20.0

    .. versionchanged:: 22.0
        Removed the deprecated parameter ``proxy_url``. Use :paramref:`proxy` instead.

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

            .. versionchanged:: 22.4
                Set the default to ``256``.
                Stopped applying to ``httpx.Limits.max_keepalive_connections``. Now only applies to
                ``httpx.Limits.max_connections``. See `Resource Limits
                <https://www.python-httpx.org/advanced/resource-limits/>`_
        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
        httpx_kwargs (dict[:obj:`str`, Any], optional): Additional keyword arguments to be passed
            to the `httpx.AsyncClient <https://www.python-httpx.org/api/#asyncclient>`_
            constructor.

            Warning:
                This parameter is intended for advanced users that want to fine-tune the behavior
                of the underlying ``httpx`` client. The values passed here will override all the
                defaults set by ``python-telegram-bot`` and all other parameters passed to
                :class:`HTTPXRequest`. The only exception is the :paramref:`media_write_timeout`
                parameter, which is not passed to the client constructor.
                No runtime warnings will be issued about parameters that are overridden in this
                way.

            .. versionadded:: 21.6

    )_client_client_kwargs_http_version_media_write_timeoutNconnection_pool_sizeread_timeoutwrite_timeoutconnect_timeoutpool_timeouthttp_versionsocket_optionsproxymedia_write_timeouthttpx_kwargsc                    || _         |	| _        t        j                  ||||      }t        j                  |      }|dvrt        d      |dk(  }|| d}|rt        j                  |      nd }||||d||
xs i | _        	 | j                         | _	        y # t        $ rE}d	t        |      vrd
t        |      vr d
t        |      v rt        d      |t        d      |d }~ww xY w)Nconnectreadwritepool)max_connections)1.1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]"`.)r   r   httpxTimeoutLimits
ValueErrorAsyncHTTPTransportr   _build_clientr   ImportErrorstrRuntimeError)selfr   r   r   r   r   r   r   r   r   r   r+   r,   r)   http_kwargsr-   excs                    T/root/twitch_bot/venv/lib/python3.12/site-packages/telegram/request/_httpxrequest.py__init__zHTTPXRequest.__init__   s<    *$7!--#	
 0
 22QRR% %E	:
  $$-  	 "	

 
 !r
	--/DL 	SX-.C2PS)"5  1 	s   B 	C+&A C&&C+returnc                     | j                   S )zn
        :obj:`str`: Used HTTP version, see :paramref:`http_version`.

        .. versionadded:: 20.2
        )r   r7   s    r:   r   zHTTPXRequest.http_version   s     !!!    c                 B    | 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   r+   r#   r>   s    r:   r   zHTTPXRequest.read_timeout   s     ||##(((r?   c                 @    t        j                  di | j                  S )N )r.   AsyncClientr   r>   s    r:   r3   zHTTPXRequest._build_client   s      74#6#677r?   c                 d   K   | j                   j                  r| j                         | _         yyw)z#See :meth:`BaseRequest.initialize`.N)r   	is_closedr3   r>   s    r:   
initializezHTTPXRequest.initialize   s(     <<!!--/DL "s   .0c                    K   | j                   j                  rt        j                  d       y| j                   j	                          d{    y7 w)z!See :meth:`BaseRequest.shutdown`.z2This HTTPXRequest is already shut down. Returning.N)r   rE   _LOGGERdebugacloser>   s    r:   shutdownzHTTPXRequest.shutdown   s9     <<!!MMNOll!!###s   A
AAAurlmethodrequest_datac                   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                   j                  ||d| j                   i|
||	       d{   }|j0                  |j2                  fS 7 # t        j"                  $ r3}t        |t        j$                        rt'        d      |t&        |d}~wt        j(                  $ r+}t+        d|j,                  j.                   d	|       |d}~ww xY ww)
z#See :meth:`BaseRequest.do_request`.z%This HTTPXRequest is not initialized!Nr!   z
User-Agent)rM   rL   headersr+   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   rE   r6   multipart_datajson_parameters
isinstancer   r+   r#   r"   r%   r$   r   r.   r/   request
USER_AGENTTimeoutExceptionPoolTimeoutr   	HTTPErrorr   	__class____name__status_codecontent)r7   rL   rM   rN   r   r   r   r   rQ   rR   r+   reserrs                r:   
do_requestzHTTPXRequest.do_request   s     <<!!FGG/;++/;|++ lL1<<//44Lo|4"ll22::OlL1<<//44Lm\2>CDLL0066IbIbM--#	
	R,,%t7 -  C4 ++5 %% 		$#u0019  # 	R (>(>'?r#GHcQ	RsH   D)H ,0E; E9E; !H 9E; ;G=.F<<G=&G88G==H )
         @rd   rd   g      ?r'   NNg      4@N)r<   N)!r]   
__module____qualname____doc__	__slots__intr   floatr	   r   r   r   r5   r.   ProxyURLdictr   r;   propertyr   r   rC   r3   rF   rK   r   DEFAULT_NONEr   r
   tuplebytesrb   rB   r?   r:   r   r   )   s   cJ WI %((+),+.(+$):>>B/315<!< uo<  	<
 "%< uo< "< !I!67< c5;;		9:;< &e_< tCH~.<| "c " " )huo ) )8u00 80
$ /3(3(@(@)4)A)A+6+C+C(3(@(@?,?, ?, {+	?,
 uo?,  ?, "%?, uo?, 
sEz	?,r?   )rg   collections.abcr   typingr   r   r   r.   telegram._utils.defaultvaluer   telegram._utils.loggingr   telegram._utils.typesr	   r
   r   telegram.errorr   r   telegram.request._baserequestr   telegram.request._requestdatar   r]   rH   r   rB   r?   r:   <module>rz      sH   & Z & ' '  5 . B B 1 5 5 X~
.H,; H,r?   