mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2025-06-15 21:28:08 +00:00
55 lines
1.7 KiB
Python
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))
|
|
|
|
|
|
|