Skip to content

Commit b179e4b

Browse files
committed
feat: bind query parameters (#219)
1 parent 4920739 commit b179e4b

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

influxdb_client/client/query_api.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
import csv
99
from datetime import datetime, timedelta
1010
from typing import List, Generator, Any
11-
from pytz import UTC
1211

1312
from influxdb_client import Dialect, IntegerLiteral, BooleanLiteral, FloatLiteral, DateTimeLiteral, StringLiteral, \
1413
VariableAssignment, Identifier, OptionStatement, File, DurationLiteral, Duration, UnaryExpression
1514
from influxdb_client import Query, QueryService
1615
from influxdb_client.client.flux_csv_parser import FluxCsvParser, FluxSerializationMode
1716
from influxdb_client.client.flux_table import FluxTable, FluxRecord
17+
from influxdb_client.client.util.date_utils import get_date_helper
1818

1919

2020
class QueryApi(object):
@@ -101,7 +101,7 @@ def query_stream(self, query: str, org=None, params: dict = None) -> Generator['
101101
if org is None:
102102
org = self._influxdb_client.org
103103

104-
response = self._query_api.post_query(org=org, query=self._create_query(query, self.default_dialect),
104+
response = self._query_api.post_query(org=org, query=self._create_query(query, self.default_dialect, params),
105105
async_req=False, _preload_content=False, _return_http_data_only=False)
106106

107107
_parser = FluxCsvParser(response=response, serialization_mode=FluxSerializationMode.stream)
@@ -165,6 +165,8 @@ def _params_to_extern_ast(params: dict) -> List['OptionStatement']:
165165

166166
statements = []
167167
for key, value in params.items():
168+
if value is None:
169+
continue
168170

169171
if isinstance(value, bool):
170172
literal = BooleanLiteral("BooleanLiteral", value)
@@ -173,10 +175,7 @@ def _params_to_extern_ast(params: dict) -> List['OptionStatement']:
173175
elif isinstance(value, float):
174176
literal = FloatLiteral("FloatLiteral", value)
175177
elif isinstance(value, datetime):
176-
if not value.tzinfo:
177-
value = UTC.localize(value)
178-
else:
179-
value = value.astimezone(UTC)
178+
value = get_date_helper().to_utc(value)
180179
literal = DateTimeLiteral("DateTimeLiteral", value.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
181180
elif isinstance(value, timedelta):
182181
# convert to microsecodns

influxdb_client/client/util/date_utils.py

+14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""Utils to get right Date parsing function."""
2+
import datetime
23

34
from dateutil import parser
5+
from pytz import UTC
46

57
date_helper = None
68

@@ -30,6 +32,18 @@ def to_nanoseconds(self, delta):
3032

3133
return nanoseconds_in_days + nanoseconds_in_seconds + nanoseconds_in_micros
3234

35+
def to_utc(self, value: datetime):
36+
"""
37+
Convert datetime to UTC timezone.
38+
39+
:param value: datetime
40+
:return: datetime in UTC
41+
"""
42+
if not value.tzinfo:
43+
return UTC.localize(value)
44+
else:
45+
return value.astimezone(UTC)
46+
3347

3448
def get_date_helper() -> DateHelper:
3549
"""

influxdb_client/client/write/point.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,7 @@ def _convert_timestamp(timestamp, precision=DEFAULT_WRITE_PRECISION):
204204
if isinstance(timestamp, timedelta) or isinstance(timestamp, datetime):
205205

206206
if isinstance(timestamp, datetime):
207-
if not timestamp.tzinfo:
208-
timestamp = UTC.localize(timestamp)
209-
else:
210-
timestamp = timestamp.astimezone(UTC)
211-
timestamp = timestamp - EPOCH
207+
timestamp = date_helper.to_utc(timestamp) - EPOCH
212208

213209
ns = date_helper.to_nanoseconds(timestamp)
214210

0 commit comments

Comments
 (0)