§
    ®eîií3  ã                   ó²   — d Z ddlm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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)ÚAnyN)ÚDefaultValue)Ú
get_logger)ÚHTTPVersionÚODVInputÚ	SocketOpt)ÚNetworkErrorÚTimedOut)ÚBaseRequest)ÚRequestDataÚHTTPXRequestc                   óÎ  — e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 dd	ed
edz  dedz  dedz  dedz  dedee	         dz  de
ej        z  ej        z  dz  dedz  dee
ef         dz  fd„Zede
fd„¦   «         Zededz  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dz  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

    .. 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_timeouté   ç      @ç      ð?ú1.1Nç      4@Ú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œ|¥|
pi ¥| _        	 |                      ¦   «         | _	        d S # t          $ rY}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)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]"`.)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                    úb/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/telegram/request/_httpxrequest.pyÚ__init__zHTTPXRequest.__init__‘   s—  € ð *ˆÔØ$7ˆÔ!Ý”-Ø#ØØØð	
ñ 
ô 
ˆõ ”Ø0ð
ñ 
ô 
ˆð Ð2Ð2Ð2ÝÐQÑRÔRÐRà Ò%ˆØ %°E°	Ð:Ð:ˆð
 ð�EÔ$Ø-ðñ ô ð ð ð 	ð ØØØ"ð	
ð 
ð
 ð
ð Ð!˜rð
ˆÔð	Ø×-Ò-Ñ/Ô/ˆDŒLˆLˆLøÝð 	ð 	ð 	Ø¥S¨¡X¤XÐ-Ð-°.ÍÈCÉÌÐ2PÐ2PØà¥ S¡¤Ð)Ð)Ý"ð5ñô ð ðõ ð1ñô ð ðøøøøð	øøøs   ÂB" Â"
DÂ,AD Ä DÚreturnc                 ó   — | j         S )zn
        :obj:`str`: Used HTTP version, see :paramref:`http_version`.

        .. versionadded:: 20.2
        )r   ©r9   s    r<   r   zHTTPXRequest.http_versionÏ   s   € ð Ô!Ð!ó    c                 ó$   — | j         j        j        S )zÐSee :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   € ð Œ|Ô#Ô(Ð(rA   c                 ó.   — t          j        di | j        ¤ŽS )N© )r0   ÚAsyncClientr   r@   s    r<   r5   zHTTPXRequest._build_clientâ   s   € ÝÔ Ð7Ð7 4Ô#6Ð7Ð7Ð7rA   c              ƒ   óX   K  — | j         j        r|                      ¦   «         | _         dS dS )z#See :meth:`BaseRequest.initialize`.N)r   Ú	is_closedr5   r@   s    r<   Ú
initializezHTTPXRequest.initializeå   s4   è è € àŒ<Ô!ð 	0Ø×-Ò-Ñ/Ô/ˆDŒLˆLˆLð	0ð 	0rA   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   rG   Ú_LOGGERÚdebugÚacloser@   s    r<   ÚshutdownzHTTPXRequest.shutdownê   sW   è è € àŒ<Ô!ð 	Ý�MŠMÐNÑOÔOÐOØˆFàŒl×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#rA   Ú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)rO   rN   Úheadersr-   ÚfilesÚdataz§Pool 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   rG   r8   Úmultipart_dataÚjson_parametersÚ
isinstancer   r-   r&   r%   r(   r'   r   r0   r1   ÚrequestÚ
USER_AGENTÚTimeoutExceptionÚPoolTimeoutr   Ú	HTTPErrorr
   Ú	__class__Ú__name__Ústatus_codeÚcontent)r9   rN   rO   rP   r   r   r   r   rS   rT   r-   ÚresÚerrs                r<   Ú
do_requestzHTTPXRequest.do_requestò   s  è è € ð Œ<Ô!ð 	HÝÐFÑGÔGÐGà/;ÐE�Ô+Ð+ÀˆØ/;ÐEˆ|Ô+Ð+Àˆõ �l¥LÑ1Ô1ð 	5Øœ<Ô/Ô4ˆLÝ�o¥|Ñ4Ô4ð 	;Ø"œlÔ2Ô:ˆOÝ�l¥LÑ1Ô1ð 	5Øœ<Ô/Ô4ˆLå�m¥\Ñ2Ô2ð 	cØ>CÐb˜DœLÔ0Ô6Ð6ÈÔIbˆMå”-Ø#ØØØð	
ñ 
ô 
ˆð	RØœ×,Ò,ØØØ% t¤Ð7ØØØð -ñ ô ð ð ð ð ð ð ˆCˆCøõ Ô%ð 		$ð 		$ð 		$Ý˜#�uÔ0Ñ1Ô1ð Ýð9ðñ ô ð ðõ  Ð#øøøøÝŒð 	Rð 	Rð 	Rõ ÐG¨¬Ô(>ÐGÐGÀ#ÐGÐGÑHÔHÈcÐQøøøøð	Røøøð Œ ¤Ð+Ð+s$   Ã.-D ÄFÄ+3EÅFÅ0 FÆF)
r   r   r   r   r   r   NNr   N)r>   N)r_   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__ÚintÚfloatr   r   r	   r7   r0   ÚProxyÚURLÚdictr   r=   Úpropertyr   r   rE   r5   rH   rM   r   ÚDEFAULT_NONEr   r   ÚtupleÚbytesrd   rD   rA   r<   r   r   )   s=  € € € € € ðcð cðJ W€Ið %(Ø%(Ø&)Ø(+Ø%(Ø$)Ø7;Ø6:Ø,0Ø.2ð<ð <à!ð<ð ˜d‘lð<ð ˜t‘|ð	<ð
  ™ð<ð ˜d‘lð<ð "ð<ð # 9Ô-°Ñ4ð<ð �U”[Ñ  5¤9Ñ,¨tÑ3ð<ð # T™\ð<ð ˜3 ˜8”n tÑ+ð<ð <ð <ð <ð| ð"˜cð "ð "ð "ñ „Xð"ð ð)˜e d™lð )ð )ð )ñ „Xð)ð8˜uÔ0ð 8ð 8ð 8ð 8ð0ð 0ð 0ð 0ð
$ð $ð $ð $ð ,0Ø(3Ô(@Ø)4Ô)AØ+6Ô+CØ(3Ô(@ð?,ð ?,àð?,ð ð?,ð " DÑ(ð	?,ð
 ˜u”oð?,ð   ”ð?,ð " %œð?,ð ˜u”oð?,ð 
ˆs�EˆzÔ	ð?,ð ?,ð ?,ð ?,ð ?,ð ?,rA   )rg   Úcollections.abcr   Útypingr   r0   Útelegram._utils.defaultvaluer   Útelegram._utils.loggingr   Útelegram._utils.typesr   r   r	   Útelegram.errorr
   r   Útelegram.request._baserequestr   Útelegram.request._requestdatar   r_   rJ   r   rD   rA   r<   ú<module>rz      s
  ðð& ZÐ Yà &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð à €€€à 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ð ˆ*�X˜~Ñ
.Ô
.€ðH,ð H,ð H,ð H,ð H,�;ñ H,ô H,ð H,ð H,ð H,rA   