Skip to content

Commit 728a488

Browse files
author
aviau
committed
Finalize ResultSet
1 parent 141e664 commit 728a488

File tree

5 files changed

+156
-197
lines changed

5 files changed

+156
-197
lines changed

influxdb/client.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -301,13 +301,7 @@ def get_list_database(self):
301301
"""
302302
Get the list of databases
303303
"""
304-
305-
rsp = self.query("SHOW DATABASES") #['results'][0]['points']
306-
# TODO: to be decided the format of what we return ;)
307-
lrsp = list(rsp)
308-
309-
return [value[0] for value in lrsp[0].get('values', [])]
310-
#return rsp['results'][0]['points']
304+
return list(self.query("SHOW DATABASES")['results'])
311305

312306
def create_database(self, dbname):
313307
"""
@@ -350,19 +344,22 @@ def get_list_retention_policies(self, database=None):
350344
rsp = self.query(
351345
"SHOW RETENTION POLICIES %s" % (database or self._database)
352346
)
353-
# TODO: same here
354-
lrsp = list(rsp)
355-
points = list(rsp[None])
356-
return lrsp
347+
return list(rsp['results'])
357348

358349
def get_list_series(self, database=None):
359350
"""
360351
Get the list of series
361352
"""
362353
rsp = self.query("SHOW SERIES", database=database)
363-
print "RSP", rsp.raw
364-
print "RSP", rsp['results']
365-
return list(rsp)
354+
series = []
355+
for serie in rsp.items():
356+
series.append(
357+
{
358+
"name": serie[0][0],
359+
"tags": list(serie[1])
360+
}
361+
)
362+
return series
366363

367364
def get_list_users(self):
368365
"""

influxdb/resultset.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,41 +25,46 @@ def __getitem__(self, key):
2525
raise TypeError('only 2-tuples allowed')
2626
name = key[0]
2727
tags = key[1]
28-
if not isinstance(tags, dict):
28+
if not isinstance(tags, dict) and tags is not None:
2929
raise TypeError('tags should be a dict')
3030
else:
3131
name = key
3232
tags = None
33-
if not isinstance(name, (str, type(None))):
33+
if not isinstance(name, (str, type(None), type(u''))):
3434
raise TypeError('serie_name must be an str or None')
3535

3636
for serie in self._get_series():
37-
serie_name = serie.get('name', None)
37+
serie_name = serie.get('name', 'results')
3838
if serie_name is None:
3939
# this is a "system" query or a query which
4040
# doesn't return a name attribute.
4141
# like 'show retention policies' ..
4242
if key is None:
4343
for point in serie['values']:
44-
yield self.point_from_cols_vals(serie['columns'], point)
44+
yield self.point_from_cols_vals(
45+
serie['columns'],
46+
point
47+
)
4548

4649
elif name in (None, serie_name):
4750
# by default if no tags was provided then
4851
# we will matches every returned serie
4952
serie_tags = serie.get('tags', {})
5053
if tags is None or self._tag_matches(serie_tags, tags):
51-
for point in serie['values']:
52-
yield self.point_from_cols_vals(serie['columns'], point)
54+
for point in serie.get('values', []):
55+
yield self.point_from_cols_vals(
56+
serie['columns'],
57+
point
58+
)
5359

5460
def __repr__(self):
5561
return str(self.raw)
5662

5763
def __iter__(self):
5864
""" Iterating a ResultSet will yield one dict instance per serie result.
5965
"""
60-
for results in self.raw['results']:
61-
for serie in results['series']:
62-
yield serie
66+
for key in self.keys():
67+
yield list(self.__getitem__(key))
6368

6469
def _tag_matches(self, tags, filter):
6570
"""Checks if all key/values in filter match in tags"""
@@ -89,13 +94,15 @@ def __len__(self):
8994
def keys(self):
9095
keys = []
9196
for serie in self._get_series():
92-
keys.append((serie.get('name', None), serie.get('tags', None)))
97+
keys.append(
98+
(serie.get('name', 'results'), serie.get('tags', None))
99+
)
93100
return keys
94101

95102
def items(self):
96103
items = []
97104
for serie in self._get_series():
98-
serie_key = (serie.get('name', None), serie.get('tags', None))
105+
serie_key = (serie.get('name', 'results'), serie.get('tags', None))
99106
items.append(
100107
(serie_key, self[serie_key])
101108
)

tests/influxdb/client_test.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -266,12 +266,10 @@ def test_query(self):
266266
text=example_response
267267
)
268268
rs = self.cli.query('select * from foo')
269+
269270
self.assertListEqual(
270-
list(rs),
271-
[{'cpu_load_short':
272-
[{'value': 0.64, 'time': '2009-11-10T23:00:00Z'}],
273-
'sdfsdfsdf':
274-
[{'value': 0.64, 'time': '2009-11-10T23:00:00Z'}]}]
271+
list(rs['cpu_load_short']),
272+
[{'value': 0.64, 'time': u'2009-11-10T23:00:00Z'}]
275273
)
276274

277275
@unittest.skip('Not implemented for 0.9')
@@ -350,14 +348,18 @@ def test_drop_database_fails(self):
350348
cli.drop_database('old_db')
351349

352350
def test_get_list_database(self):
353-
data = {'results': [{'series': [
354-
{'name': 'databases', 'columns': ['name'],
355-
'values': [['mydb'], ['myotherdb']]}]}]}
351+
data = {'results': [
352+
{'series': [
353+
{'values': [
354+
['new_db_1'],
355+
['new_db_2']],
356+
'columns': ['name']}]}
357+
]}
356358

357359
with _mocked_session(self.cli, 'get', 200, json.dumps(data)):
358360
self.assertListEqual(
359361
self.cli.get_list_database(),
360-
['mydb', 'myotherdb']
362+
[{'name': 'new_db_1'}, {'name': 'new_db_2'}]
361363
)
362364

363365
@raises(Exception)
@@ -381,8 +383,10 @@ def test_get_list_series(self):
381383

382384
self.assertListEqual(
383385
self.cli.get_list_series(),
384-
[{'duration': '24h0m0s',
385-
'name': 'fsfdsdf', 'replicaN': 2}]
386+
[{'name': 'cpu_load_short',
387+
'tags': [
388+
{'host': 'server01', '_id': 1, 'region': u'us-west'}
389+
]}]
386390
)
387391

388392
def test_create_retention_policy_default(self):

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