Ë
    ±Œjµ  ã                   ó˜   — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z  G d„ d	ej                  «      Z G d
„ de«      Zy)z/The implementation of the SocketOptionsAdapter.é    N)Úadaptersé   )Ú
connection)Úpoolmanager)Ú
exceptionsc                   óÊ   ‡ — e Zd ZdZe�- eej                  dej                  ej                  dfg«      Z
ng Z
 ej                  ej                  d«       ˆ fd„Zdˆ fd„	Zˆ xZS )ÚSocketOptionsAdapterad  An adapter for requests that allows users to specify socket options.

    Since version 2.4.0 of requests, it is possible to specify a custom list
    of socket options that need to be set before establishing the connection.

    Example usage::

        >>> import socket
        >>> import requests
        >>> from requests_toolbelt.adapters import socket_options
        >>> s = requests.Session()
        >>> opts = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 0)]
        >>> adapter = socket_options.SocketOptionsAdapter(socket_options=opts)
        >>> s.mount('http://', adapter)

    You can also take advantage of the list of default options on this class
    to keep using the original options in addition to your custom options. In
    that case, ``opts`` might look like::

        >>> opts = socket_options.SocketOptionsAdapter.default_options + opts

    Údefault_socket_optionsé   z¤This version of Requests is only compatible with a version of urllib3 which is too old to support setting options on a socket. This adapter is functionally useless.c                 ón   •— |j                  d| j                  «      | _        t        t        | �  di |¤Ž y )NÚsocket_options© )ÚpopÚdefault_optionsr   Úsuperr	   Ú__init__)ÚselfÚkwargsÚ	__class__s     €ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/requests_toolbelt/adapters/socket_options.pyr   zSocketOptionsAdapter.__init__5   s5   ø€ Ø$Ÿj™jÐ)9Ø)-×)=Ñ)=ó?ˆÔô 	Ô" DÑ2Ñ<°VÓ<ó    c                 ó¨   •— t         j                  dk\  r)t        j                  |||| j                  ¬«      | _        y t
        t        | �  |||«       y )Ni  )Ú	num_poolsÚmaxsizeÚblockr   )ÚrequestsÚ	__build__r   ÚPoolManagerr   r   r	   Úinit_poolmanager)r   Úconnectionsr   r   r   s       €r   r   z%SocketOptionsAdapter.init_poolmanager;   sO   ø€ Ü×Ñ Ò)ä*×6Ñ6Ø%ØØØ#×2Ñ2ô	 ˆDÕô Ô&¨Ñ>Ø˜W eõr   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚgetattrÚHTTPConnectionÚsocketÚIPPROTO_TCPÚTCP_NODELAYr   ÚwarningsÚwarnÚexcÚRequestsVersionTooOldr   r   Ú__classcell__©r   s   @r   r	   r	      sp   ø„ ñð. ÐÙ!Ø×%Ñ%Ø$Ø× Ñ  &×"4Ñ"4°aÐ8Ð9ó
‰ð ˆØˆ�‰�c×/Ñ/ð.ô	/ô=÷ñ r   r	   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚTCPKeepAliveAdapteraJ  An adapter for requests that turns on TCP Keep-Alive by default.

    The adapter sets 4 socket options:

    - ``SOL_SOCKET`` ``SO_KEEPALIVE`` - This turns on TCP Keep-Alive
    - ``IPPROTO_TCP`` ``TCP_KEEPINTVL`` 20 - Sets the keep alive interval
    - ``IPPROTO_TCP`` ``TCP_KEEPCNT`` 5 - Sets the number of keep alive probes
    - ``IPPROTO_TCP`` ``TCP_KEEPIDLE`` 60 - Sets the keep alive time if the
      socket library has the ``TCP_KEEPIDLE`` constant

    The latter three can be overridden by keyword arguments (respectively):

    - ``interval``
    - ``count``
    - ``idle``

    You can use this adapter like so::

       >>> from requests_toolbelt.adapters import socket_options
       >>> tcp = socket_options.TCPKeepAliveAdapter(idle=120, interval=10)
       >>> s = requests.Session()
       >>> s.mount('http://', tcp)

    c                 óâ  •— |j                  dt        j                  «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|t        j                  t        j
                  dfgz   }t        t        d	d «      �&|t        j                  t        j                  |fgz  }n;t        j                  d
k(  r(t        t        dd«      }|t        j                  ||fgz  }t        t        dd «      �%|t        j                  t        j                  |fgz  }t        t        dd «      �%|t        j                  t        j                  |fgz  }t        t        | �>  dd|i|¤Ž y )Nr   Úidleé<   Úintervalé   Úcounté   r   ÚTCP_KEEPINTVLÚdarwinÚTCP_KEEPALIVEé   ÚTCP_KEEPCNTÚTCP_KEEPIDLEr   )r   r	   r   r'   Ú
SOL_SOCKETÚSO_KEEPALIVEr%   r(   r9   ÚsysÚplatformr=   r>   r   r1   r   )r   r   r   r3   r5   r7   r;   r   s          €r   r   zTCPKeepAliveAdapter.__init__d   s_  ø€ ØŸ™Ð$4Ü$8×$HÑ$HóJˆà�z‰z˜& "Ó%ˆØ—:‘:˜j¨"Ó-ˆØ—
‘
˜7 AÓ&ˆØ'Ü×Ñ¤× 3Ñ 3°QÐ7ð+
ñ 
ˆô ”6˜?¨DÓ1Ð=Ø¤× 2Ñ 2´F×4HÑ4HØ (ð *ð +ñ +‰Nä�\‰\˜XÒ%ô $¤F¨O¸TÓBˆMØ¤× 2Ñ 2°MÀ8ÐLÐMÑMˆNä”6˜=¨$Ó/Ð;Ø¤× 2Ñ 2´F×4FÑ4FÈÐNÐOÑOˆNä”6˜>¨4Ó0Ð<Ø¤× 2Ñ 2´F×4GÑ4GÈÐNÐOÑOˆNäÔ! 4Ñ1ñ 	
Ø)ð	
Ø-3ó	
r   )r!   r"   r#   r$   r   r.   r/   s   @r   r1   r1   J   s   ø„ ñ÷2
ð 
r   r1   )r$   r'   r*   rA   r   r   Ú_compatr   r   Ú r   r,   ÚHTTPAdapterr	   r1   r   r   r   Ú<module>rF      s@   ðá 5Û Û Û 
ã Ý å  Ý !Ý  ô8˜8×/Ñ/ô 8ôv7
Ð.õ 7
r   