diff --git a/consulate/__init__.py b/consulate/__init__.py index 4a14571..f5500a3 100644 --- a/consulate/__init__.py +++ b/consulate/__init__.py @@ -38,10 +38,13 @@ class Consul(object): """ def __init__(self, host=DEFAULT_HOST, port=DEFAULT_PORT, - datacenter=None, token=None): + datacenter=None, token=None, adapter=None): """Create a new instance of the Consul class""" base_uri = self._base_uri(host, port) - self._adapter = adapters.Request() + if adapter: + self._adapter = adapter + else: + self._adapter = adapters.Request() self._acl = api.ACL(base_uri, self._adapter, datacenter, token) self._agent = api.Agent(base_uri, self._adapter, datacenter, token) self._catalog = api.Catalog(base_uri, self._adapter, datacenter, token) diff --git a/consulate/adapters.py b/consulate/adapters.py index fc6d776..b3c2590 100644 --- a/consulate/adapters.py +++ b/consulate/adapters.py @@ -41,10 +41,18 @@ def inner(*args, **kwargs): class Request(object): + """The Request adapter class""" - def __init__(self): - """Create a new request adapter instance""" + + def __init__(self, timeout=None): + """ + Create a new request adapter instance. + + :param int timeout: [optional] timeout to use while sending requests + to consul. + """ self.session = requests.Session() + self._timeout = timeout def delete(self, uri): """Perform a HTTP delete @@ -54,7 +62,7 @@ def delete(self, uri): """ LOGGER.debug("DELETE %s", uri) - response = self.session.delete(uri) + response = self.session.delete(uri, timeout=self._timeout) return api.Response(response.status_code, response.content, response.headers) @@ -67,7 +75,7 @@ def get(self, uri): """ LOGGER.debug("GET %s", uri) - response = self.session.get(uri) + response = self.session.get(uri, timeout=self._timeout) return api.Response(response.status_code, response.content, response.headers) @@ -88,7 +96,9 @@ def put(self, uri, data=None): headers = {'Content-Type': CONTENT_JSON} if not utils.PYTHON3 and data: data = data.encode('utf-8') - response = self.session.put(uri, data=data, headers=headers) + response = self.session.put( + uri, data=data, headers=headers, timeout=self._timeout + ) return api.Response(response.status_code, response.content, response.headers)