
    .Ph                         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dS )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

    Ndefault_socket_options   zThis 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                     |                     d| j                  | _         t          t          |           j        di | d S )Nsocket_options )popdefault_optionsr   superr	   __init__)selfkwargs	__class__s     i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/requests_toolbelt/adapters/socket_options.pyr   zSocketOptionsAdapter.__init__5   sN    $jj)9)-)=? ? 	3"D))2<<V<<<<<    Fc                     t           j        dk    r$t          j        |||| j                  | _        d S t          t          |                               |||           d S )Ni  )	num_poolsmaxsizeblockr   )requests	__build__r   PoolManagerr   r   r	   init_poolmanager)r   connectionsr   r   r   s       r   r   z%SocketOptionsAdapter.init_poolmanager;   sv    ))*6%#2	     D &-->>We    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	      s         . !'%$ &"4a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                    |                     dt          j                  }|                     dd          }|                     dd          }|                     dd          }|t          j        t          j        dfgz   }t          t          d	d           |t          j        t          j        |fgz  }n9t          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          |           j        dd|i| d S )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J Jzz&"%%::j"--

7A&&' 3Q7+
 
 6?D11= 2F4H ( * + +NN\X%% $FOTBBM 2M8LMMN6=$//; 2F4FNOON6>400< 2F4GNOON1!4((1 	
 	
)	
-3	
 	
 	
 	
 	
r   )r!   r"   r#   r$   r   r.   r/   s   @r   r1   r1   J   sB         2
 
 
 
 
 
 
 
 
r   r1   )r$   r'   r*   rA   r   r   _compatr   r    r   r,   HTTPAdapterr	   r1   r   r   r   <module>rF      s    5 5   



                    ! ! ! ! ! !            8 8 8 8 88/ 8 8 8v7
 7
 7
 7
 7
. 7
 7
 7
 7
 7
r   