From c3f10130ca11ec99fdd01b250b532b308ddf8aaf Mon Sep 17 00:00:00 2001 From: aviau Date: Mon, 15 Jun 2015 20:16:20 -0400 Subject: [PATCH] New query option: raise_errors (Closes #201) --- influxdb/client.py | 17 +++++++++++++++-- influxdb/resultset.py | 12 +++++++++--- tests/influxdb/client_test_with_server.py | 5 +++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/influxdb/client.py b/influxdb/client.py index cb2084ed..624cafb7 100755 --- a/influxdb/client.py +++ b/influxdb/client.py @@ -267,18 +267,27 @@ def query(self, query, params={}, expected_response_code=200, - database=None): + database=None, + raise_errors=True): """Send a query to InfluxDB. :param query: the actual query string :type query: str + :param params: additional parameters for the request, defaults to {} :type params: dict + :param expected_response_code: the expected status code of response, defaults to 200 :type expected_response_code: int + :param database: database to query, defaults to None :type database: str + + :param raise_errors: Whether or not to raise exceptions when InfluxDB + returns errors, defaults to True + :type raise_errors: bool + :returns: the queried data :rtype: :class:`~.ResultSet` """ @@ -295,7 +304,11 @@ def query(self, data = response.json() - results = [ResultSet(result) for result in data.get('results', [])] + results = [ + ResultSet(result, raise_errors=raise_errors) + for result + in data.get('results', []) + ] # TODO(aviau): Always return a list. (This would be a breaking change) if len(results) == 1: diff --git a/influxdb/resultset.py b/influxdb/resultset.py index 8e5b058e..de7b1a3a 100644 --- a/influxdb/resultset.py +++ b/influxdb/resultset.py @@ -10,11 +10,12 @@ class ResultSet(object): """A wrapper around a single InfluxDB query result""" - def __init__(self, series): + def __init__(self, series, raise_errors=True): self._raw = series + self._error = self.raw.get('error', None) - if 'error' in self.raw: - raise InfluxDBClientError(self.raw['error']) + if self.error is not None and raise_errors is True: + raise InfluxDBClientError(self.error) @property def raw(self): @@ -25,6 +26,11 @@ def raw(self): def raw(self, value): self._raw = value + @property + def error(self): + """Error returned by InfluxDB""" + return self._error + def __getitem__(self, key): """ :param key: Either a serie name, or a tags_dict, or diff --git a/tests/influxdb/client_test_with_server.py b/tests/influxdb/client_test_with_server.py index f665067b..def0289f 100644 --- a/tests/influxdb/client_test_with_server.py +++ b/tests/influxdb/client_test_with_server.py @@ -370,6 +370,11 @@ def test_query_fail(self): self.assertIn('database not found: db', ctx.exception.content) + def test_query_fail_ignore_errors(self): + result = self.cli.query('select column_one from foo', + raise_errors=False) + self.assertEqual(result.error, 'database not found: db') + def test_create_user(self): self.cli.create_user('test_user', 'secret_password') rsp = list(self.cli.query("SHOW USERS")['results']) 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