a *Na@szdZddlZddlZddlZddlZddlmZddlmZddlmZddl m Z Gdd d ej Z Gd d d e ZdS) z/The implementation of the SocketOptionsAdapter.N)adapters) connection) poolmanager) exceptionscsdeZdZdZedur0eejdejej dfgZ ngZ e e jdfddZd fd d ZZS) SocketOptionsAdapteradAn 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 Ndefault_socket_optionszThis 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|_tt|jfi|dS)Nsocket_options)popdefault_optionsr superr__init__)selfkwargs __class__/private/var/folders/js/6pj4vh5d4zd0k6bxv74qrbhr0000gr/T/pip-target-22xwyzbs/lib/python/requests_toolbelt/adapters/socket_options.pyr5szSocketOptionsAdapter.__init__Fcs:tjdkr"tj||||jd|_ntt||||dS)Ni) num_poolsmaxsizeblockr )requests __build__r PoolManagerr r rinit_poolmanager)r connectionsrrrrrr;s   z%SocketOptionsAdapter.init_poolmanager)F)__name__ __module__ __qualname____doc__rgetattrHTTPConnectionsocket IPPROTO_TCP TCP_NODELAYr warningswarnexcZRequestsVersionTooOldrr __classcell__rrrrrs rcs eZdZdZfddZZS)TCPKeepAliveAdapteraJAn 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): - ``idle`` - ``interval`` - ``count`` 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|dtj}|dd}|dd}|dd}|tjtjdfg}ttd ddurl|tjtj|fg7}n(t j d krttd d }|tj||fg7}ttd ddur|tjtj |fg7}ttdddur|tjtj |fg7}t t|jfd|i|dS)Nr idle<intervalcountr TCP_KEEPINTVLdarwin TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE)r rr r# SOL_SOCKET SO_KEEPALIVEr!r$r1sysplatformr5r6r r*r)rrr r+r-r/r3rrrrds2        zTCPKeepAliveAdapter.__init__)rrrr rr)rrrrr*Jsr*)r r#r&r9rr_compatrrrr( HTTPAdapterrr*rrrrs    ;