Skip to content

Commit dacdee8

Browse files
Merge pull request #72 from domoinc/RequestTimeoutSupport
Supporting a configurable request timeout configuration
2 parents 2914688 + 5672df1 commit dacdee8

File tree

2 files changed

+26
-22
lines changed

2 files changed

+26
-22
lines changed

pydomo/Transport.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ class DomoAPITransport:
1313
serialization and deserialization of objects.
1414
"""
1515

16-
def __init__(self, client_id, client_secret, api_host, use_https, logger):
16+
def __init__(self, client_id, client_secret, api_host, use_https, logger, request_timeout):
1717
self.apiHost = self._build_apihost(api_host, use_https)
1818
self.clientId = client_id
1919
self.clientSecret = client_secret
2020
self.logger = logger
2121
self._renew_access_token()
22+
self.request_timeout = request_timeout
2223

2324
@staticmethod
2425
def _build_apihost(host, use_https):
@@ -68,7 +69,8 @@ def request(self, url, method, headers, params=None, body=None):
6869
self.logger.debug('{} {} {}'.format(method, url, body))
6970
request_args = {'method': method, 'url': url, 'headers': headers,
7071
'params': params, 'data': body, 'stream': True}
71-
72+
if self.request_timeout:
73+
request_args['timeout'] = self.request_timeout
7274
response = requests.request(**request_args)
7375
if response.status_code == requests.codes.UNAUTHORIZED:
7476
self._renew_access_token()

pydomo/__init__.py

+22-20
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@ def __init__(self, client_id, client_secret, api_host='api.domo.com', **kwargs):
8181
else:
8282
self.logger = parent_logger
8383

84+
timeout = kwargs.get('request_timeout', None)
85+
8486
if kwargs.get('log_level'):
8587
self.logger.setLevel(kwargs['log_level'])
8688
self.logger.debug("\n" + DOMO + "\n")
8789

88-
self.transport = DomoAPITransport(client_id, client_secret, api_host, kwargs.get('use_https', True), self.logger)
90+
self.transport = DomoAPITransport(client_id, client_secret, api_host, kwargs.get('use_https', True), self.logger, request_timeout = timeout)
8991
self.datasets = DataSetClient(self.transport, self.logger)
9092
self.groups = GroupClient(self.transport, self.logger)
9193
self.pages = PageClient(self.transport, self.logger)
@@ -137,7 +139,7 @@ def ds_list(self, df_output = True, per_page=50, offset=0, limit=0):
137139
- `per_page`: results per page. Default 50 (int)
138140
- `offset`: offset if you need to paginate results. Default 0 (int)
139141
- `limit`: max ouput to return. If 0 then return all results on page. Default 0 (int)
140-
142+
141143
:Returns:
142144
list or pandas dataframe depending on parameters
143145
@@ -148,7 +150,7 @@ def ds_list(self, df_output = True, per_page=50, offset=0, limit=0):
148150
else:
149151
out = DataFrame(list(l))
150152
return out
151-
153+
152154
def ds_query(self, dataset_id, query, return_data=True):
153155
"""
154156
Evaluate query and return dataset in a dataframe
@@ -161,7 +163,7 @@ def ds_query(self, dataset_id, query, return_data=True):
161163
- `dataset_id`: id of a dataset (str)
162164
- `query`: query object (dict)
163165
- `return_data`: should the result be a dataframe. Default True (Boolean)
164-
166+
165167
:Returns:
166168
dict or pandas dataframe depending on parameters
167169
"""
@@ -180,10 +182,10 @@ def ds_get(self, dataset_id):
180182
181183
:Parameters:
182184
- `dataset_id`: id of a dataset (str)
183-
185+
184186
:Returns:
185187
pandas dataframe
186-
"""
188+
"""
187189
csv_download = self.datasets.data_export(dataset_id, include_csv_header=True)
188190

189191
content = StringIO(csv_download)
@@ -232,14 +234,14 @@ def pdp_create(self, dataset_id, pdp_request):
232234
, "not": false } ], "users": [ 27 ],"groups": [ ]}
233235
234236
:Parameters:
235-
- `dataset_id`: id of the dataset PDP will be applied to (String) Required
237+
- `dataset_id`: id of the dataset PDP will be applied to (String) Required
236238
Policy Object:
237239
- `name`: Name of the Policy (String) Required
238-
- `filters[].column`: Name of the column to filter on (String) Required
240+
- `filters[].column`: Name of the column to filter on (String) Required
239241
- `filters[].not`: Determines if NOT is applied to the filter operation (Boolean) Required
240-
- `filters[].operator`: Matching operator (EQUALS) (String) Required
241-
- `filters[].values[]`: Values to filter on (String) Required
242-
- `type`: Type of policy (user or system) (String) Required
242+
- `filters[].operator`: Matching operator (EQUALS) (String) Required
243+
- `filters[].values[]`: Values to filter on (String) Required
244+
- `type`: Type of policy (user or system) (String) Required
243245
- `users`: List of user IDs the policy applies to (array) Required
244246
- `groups`: List of group IDs the policy applies to (array) Required
245247
"""
@@ -252,7 +254,7 @@ def pdp_delete(self, dataset_id, policy_id):
252254
>>> domo.pdp_delete('4405ff58-1957-45f0-82bd-914d989a3ea3', 35)
253255
254256
:Parameters:
255-
- `dataset_id`: id of the dataset PDP will be applied to (String) Required
257+
- `dataset_id`: id of the dataset PDP will be applied to (String) Required
256258
- `policy_id`: id of the policy to delete (String) Required
257259
"""
258260
return self.datasets.delete_pdp(dataset_id, policy_id)
@@ -267,7 +269,7 @@ def pdp_list(self, dataset_id, df_output = True):
267269
:Parameters:
268270
- `dataset_id`: id of dataset with PDP policies (str) Required
269271
- `df_output`: should the result be a dataframe. Default True (Boolean)
270-
272+
271273
:Returns:
272274
list or pandas dataframe depending on parameters
273275
@@ -297,15 +299,15 @@ def pdp_update(self, dataset_id, policy_id, policy_update):
297299
, "not": false } ], "users": [ 27 ],"groups": [ ]}
298300
299301
:Parameters:
300-
- `dataset_id`: id of the dataset PDP will be applied to (String) Required
301-
- `policy_id`: id of the PDP pollicy that will be updated (String) Required
302+
- `dataset_id`: id of the dataset PDP will be applied to (String) Required
303+
- `policy_id`: id of the PDP pollicy that will be updated (String) Required
302304
Policy Object:
303305
- `name`: Name of the Policy (String) Required
304-
- `filters[].column`: Name of the column to filter on (String) Required
306+
- `filters[].column`: Name of the column to filter on (String) Required
305307
- `filters[].not`: Determines if NOT is applied to the filter operation (Boolean) Required
306-
- `filters[].operator`: Matching operator (EQUALS) (String) Required
307-
- `filters[].values[]`: Values to filter on (String) Required
308-
- `type`: Type of policy (user or system) (String) Required
308+
- `filters[].operator`: Matching operator (EQUALS) (String) Required
309+
- `filters[].values[]`: Values to filter on (String) Required
310+
- `type`: Type of policy (user or system) (String) Required
309311
- `users`: List of user IDs the policy applies to (array) Required
310312
- `groups`: List of group IDs the policy applies to (array) Required
311313
"""
@@ -600,7 +602,7 @@ def accounts_list(self):
600602
- `per_page`: results per page. Default 50 (int)
601603
- `offset`: offset if you need to paginate results. Default 0 (int)
602604
- `limit`: max ouput to return. If 0 then return all results on page. Default 0 (int)
603-
605+
604606
605607
:returns:
606608
- A list of dicts (with nesting possible)

0 commit comments

Comments
 (0)