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

62 lines
1.7 KiB
Python

'''
Created on 19.03.2013
@author: kca
'''
from httplib import HTTPConnection, HTTPSConnection
from futile.logging import LoggerMixin
class HttplibResponseWrapper(LoggerMixin):
def __init__(self, connection, *args, **kw):
super(HttplibResponseWrapper, self).__init__(*args, **kw)
self.__response = connection.getresponse()
self.__connection = connection
def __getattr__(self, k):
return getattr(self.__response, k)
def __enter__(self):
return self.__response
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
def close(self):
try:
self.__response.close()
except:
self.logger.exception("Error closing response")
finally:
self.__connection.close()
class SimpleConnectionManager(LoggerMixin):
def __init__(self, host, port, certfile = None, keyfile = None, force_ssl = False, *args, **kw):
super(SimpleConnectionManager, self).__init__(*args, **kw)
self.logger.debug("Creating SimpleConnectionManager for %s:%s", host, port)
if keyfile or certfile or force_ssl:
self.__certfile = certfile
self.__keyfile = keyfile
self._get_connection = self._get_secure_connection
self.__host = host
self.__port = port
def request(self, method, path, body, headers, timeout):
connection = self._get_connection(timeout)
try:
connection.request(method, path, body, headers)
return HttplibResponseWrapper(connection)
except:
connection.close()
raise
def _get_connection(self, timeout):
return HTTPConnection(self.__host, self.__port, timeout = timeout)
def _get_secure_connection(self, timeout):
return HTTPSConnection(self.__host, self.__port, self.__keyfile, self.__certfile, timeout = timeout)