Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8539a9b

Browse filesBrowse files
authored
feat: add support for serialization FluxTable into JSON (influxdata#320)
1 parent 4a16049 commit 8539a9b
Copy full SHA for 8539a9b

File tree

7 files changed

+418
-2
lines changed
Filter options

7 files changed

+418
-2
lines changed

‎CHANGELOG.md

Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
### Features
44
1. [#319](https://github.com/influxdata/influxdb-client-python/pull/319): Add supports for array expressions in query parameters
5+
2. [#320](https://github.com/influxdata/influxdb-client-python/pull/320): Add JSONEncoder to encode query results to JSON
56

67
### Bug Fixes
78
1. [#321](https://github.com/influxdata/influxdb-client-python/pull/321): Fixes return type for dashboard when `include=properties` is used

‎examples/README.md

Copy file name to clipboardExpand all lines: examples/README.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
## Queries
1212
- [query.py](query.py) - How to query data into `FluxTable`s, `Stream` and `CSV`
1313
- [query_from_file.py](query_from_file.py) - How to use a Flux query defined in a separate file
14+
- [query_response_to_json.py](query_response_to_json.py) - How to serialize Query response to JSON
1415

1516

1617
## Management API

‎examples/query_response_to_json.py

Copy file name to clipboard
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from influxdb_client import InfluxDBClient, Point
2+
from influxdb_client.client.write_api import SYNCHRONOUS
3+
4+
with InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org") as client:
5+
6+
"""
7+
Prepare data
8+
"""
9+
_point1 = Point("my_measurement").tag("location", "Prague").field("temperature", 25.3)
10+
_point2 = Point("my_measurement").tag("location", "New York").field("temperature", 24.3)
11+
12+
client.write_api(write_options=SYNCHRONOUS).write(bucket="my-bucket", record=[_point1, _point2])
13+
14+
"""
15+
Query: using Table structure
16+
"""
17+
tables = client.query_api().query('from(bucket:"my-bucket") |> range(start: -10m)')
18+
19+
"""
20+
Serialize to JSON
21+
"""
22+
import json
23+
from influxdb_client.client.flux_table import FluxStructureEncoder
24+
25+
output = json.dumps(tables, cls=FluxStructureEncoder, indent=2)
26+
print(output)

‎influxdb_client/client/flux_table.py

Copy file name to clipboardExpand all lines: influxdb_client/client/flux_table.py
+26-1Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
44
The data model consists of tables, records, columns.
55
"""
6+
from json import JSONEncoder
67

78

89
class FluxStructure:
@@ -11,8 +12,32 @@ class FluxStructure:
1112
pass
1213

1314

15+
class FluxStructureEncoder(JSONEncoder):
16+
"""The FluxStructure encoder to encode query results to JSON."""
17+
18+
def default(self, obj):
19+
"""Return serializable objects for JSONEncoder."""
20+
import datetime
21+
if isinstance(obj, FluxStructure):
22+
return obj.__dict__
23+
elif isinstance(obj, (datetime.datetime, datetime.date)):
24+
return obj.isoformat()
25+
return super().default(obj)
26+
27+
1428
class FluxTable(FluxStructure):
15-
"""A table is set of records with a common set of columns and a group key."""
29+
"""
30+
A table is set of records with a common set of columns and a group key.
31+
32+
The table can be serialized into JSON by::
33+
34+
import json
35+
from influxdb_client.client.flux_table import FluxStructureEncoder
36+
37+
output = json.dumps(tables, cls=FluxStructureEncoder, indent=2)
38+
print(output)
39+
40+
"""
1641

1742
def __init__(self) -> None:
1843
"""Initialize defaults."""

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.