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

New query option: raise_errors (Closes #201) #202

Merged
merged 1 commit into from
Jun 16, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions influxdb/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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`
"""
Expand All @@ -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:
Expand Down
12 changes: 9 additions & 3 deletions influxdb/resultset.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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
Expand Down
5 changes: 5 additions & 0 deletions tests/influxdb/client_test_with_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'])
Expand Down
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