a
    ^g                     @   sz   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	 d	ejZG d
d deZdS )z/The implementation of the SocketOptionsAdapter.    N)adapters   )
connection)poolmanager)
exceptionsc                       sd   e Zd ZdZedur0eejdejej	dfgZ
ng Z
eejd  fddZd fd	d
	Z  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                    s*   | d| j| _tt| jf i | d S )Nsocket_options)popdefault_optionsr
   superr   __init__)selfkwargs	__class__ w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/requests_toolbelt/adapters/socket_options.pyr   5   s    zSocketOptionsAdapter.__init__Fc                    s:   t jdkr"tj|||| jd| _ntt| ||| d S )Ni  )	num_poolsmaxsizeblockr
   )requests	__build__r   PoolManagerr
   r   r   init_poolmanager)r   connectionsr   r   r   r   r   r   ;   s    


z%SocketOptionsAdapter.init_poolmanager)F)__name__
__module____qualname____doc__r   getattrHTTPConnectionsocketIPPROTO_TCPTCP_NODELAYr   warningswarnexcZRequestsVersionTooOldr   r   __classcell__r   r   r   r   r      s   r   c                       s    e Zd ZdZ fddZ  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                    s   | dtj}| dd}| dd}| dd}|tjtjdfg }ttd	d d url|tjtj|fg7 }n(t	j
d
krttdd}|tj||fg7 }ttdd d ur|tjtj|fg7 }ttdd d ur|tjtj|fg7 }tt| jf d|i| d S )Nr
   idle<   interval   count   r	   TCP_KEEPINTVLdarwinTCP_KEEPALIVE   TCP_KEEPCNTTCP_KEEPIDLE)r   r   r   r#   
SOL_SOCKETSO_KEEPALIVEr!   r$   r1   sysplatformr5   r6   r   r*   r   )r   r   r
   r+   r-   r/   r3   r   r   r   r   d   s2    


zTCPKeepAliveAdapter.__init__)r   r   r   r    r   r)   r   r   r   r   r*   J   s   r*   )r    r#   r&   r9   r   r   Z_compatr   r    r   r(   HTTPAdapterr   r*   r   r   r   r   <module>   s   ;