Thanks to visit codestin.com
Credit goes to github.com

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

Resultset try42 [WIP] #151

Closed
Closed
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
4 changes: 2 additions & 2 deletions influxdb/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,13 +363,13 @@ def get_list_series(self, database=None):
rsp = self.query("SHOW SERIES", database=database)
print "RSP", rsp.raw
print "RSP", rsp['results']
return rsp
return list(rsp)

def get_list_users(self):
"""
Get the list of users
"""
return self.query("SHOW USERS")
return list(self.query("SHOW USERS"))

def delete_series(self, name, database=None):
database = database or self._database
Expand Down
77 changes: 0 additions & 77 deletions influxdb/point.py

This file was deleted.

21 changes: 13 additions & 8 deletions influxdb/resultset.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-

from influxdb.point import Point

_sentinel = object()


Expand Down Expand Up @@ -43,15 +41,15 @@ def __getitem__(self, key):
# like 'show retention policies' ..
if key is None:
for point in serie['values']:
yield Point(None, serie['columns'], point)
yield self.point_from_cols_vals(serie['columns'], point)

elif name in (None, serie_name):
# by default if no tags was provided then
# we will matches every returned serie
serie_tags = serie.get('tags', {})
if tags is None or self._tag_matches(serie_tags, tags):
for point in serie['values']:
yield Point(serie_name, serie['columns'], point, serie_tags)
yield self.point_from_cols_vals(serie['columns'], point)

def __repr__(self):
return str(self.raw)
Expand Down Expand Up @@ -91,14 +89,21 @@ def __len__(self):
def keys(self):
keys = []
for serie in self._get_series():
keys.append((serie['name'], serie['tags']))
keys.append((serie.get('name', None), serie.get('tags', None)))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In which cases would name not be present? Same question for tags? Is it spec'd that no tags returns an empty list from the InfluxDB API: in which case that missing key should raise an exception instead of returning confusing data (None, None), wouldn't you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"system" queries do not return a "name" , and "normal" queries (no "group by tag_name1(, tag_name2, ..)") doesn't return tags either.

NB: it's quite work in progress here ;)

return keys

def items(self):
items = []
for serie in self._get_series():
serie_key = (serie['name'], serie['tags'])
serie_key = (serie.get('name', None), serie.get('tags', None))
items.append(
(serie_key, self.__getitem__(serie_key))
(serie_key, self[serie_key])
)
return items
return items

@staticmethod
def point_from_cols_vals(cols, vals):
point = {}
for col_index, col_name in enumerate(cols):
point[col_name] = vals[col_index]
return point
9 changes: 5 additions & 4 deletions tests/influxdb/client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,12 +266,13 @@ def test_query(self):
"http://localhost:8086/query",
text=example_response
)
self.assertDictEqual(
self.cli.query('select * from foo'),
{'cpu_load_short':
rs = self.cli.query('select * from foo')
self.assertListEqual(
list(rs),
[{'cpu_load_short':
[{'value': 0.64, 'time': '2009-11-10T23:00:00Z'}],
'sdfsdfsdf':
[{'value': 0.64, 'time': '2009-11-10T23:00:00Z'}]}
[{'value': 0.64, 'time': '2009-11-10T23:00:00Z'}]}]
)

@unittest.skip('Not implemented for 0.9')
Expand Down
40 changes: 20 additions & 20 deletions tests/influxdb/client_test_with_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,9 +287,8 @@ def test_fresh_server_no_db(self):
def test_create_database(self):
self.assertIsNone(self.cli.create_database('new_db_1'))
self.assertIsNone(self.cli.create_database('new_db_2'))
rsp = self.cli.get_list_database()
self.assertEqual(
rsp,
self.cli.get_list_database(),
['new_db_1', 'new_db_2']
)

Expand Down Expand Up @@ -522,30 +521,34 @@ def test_get_list_series_empty(self):
def test_get_list_series_non_empty(self):
self.cli.write_points(dummy_point)
rsp = self.cli.get_list_series()
self.assertEqual(
{'cpu_load_short': [
{'region': 'us-west', 'host': 'server01', '_id': 1}]},
rsp
)
self.assertEqual([
{
'serie_name': 'cpu_load_short',
'_id': 1,
"tags": {
"host": "server01",
"region": "us-west"
}
}],
rsp)

def test_default_retention_policy(self):
rsp = self.cli.get_list_retention_policies()
self.assertEqual(
[
{'duration': '0', 'default': True,
'replicaN': 1, 'name': 'default'}],
{'name': 'default', 'duration': '0', 'replicaN': 1, 'default': True}
],
rsp
)

def test_create_retention_policy_default(self):
rsp = self.cli.create_retention_policy('somename', '1d', 4,
default=True)
self.assertIsNone(rsp)
self.cli.create_retention_policy('somename', '1d', 4, default=True)
self.cli.create_retention_policy('another', '2d', 3, default=False)
rsp = self.cli.get_list_retention_policies()
self.assertEqual([
{'columns': ['name', 'duration', 'replicaN', 'default'],
'values': [['default', '0', 1, False],
['somename', '24h0m0s', 4, True]]}],
{'name': 'somename', 'duration': '1d', 'replicaN': 4, 'default': True},
{'name': 'another', 'duration': '2d', 'replicaN': 3, 'default': False}
],
rsp
)

Expand All @@ -554,10 +557,7 @@ def test_create_retention_policy(self):
rsp = self.cli.get_list_retention_policies()
self.assertEqual(
[
{'duration': '0', 'default': True, 'replicaN': 1,
'name': 'default'},
{'duration': '24h0m0s', 'default': False, 'replicaN': 4,
'name': 'somename'}
{'name': 'somename', 'duration': '1d', 'replicaN': 4, 'default': False},
],
rsp
)
Expand Down Expand Up @@ -702,7 +702,7 @@ def test_query_multiple_series(self):
]
self.cli.write_points(pts)

rsp = self.cli.query('SELECT * FROM serie1, serie2')
rsp = self.cli.query('SELECT * FROM serie1; SELECT * FROM serie2')
print(rsp)

# same but with the tags given :
Expand Down
44 changes: 0 additions & 44 deletions tests/influxdb/point_test.py

This file was deleted.

47 changes: 18 additions & 29 deletions tests/influxdb/resultset_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import unittest

from influxdb.resultset import ResultSet
from influxdb.point import Point


class TestResultSet(unittest.TestCase):
Expand Down Expand Up @@ -40,36 +39,22 @@ def test_filter_by_name(self):
self.assertEqual(
list(self.rs['cpu_load_short']),
[
Point("cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server01", "region": "us-west"}),
Point("cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server02", "region": "us-west"})
{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'},
{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'}
]
)

def test_filter_by_tags(self):
self.assertEqual(
list(self.rs[('cpu_load_short', {"host": "server01"})]),
[
Point(
"cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server01", "region": "us-west"}
)
]
[{'time': '2015-01-29T21:51:28.968422294Z', 'value': 0.64}]
)

self.assertEqual(
list(self.rs[('cpu_load_short', {"region": "us-west"})]),
[
Point("cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server01", "region": "us-west"}),
Point("cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server02", "region": "us-west"}),
{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'},
{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'}
]
)

Expand Down Expand Up @@ -98,21 +83,25 @@ def test_items(self):
[
(
('cpu_load_short', {'host': 'server01', 'region': 'us-west'}),
[Point("cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server01", "region": "us-west"})]
[{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'}]
),
(
('cpu_load_short', {'host': 'server02', 'region': 'us-west'}),
[Point("cpu_load_short", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server02", "region": "us-west"})]
[{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'}]
),
(
('other_serie', {'host': 'server01', 'region': 'us-west'}),
[Point("other_serie", ["time", "value"],
["2015-01-29T21:51:28.968422294Z", 0.64],
tags={"host": "server01", "region": "us-west"})]
[{'value': 0.64, 'time': '2015-01-29T21:51:28.968422294Z'}]
)
]
)

def test_point_from_cols_vals(self):
cols = ['col1', 'col2']
vals = [1, '2']

point = ResultSet.point_from_cols_vals(cols, vals)
self.assertDictEqual(
point,
{'col1': 1, 'col2': '2'}
)