1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
from __future__ import absolute_import
from tornado import gen
from tornado import httpclient
from consul import base
__all__ = ['Consul']
class HTTPClient(base.HTTPClient):
def __init__(self, *args, **kwargs):
super(HTTPClient, self).__init__(*args, **kwargs)
self.client = httpclient.AsyncHTTPClient()
@staticmethod
def response(response):
return base.Response(
response.code,
response.headers,
response.body.decode('utf-8'),
response.body)
@gen.coroutine
def _request(self, callback, request):
try:
response = yield self.client.fetch(request)
except httpclient.HTTPError as e:
if e.code == 599:
raise base.Timeout
response = e.response
raise gen.Return(callback(self.response(response)))
def get(self, callback, path, params=None, headers=None):
uri = self.uri(path, params)
request = httpclient.HTTPRequest(uri,
method='GET',
validate_cert=self.verify,
headers=headers)
return self._request(callback, request)
def put(self, callback, path, params=None, data='', headers=None):
uri = self.uri(path, params)
request = httpclient.HTTPRequest(uri,
method='PUT',
body='' if data is None else data,
validate_cert=self.verify,
headers=headers)
return self._request(callback, request)
def delete(self, callback, path, params=None, data='', headers=None):
uri = self.uri(path, params)
request = httpclient.HTTPRequest(uri,
method='DELETE',
body='' if data is None else data,
validate_cert=self.verify,
headers=headers)
request.allow_nonstandard_methods = True
return self._request(callback, request)
def post(self, callback, path, params=None, data='', headers=None):
uri = self.uri(path, params)
request = httpclient.HTTPRequest(uri,
method='POST',
body=data,
validate_cert=self.verify,
headers=headers)
return self._request(callback, request)
class Consul(base.Consul):
@staticmethod
def http_connect(host, port, scheme, verify=True, cert=None):
return HTTPClient(host, port, scheme, verify=verify, cert=cert)
|