Skip to content

Commit c3f1013

Browse files
author
aviau
committed
New query option: raise_errors (Closes influxdata#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy