Skip to content

Commit caf42dc

Browse files
committed
feat: ciso8601 as optional dependency #98
1 parent 5ddf643 commit caf42dc

File tree

5 files changed

+35
-6
lines changed

5 files changed

+35
-6
lines changed

ciso-requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ciso8601>=2.1.1

influxdb_client/client/flux_csv_parser.py

+31-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import base64
22
import codecs
33
import csv as csv_parser
4+
import sys
45
from enum import Enum
56
from typing import List
67

7-
import ciso8601
8+
from dateutil import parser
89
from urllib3 import HTTPResponse
910

1011
from influxdb_client.client.flux_table import FluxTable, FluxColumn, FluxRecord
@@ -194,7 +195,7 @@ def _to_value(self, str_val, column):
194195
if "dateTime:RFC3339" == column.data_type or "dateTime:RFC3339Nano" == column.data_type:
195196
# todo nanosecods precision
196197
# return str_val
197-
return ciso8601.parse_datetime(str_val)
198+
return parse_string_to_datetime(str_val)
198199
# return timestamp_parser(str_val)
199200

200201
if "duration" == column.data_type:
@@ -230,4 +231,31 @@ def add_column_names_and_tags(table, csv):
230231

231232
def _insert_table(self, table, table_index):
232233
if self._serialization_mode is FluxSerializationMode.tables:
233-
self.tables.insert(table_index, table)
234+
self.tables.insert(table_index, table)
235+
236+
237+
def parse_string_to_datetime(date):
238+
if is_module_available("ciso8601"):
239+
import ciso8601
240+
return ciso8601.parse_datetime(date)
241+
else:
242+
return parser.parse(date)
243+
244+
245+
def is_module_available(module_name):
246+
module = None
247+
248+
if sys.version_info < (3, 0):
249+
# python 2
250+
import importlib
251+
module = importlib.find_loader(module_name)
252+
elif sys.version_info <= (3, 3):
253+
# python 3.0 to 3.3
254+
import pkgutil
255+
module = pkgutil.find_loader(module_name)
256+
elif sys.version_info >= (3, 4):
257+
# python 3.4 and above
258+
import importlib
259+
module = importlib.util.find_spec(module_name)
260+
261+
return module is not None

influxdb_client/client/write/point.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
from decimal import Decimal
55
from numbers import Integral
66

7-
import ciso8601
87
from pytz import UTC
98
from six import iteritems
109

10+
from influxdb_client.client.flux_csv_parser import parse_string_to_datetime
1111
from influxdb_client.domain.write_precision import WritePrecision
1212

1313
EPOCH = UTC.localize(datetime.utcfromtimestamp(0))
@@ -153,7 +153,7 @@ def _convert_timestamp(timestamp, precision=DEFAULT_WRITE_PRECISION):
153153
return timestamp # assume precision is correct if timestamp is int
154154

155155
if isinstance(timestamp, str):
156-
timestamp = ciso8601.parse_datetime(timestamp)
156+
timestamp = parse_string_to_datetime(timestamp)
157157

158158
if isinstance(timestamp, timedelta) or isinstance(timestamp, datetime):
159159

requirements.txt

-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@ six >= 1.10
44
python_dateutil >= 2.5.3
55
setuptools >= 21.0.0
66
urllib3 >= 1.15.1
7-
ciso8601>=2.1.1
87
pytz>=2019.1

scripts/ci-test.sh

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ python --version
99
pip install -r requirements.txt --user
1010
pip install -r extra-requirements.txt --user
1111
pip install -r test-requirements.txt --user
12+
pip install -r ciso-requirements.txt --user
1213
pip install pytest pytest-cov --user
1314
pip install twine --user
1415
python setup.py sdist bdist_wheel

0 commit comments

Comments
 (0)