Skip to content

Commit afb6f8f

Browse files
corywrightanguenot
authored andcommitted
add timeout parameter to get/post/put/delete methods (#20)
1 parent f1b6c49 commit afb6f8f

File tree

5 files changed

+36
-7
lines changed

5 files changed

+36
-7
lines changed

CONTRIBUTING.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,7 @@ Tips
112112
To run a subset of tests::
113113

114114
$ python -m unittest tests.test_iland
115+
116+
To run an individual test::
117+
118+
$ python -m unittest tests.test_iland.TestIland.<test_method_name>

HISTORY.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
History
33
=======
44

5+
1.0.2 (2019-02-15)
6+
------------------
7+
8+
* Added support for `timeout` parameter to `get`/`post`/`put`/`delete` methods
9+
510
1.0.1 (2018-11-15)
611
------------------
712

docs/usage.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,10 @@ and set the ``_proxies`` attribute on the api object::
3737
>>> api._proxies = {'https': 'https://10.10.1.10:3128'}
3838
>>> user = api.get('/user/' + USERNAME)
3939

40+
The ``get``, ``post``, ``put``, and ``delete`` methods can accept an optional
41+
``_timeout`` parameter that is passed to ``requests``::
42+
43+
>>> user = api.get('/user/' + USERNAME, timeout=5.0)
44+
4045
.. _proxies: http://docs.python-requests.org/en/master/user/advanced/#proxies
46+
.. _timeout: http://docs.python-requests.org/en/master/user/quickstart/#timeouts

iland/api.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ def _get_access_token_string(self):
112112
token_string = self._get_access_token()['access_token']
113113
return token_string
114114

115-
def _do_request(self, rpath, verb='GET', form_data=None, headers=None):
115+
def _do_request(self, rpath, verb='GET', form_data=None, headers=None,
116+
timeout=None):
116117
self._refresh_token()
117118
data = None
118119
if form_data is not None:
@@ -141,7 +142,8 @@ def _do_request(self, rpath, verb='GET', form_data=None, headers=None):
141142

142143
request_params = {
143144
'headers': merged_headers,
144-
'verify': self._verify_ssl
145+
'verify': self._verify_ssl,
146+
'timeout': timeout
145147
}
146148

147149
if verb in ('PUT', 'POST'):
@@ -169,7 +171,7 @@ def _do_request(self, rpath, verb='GET', form_data=None, headers=None):
169171
raise ApiException(json_obj)
170172
return json_obj
171173

172-
def get(self, rpath, headers=None):
174+
def get(self, rpath, headers=None, timeout=None):
173175
""" Perform a GET request against the iland cloud API given its
174176
resource path.
175177
@@ -182,9 +184,9 @@ def get(self, rpath, headers=None):
182184
:raises: UnauthorizedException: credentials / grants invalids
183185
:return: a JSON Object or a list of JSON Objects.
184186
"""
185-
return self._do_request(rpath, headers=headers)
187+
return self._do_request(rpath, headers=headers, timeout=timeout)
186188

187-
def put(self, rpath, form_data=None, headers=None):
189+
def put(self, rpath, form_data=None, headers=None, timeout=None):
188190
""" Perform a PUT request against the iland cloud API given its
189191
resource path.
190192
@@ -201,7 +203,7 @@ def put(self, rpath, form_data=None, headers=None):
201203
return self._do_request(rpath, verb='PUT', form_data=form_data,
202204
headers=headers)
203205

204-
def post(self, rpath, form_data=None, headers=None):
206+
def post(self, rpath, form_data=None, headers=None, timeout=None):
205207
""" Perform a POST request against the iland cloud API given its
206208
resource path.
207209
@@ -218,7 +220,7 @@ def post(self, rpath, form_data=None, headers=None):
218220
return self._do_request(rpath, verb='POST', form_data=form_data,
219221
headers=headers)
220222

221-
def delete(self, rpath, headers=None):
223+
def delete(self, rpath, headers=None, timeout=None):
222224
""" Perform a DELETE request against the iland cloud API given its
223225
resource path.
224226

tests/test_iland.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,3 +330,15 @@ def test_get_with_extra_disallowed_header(self):
330330
# Set Accept to text/csv but it's ignored by api, so we get json
331331
req = self.api.get(rpath, headers={'Accept': 'text/csv'})
332332
self.assertEquals(user_data, req)
333+
334+
def test_get_with_timeout(self):
335+
with requests_mock.mock() as m:
336+
m.post(iland.ACCESS_URL,
337+
text=json.dumps(VALID_TOKEN_PAYLOAD),
338+
status_code=200)
339+
rpath = '/user/jchirac'
340+
user_data = {'username': 'jchirac'}
341+
m.get(BASE_URL + rpath, text=json.dumps(user_data),
342+
status_code=200)
343+
req = self.api.get(rpath, timeout=5.0)
344+
self.assertEquals(user_data, req)

0 commit comments

Comments
 (0)