Skip to content
This repository was archived by the owner on Apr 15, 2024. It is now read-only.

Commit 8c03c0f

Browse files
author
Shaheed Haque
committed
Port away from requests -> urllib3 for thread-safety. Resolves #144.
1 parent 53eb41c commit 8c03c0f

3 files changed

Lines changed: 14 additions & 11 deletions

File tree

consul/std.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
1-
import requests
1+
import urllib3
22

33
from consul import base
44

55

66
__all__ = ['Consul']
7+
JSON_HEADER = {'Content-Type': 'application/json'}
78

89

910
class HTTPClient(base.HTTPClient):
1011
def __init__(self, *args, **kwargs):
1112
super(HTTPClient, self).__init__(*args, **kwargs)
12-
self.session = requests.session()
13+
cert_file = kwargs.get('cert', None)
14+
cert_reqs = 'CERT_REQUIRED' if kwargs.get('verify', False) else None
15+
self.session = urllib3.PoolManager(cert_file=cert_file, cert_reqs=cert_reqs)
1316

1417
def response(self, response):
15-
response.encoding = 'utf-8'
1618
return base.Response(
17-
response.status_code, response.headers, response.text)
19+
response.status, response.headers, response.data.decode('utf-8'))
1820

1921
def get(self, callback, path, params=None):
2022
uri = self.uri(path, params)
2123
return callback(self.response(
22-
self.session.get(uri, verify=self.verify, cert=self.cert)))
24+
self.session.request('GET', uri)))
2325

2426
def put(self, callback, path, params=None, data=''):
2527
uri = self.uri(path, params)
2628
return callback(self.response(
27-
self.session.put(uri, data=data, verify=self.verify,
28-
cert=self.cert)))
29+
self.session.request('PUT', uri, body=data, headers=JSON_HEADER)))
2930

3031
def delete(self, callback, path, params=None):
3132
uri = self.uri(path, params)
3233
return callback(self.response(
33-
self.session.delete(uri, verify=self.verify, cert=self.cert)))
34+
self.session.request('DELETE', uri)))
3435

3536
def post(self, callback, path, params=None, data=''):
3637
uri = self.uri(path, params)
3738
return callback(self.response(
38-
self.session.post(uri, data=data, verify=self.verify,
39-
cert=self.cert)))
39+
self.session.request('POST', uri, body=data, headers=JSON_HEADER)))
4040

4141

4242
class Consul(base.Consul):

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
requests>=2.0
1+
urllib3>=1.25
22
six>=1.4

tox.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ commands =
2121
deps =
2222
pytest
2323
pytest-rerunfailures
24+
requests
2425
commands =
2526
py.test --reruns=3 {posargs:consul tests}
2627

@@ -35,6 +36,7 @@ deps =
3536
tornado
3637
aiohttp
3738
flake8
39+
requests
3840
commands =
3941
py.test --reruns=3 {posargs:consul tests}
4042
flake8 --exclude=".tox/*,xx/*,__*,docs/*"
@@ -50,6 +52,7 @@ deps =
5052
tornado
5153
aiohttp
5254
flake8
55+
requests
5356
commands =
5457
py.test --reruns=3 {posargs:consul tests}
5558
flake8 --exclude=".tox/*,xx/*,__*,docs/*"

0 commit comments

Comments
 (0)