Skip to content

Commit 6706571

Browse files
authored
fix: mapping dictionary without timestamp and tags into LineProtocol (influxdata#105)
1 parent f98bca8 commit 6706571

File tree

3 files changed

+45
-35
lines changed

3 files changed

+45
-35
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
### Features
44
1. [#92](https://github.com/influxdata/influxdb-client-python/issues/92): Optimize serializing Pandas DataFrame for writing
55

6+
### Bug Fixes
7+
1. [#105](https://github.com/influxdata/influxdb-client-python/pull/105): Fixed mapping dictionary without timestamp and tags into LineProtocol
8+
69
## 1.7.0 [2020-05-15]
710

811
### Features

influxdb_client/client/write/point.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ def measurement(measurement):
3030
@staticmethod
3131
def from_dict(dictionary: dict, write_precision: WritePrecision = DEFAULT_WRITE_PRECISION):
3232
point = Point(dictionary['measurement'])
33-
for tag_key, tag_value in dictionary['tags'].items():
34-
point.tag(tag_key, tag_value)
33+
if 'tags' in dictionary:
34+
for tag_key, tag_value in dictionary['tags'].items():
35+
point.tag(tag_key, tag_value)
3536
for field_key, field_value in dictionary['fields'].items():
3637
point.field(field_key, field_value)
37-
point.time(dictionary['time'], write_precision=write_precision)
38+
if 'time' in dictionary:
39+
point.time(dictionary['time'], write_precision=write_precision)
3840
return point
3941

4042
def __init__(self, measurement_name):

tests/test_point.py

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,6 @@
1010
from tests.base_test import BaseTest
1111

1212

13-
class TimeSpan(object):
14-
@classmethod
15-
def FromDays(cls, param):
16-
return timedelta(days=param)
17-
18-
@classmethod
19-
def FromHours(cls, param):
20-
return timedelta(hours=param)
21-
22-
@classmethod
23-
def FromSeconds(cls, param):
24-
return timedelta(seconds=param)
25-
26-
2713
class PointTest(BaseTest):
2814

2915
def test_MeasurementEscape(self):
@@ -124,47 +110,47 @@ def test_TimeSpanFormatting(self):
124110
point = Point.measurement("h2o") \
125111
.tag("location", "europe") \
126112
.field("level", 2) \
127-
.time(TimeSpan.FromDays(1), WritePrecision.NS)
113+
.time(timedelta(days=1), WritePrecision.NS)
128114

129115
self.assertEqual("h2o,location=europe level=2i 86400000000000", point.to_line_protocol())
130116

131117
point = Point.measurement("h2o") \
132118
.tag("location", "europe") \
133119
.field("level", 2) \
134-
.time(TimeSpan.FromHours(356), WritePrecision.US)
120+
.time(timedelta(hours=356), WritePrecision.US)
135121

136122
self.assertEqual("h2o,location=europe level=2i 1281600000000", point.to_line_protocol())
137123

138124
point = Point.measurement("h2o") \
139125
.tag("location", "europe") \
140126
.field("level", 2) \
141-
.time(TimeSpan.FromSeconds(156), WritePrecision.MS)
127+
.time(timedelta(seconds=156), WritePrecision.MS)
142128

143129
self.assertEqual("h2o,location=europe level=2i 156000", point.to_line_protocol())
144130

145131
point = Point.measurement("h2o") \
146132
.tag("location", "europe") \
147133
.field("level", 2) \
148-
.time(TimeSpan.FromSeconds(123), WritePrecision.S)
134+
.time(timedelta(seconds=123), WritePrecision.S)
149135

150136
self.assertEqual("h2o,location=europe level=2i 123", point.to_line_protocol())
151137

152138
def test_DateTimeFormatting(self):
153-
dateTime = datetime(2015, 10, 15, 8, 20, 15)
139+
date_time = datetime(2015, 10, 15, 8, 20, 15)
154140

155141
point = Point.measurement("h2o") \
156142
.tag("location", "europe") \
157143
.field("level", 2) \
158-
.time(dateTime, WritePrecision.MS)
144+
.time(date_time, WritePrecision.MS)
159145

160146
self.assertEqual("h2o,location=europe level=2i 1444897215000", point.to_line_protocol())
161147

162-
dateTime = datetime(2015, 10, 15, 8, 20, 15, 750, UTC)
148+
date_time = datetime(2015, 10, 15, 8, 20, 15, 750, UTC)
163149

164150
point = Point.measurement("h2o") \
165151
.tag("location", "europe") \
166152
.field("level", False) \
167-
.time(dateTime, WritePrecision.S)
153+
.time(date_time, WritePrecision.S)
168154

169155
self.assertEqual("h2o,location=europe level=false 1444897215", point.to_line_protocol())
170156

@@ -173,16 +159,16 @@ def test_DateTimeFormatting(self):
173159
.field("level", True) \
174160
.time(datetime.now(UTC), WritePrecision.S)
175161

176-
lineProtocol = point.to_line_protocol()
177-
self.assertTrue("." not in lineProtocol)
162+
line_protocol = point.to_line_protocol()
163+
self.assertTrue("." not in line_protocol)
178164

179165
point = Point.measurement("h2o") \
180166
.tag("location", "europe") \
181167
.field("level", True) \
182168
.time(datetime.now(UTC), WritePrecision.NS)
183169

184-
lineProtocol = point.to_line_protocol()
185-
self.assertTrue("." not in lineProtocol)
170+
line_protocol = point.to_line_protocol()
171+
self.assertTrue("." not in line_protocol)
186172

187173
def test_DateTimeUtc(self):
188174
date_time = datetime(2015, 10, 15, 8, 20, 15)
@@ -297,12 +283,31 @@ def test_timezone(self):
297283
eastern = berlin.astimezone(timezone('US/Eastern'))
298284

299285
self.assertEqual("h2o val=1i 0", Point.measurement("h2o").field("val", 1).time(0).to_line_protocol())
300-
self.assertEqual("h2o val=1i 1257894000123456000", Point.measurement("h2o").field("val", 1).time("2009-11-10T23:00:00.123456Z").to_line_protocol())
301-
self.assertEqual("h2o val=1i 1257894000123456000", Point.measurement("h2o").field("val", 1).time(utc).to_line_protocol())
302-
self.assertEqual("h2o val=1i 1257894000123456000", Point.measurement("h2o").field("val", 1).time(dt).to_line_protocol())
303-
self.assertEqual("h2o val=1i 1257894000123456000", Point.measurement("h2o").field("val", 1).time(1257894000123456000, write_precision=WritePrecision.NS).to_line_protocol())
304-
self.assertEqual("h2o val=1i 1257890400123456000", Point.measurement("h2o").field("val", 1).time(eastern).to_line_protocol())
305-
self.assertEqual("h2o val=1i 1257890400123456000", Point.measurement("h2o").field("val", 1).time(berlin).to_line_protocol())
286+
self.assertEqual("h2o val=1i 1257894000123456000", Point.measurement("h2o").field("val", 1).time(
287+
"2009-11-10T23:00:00.123456Z").to_line_protocol())
288+
self.assertEqual("h2o val=1i 1257894000123456000",
289+
Point.measurement("h2o").field("val", 1).time(utc).to_line_protocol())
290+
self.assertEqual("h2o val=1i 1257894000123456000",
291+
Point.measurement("h2o").field("val", 1).time(dt).to_line_protocol())
292+
self.assertEqual("h2o val=1i 1257894000123456000",
293+
Point.measurement("h2o").field("val", 1).time(1257894000123456000,
294+
write_precision=WritePrecision.NS).to_line_protocol())
295+
self.assertEqual("h2o val=1i 1257890400123456000",
296+
Point.measurement("h2o").field("val", 1).time(eastern).to_line_protocol())
297+
self.assertEqual("h2o val=1i 1257890400123456000",
298+
Point.measurement("h2o").field("val", 1).time(berlin).to_line_protocol())
299+
300+
def test_from_dict_without_timestamp(self):
301+
json = {"measurement": "my-org", "tags": {"tag1": "tag1", "tag2": "tag2"}, "fields": {'field1': 1, "field2": 2}}
302+
303+
point = Point.from_dict(json)
304+
self.assertEqual("my-org,tag1=tag1,tag2=tag2 field1=1i,field2=2i", point.to_line_protocol())
305+
306+
def test_from_dict_without_tags(self):
307+
json = {"measurement": "my-org", "fields": {'field1': 1, "field2": 2}}
308+
309+
point = Point.from_dict(json)
310+
self.assertEqual("my-org field1=1i,field2=2i", point.to_line_protocol())
306311

307312

308313
if __name__ == '__main__':

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