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

Commit c3f1013

Browse files
author
aviau
committed
New query option: raise_errors (Closes #201)
1 parent 99dc3e7 commit c3f1013

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

influxdb/client.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,18 +267,27 @@ def query(self,
267267
query,
268268
params={},
269269
expected_response_code=200,
270-
database=None):
270+
database=None,
271+
raise_errors=True):
271272
"""Send a query to InfluxDB.
272273
273274
:param query: the actual query string
274275
:type query: str
276+
275277
:param params: additional parameters for the request, defaults to {}
276278
:type params: dict
279+
277280
:param expected_response_code: the expected status code of response,
278281
defaults to 200
279282
:type expected_response_code: int
283+
280284
:param database: database to query, defaults to None
281285
:type database: str
286+
287+
:param raise_errors: Whether or not to raise exceptions when InfluxDB
288+
returns errors, defaults to True
289+
:type raise_errors: bool
290+
282291
:returns: the queried data
283292
:rtype: :class:`~.ResultSet`
284293
"""
@@ -295,7 +304,11 @@ def query(self,
295304

296305
data = response.json()
297306

298-
results = [ResultSet(result) for result in data.get('results', [])]
307+
results = [
308+
ResultSet(result, raise_errors=raise_errors)
309+
for result
310+
in data.get('results', [])
311+
]
299312

300313
# TODO(aviau): Always return a list. (This would be a breaking change)
301314
if len(results) == 1:

influxdb/resultset.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
class ResultSet(object):
1111
"""A wrapper around a single InfluxDB query result"""
1212

13-
def __init__(self, series):
13+
def __init__(self, series, raise_errors=True):
1414
self._raw = series
15+
self._error = self.raw.get('error', None)
1516

16-
if 'error' in self.raw:
17-
raise InfluxDBClientError(self.raw['error'])
17+
if self.error is not None and raise_errors is True:
18+
raise InfluxDBClientError(self.error)
1819

1920
@property
2021
def raw(self):
@@ -25,6 +26,11 @@ def raw(self):
2526
def raw(self, value):
2627
self._raw = value
2728

29+
@property
30+
def error(self):
31+
"""Error returned by InfluxDB"""
32+
return self._error
33+
2834
def __getitem__(self, key):
2935
"""
3036
:param key: Either a serie name, or a tags_dict, or

tests/influxdb/client_test_with_server.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,11 @@ def test_query_fail(self):
370370
self.assertIn('database not found: db',
371371
ctx.exception.content)
372372

373+
def test_query_fail_ignore_errors(self):
374+
result = self.cli.query('select column_one from foo',
375+
raise_errors=False)
376+
self.assertEqual(result.error, 'database not found: db')
377+
373378
def test_create_user(self):
374379
self.cli.create_user('test_user', 'secret_password')
375380
rsp = list(self.cli.query("SHOW USERS")['results'])

0 commit comments

Comments
 (0)