Files
OpenMTC/build/lib/futile/net/http/client/ConnectionPoolManager.py
Christian Klopp e9af73dfe8 initial commit
2017-11-07 14:41:38 +01:00

55 lines
1.7 KiB
Python

'''
Created on 19.03.2013
@author: kca
'''
from logging import DEBUG, WARNING
import futile.logging
import urllib3.connectionpool
from urllib3.connectionpool import HTTPConnectionPool, HTTPSConnectionPool
from futile.logging import LoggerMixin
from futile import ObjectProxy
if not futile.logging.get_logger().isEnabledFor(DEBUG):
urllib3.connectionpool.log.setLevel(WARNING)
class Urllib3ResponseWrapper(ObjectProxy):
def getheader(self, header, default=None):
return self._o.getheader(header.lower(), default)
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
def close(self):
self._o.release_conn()
def isclosed(self):
return False
class ConnectionPoolManager(LoggerMixin):
def __init__(self, host, port, certfile = None, keyfile = None, cacertfile=None, force_ssl = False, *args, **kw):
super(ConnectionPoolManager, self).__init__(*args, **kw)
self.logger.debug("Creating ConnectionPoolManager for %s:%s", host, port)
if certfile or keyfile or force_ssl:
#https://docs.python.org/2/library/ssl.html#ssl.SSLContext
from ssl import SSLContext, PROTOCOL_SSLv23
ssl_context=SSLContext(PROTOCOL_SSLv23)
ssl_context.load_cert_chain(certfile = certfile, keyfile = keyfile)
ssl_context.load_verify_locations(cafile=cacertfile)
#https://docs.python.org/2/library/httplib.html
self.__pool = HTTPSConnectionPool(host, port, maxsize = 16, context = ssl_context)
else:
self.__pool = HTTPConnectionPool(host, port, maxsize = 16)
def request(self, method, path, body, headers, timeout):
return Urllib3ResponseWrapper(self.__pool.urlopen(method, path, body,
headers, timeout = timeout, pool_timeout = 30, preload_content = False, assert_same_host = False))