ó
o€
\c           @   s   d  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
 d e j f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d S(   s/   The implementation of the SocketOptionsAdapter.iÿÿÿÿN(   t   adaptersi   (   t
   connection(   t   poolmanager(   t
   exceptionst   SocketOptionsAdapterc           B   sr   e  Z d  Z e d k	 rB e e j d e j e j	 d f g ƒ Z
 n g  Z
 e j e j d ƒ d „  Z e d „ Z RS(   sd  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

    t   default_socket_optionsi   s¤   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         K   s2   | j  d |  j ƒ |  _ t t |  ƒ j |   d  S(   Nt   socket_options(   t   popt   default_optionsR   t   superR   t   __init__(   t   selft   kwargs(    (    s^   /data/av2000/b2b/venv/lib/python2.7/site-packages/requests_toolbelt/adapters/socket_options.pyR
   4   s    	c      	   C   s\   t  j d k r< t j d | d | d | d |  j ƒ |  _ n t t |  ƒ j | | | ƒ d  S(   Ni  t	   num_poolst   maxsizet   blockR   (   t   requestst	   __build__R   t   PoolManagerR   R	   R   t   init_poolmanager(   R   t   connectionsR   R   (    (    s^   /data/av2000/b2b/venv/lib/python2.7/site-packages/requests_toolbelt/adapters/socket_options.pyR   :   s    	N(   t   __name__t
   __module__t   __doc__R   t   Nonet   getattrt   HTTPConnectiont   sockett   IPPROTO_TCPt   TCP_NODELAYR   t   warningst   warnt   exct   RequestsVersionTooOldR
   t   FalseR   (    (    (    s^   /data/av2000/b2b/venv/lib/python2.7/site-packages/requests_toolbelt/adapters/socket_options.pyR      s   	t   TCPKeepAliveAdapterc           B   s   e  Z d  Z d „  Z RS(   sJ  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):

    - ``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         K   sâ   | j  d t j ƒ } | j  d d ƒ } | j  d d ƒ } | j  d d ƒ } | t j t j d f t j t j | f t j t j | f g } t	 t d	 d  ƒ d  k	 rÂ | t j t j | f g 7} n  t t |  ƒ j d | |  d  S(
   NR   t   idlei<   t   intervali   t   counti   i   t   TCP_KEEPIDLE(   R   R   R   R   t
   SOL_SOCKETt   SO_KEEPALIVER   t   TCP_KEEPINTVLt   TCP_KEEPCNTR   R   R'   R	   R#   R
   (   R   R   R   R$   R%   R&   (    (    s^   /data/av2000/b2b/venv/lib/python2.7/site-packages/requests_toolbelt/adapters/socket_options.pyR
   c   s    	(   R   R   R   R
   (    (    (    s^   /data/av2000/b2b/venv/lib/python2.7/site-packages/requests_toolbelt/adapters/socket_options.pyR#   I   s   (   R   R   R   R   R    t   _compatR   R   t    R   R    t   HTTPAdapterR   R#   (    (    (    s^   /data/av2000/b2b/venv/lib/python2.7/site-packages/requests_toolbelt/adapters/socket_options.pyt   <module>   s   ;