Skip to content

Commit

Permalink
fix: = is valid sign for measurement name
Browse files Browse the repository at this point in the history
  • Loading branch information
bednar committed Jun 29, 2020
1 parent 6d0312a commit 1833b14
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
1. [#112](https://github.com/influxdata/influxdb-client-python/pull/113): Support timestamp with different timezone in _convert_timestamp

### Bug Fixes
1. [#115](https://github.com/influxdata/influxdb-client-python/pull/115): Fixed serialization of `\n`, `\r` and `\t` to Line Protocol
1. [#117](https://github.com/influxdata/influxdb-client-python/pull/117): Fixed appending default tags for single Point
1. [#115](https://github.com/influxdata/influxdb-client-python/pull/115): Fixed serialization of `\n`, `\r` and `\t` to Line Protocol, `=` is valid sign for measurement name

## 1.8.0 [2020-06-19]

Expand Down
9 changes: 6 additions & 3 deletions influxdb_client/client/write/point.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

EPOCH = UTC.localize(datetime.utcfromtimestamp(0))
DEFAULT_WRITE_PRECISION = WritePrecision.NS
_ESCAPE_MEASUREMENT = str.maketrans({'\\': '\\\\', ',': r'\,', ' ': r'\ ', '\n': '\\n', '\t': '\\t', '\r': '\\r'})
_ESCAPE_KEY = str.maketrans({'\\': '\\\\', ',': r'\,', ' ': r'\ ', '=': r'\=', '\n': '\\n', '\t': '\\t', '\r': '\\r'})
_ESCAPE_STRING = str.maketrans({'\"': r"\"", "\\": r"\\"})

Expand Down Expand Up @@ -75,7 +76,7 @@ def field(self, field, value):
return self

def to_line_protocol(self):
_measurement = _escape_key(self._name)
_measurement = _escape_key(self._name, _ESCAPE_MEASUREMENT)
_tags = _append_tags(self._tags)
_fields = _append_fields(self._fields)
if not _fields:
Expand Down Expand Up @@ -133,8 +134,10 @@ def _append_time(time, write_precision):
return f" {int(_convert_timestamp(time, write_precision))}"


def _escape_key(tag):
return str(tag).translate(_ESCAPE_KEY)
def _escape_key(tag, escape_list=None):
if escape_list is None:
escape_list = _ESCAPE_KEY
return str(tag).translate(escape_list)


def _escape_tag_value(value):
Expand Down
8 changes: 8 additions & 0 deletions tests/test_point.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,14 @@ def test_TagEscapingKeyAndValue(self):

self.assertEqual("h\\n2\\ro\\t_data,carriage\\rreturn=carriage\\nreturn,new\\nline=new\\nline,t\\tab=t\\tab level=2i", point.to_line_protocol())

def test_EqualSignEscaping(self):

point = Point.measurement("h=2o") \
.tag("l=ocation", "e=urope") \
.field("l=evel", 2)

self.assertEqual("h=2o,l\\=ocation=e\\=urope l\\=evel=2i", point.to_line_protocol())

def test_OverrideTagField(self):
point = Point.measurement("h2o") \
.tag("location", "europe") \
Expand Down

0 comments on commit 1833b14

Please sign in to comment.