8000 Add checks for various other float formats. (#460) · lifehacking/client_python@8601873 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8601873

Browse files
authored
Add checks for various other float formats. (prometheus#460)
Check for new stuff Go added in 1.13, and also make sure leading 0s are permitted as some users want to be able to do fixed-size output. Signed-off-by: Brian Brazil <brian.brazil@robustperception.io>
1 parent 9df82be commit 8601873

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

prometheus_client/openmetrics/parser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def _unescape_help(text):
7272

7373
def _parse_value(value):
7474
value = ''.join(value)
75-
if value != value.strip():
75+
if value != value.strip() or '_' in value:
7676
raise ValueError("Invalid value: {0!r}".format(value))
7777
try:
7878
return int(value)
@@ -84,7 +84,7 @@ def _parse_timestamp(timestamp):
8484
timestamp = ''.join(timestamp)
8585
if not timestamp:
8686
return None
87-
if timestamp != timestamp.strip():
87+
if timestamp != timestamp.strip() or '_' in timestamp:
8888
raise ValueError("Invalid timestamp: {0!r}".format(timestamp))
8989
try:
9090
# Simple int.

tests/openmetrics/test_parser.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ def test_float_gauge(self):
5353
""")
5454
self.assertEqual([GaugeMetricFamily("a", "help", value=1.2)], list(families))
5555

56+
def test_leading_zeros_simple_gauge(self):
57+
families = text_string_to_metric_families("""# TYPE a gauge
58+
# HELP a help
59+
a 0000000000000000000000000000000000000000001
60+
# EOF
61+
""")
62+
self.assertEqual([GaugeMetricFamily("a", "help", value=1)], list(families))
63+
64+
def test_leading_zeros_float_gauge(self):
65+
families = text_string_to_metric_families("""# TYPE a gauge
66+
# HELP a help
67+
a 0000000000000000000000000000000000000000001.2e-1
68+
# EOF
69+
""")
70+
self.assertEqual([GaugeMetricFamily("a", "help", value=.12)], list(families))
71+
5672
def test_nan_gauge(self):
5773
families = text_string_to_metric_families("""# TYPE a gauge
5874
# HELP a help
@@ -610,14 +626,25 @@ def test_invalid_input(self):
610626
('a 1\n# EOF\n'),
611627
('a 1\t\n# EOF\n'),
612628
('a 1 \n# EOF\n'),
629+
('a 1_2\n# EOF\n'),
630+
('a 0x1p-3\n# EOF\n'),
631+
('a 0x1P-3\n# EOF\n'),
632+
('a 0b1\n# EOF\n'),
633+
('a 0B1\n# EOF\n'),
634+
('a 0x1\n# EOF\n'),
635+
('a 0X1\n# EOF\n'),
636+
('a 0o1\n# EOF\n'),
637+
('a 0O1\n# EOF\n'),
613638
# Bad timestamp.
614639
('a 1 z\n# EOF\n'),
615640
('a 1 1z\n# EOF\n'),
641+
('a 1 1_2\n# EOF\n'),
616642
('a 1 1.1.1\n# EOF\n'),
617643
('a 1 NaN\n# EOF\n'),
618644
('a 1 Inf\n# EOF\n'),
619645
('a 1 +Inf\n# EOF\n'),
620646
('a 1 -Inf\n# EOF\n'),
647+
('a 1 0x1p-3\n# EOF\n'),
621648
# Bad exemplars.
622649
('# TYPE a histogram\na_bucket{le="+Inf"} 1 #\n# EOF\n'),
623650
('# TYPE a histogram\na_bucket{le="+Inf"} 1# {} 1\n# EOF\n'),
@@ -627,6 +654,8 @@ def test_invalid_input(self):
627654
('# TYPE a histogram\na_bucket{le="+Inf"} 1 # {} 1 1 \n# EOF\n'),
628655
('# TYPE a histogram\na_bucket{le="+Inf"} 1 # '
629656
'{a="2345678901234567890123456789012345678901234567890123456789012345"} 1 1\n# EOF\n'),
657+
('# TYPE a histogram\na_bucket{le="+Inf"} 1 # {} 0x1p-3\n# EOF\n'),
658+
('# TYPE a histogram\na_bucket{le="+Inf"} 1 # {} 1 0x1p-3\n# EOF\n'),
630659
# Exemplars on unallowed samples.
631660
('# TYPE a histogram\na_sum 1 # {a="b"} 0.5\n# EOF\n'),
632661
('# TYPE a gaugehistogram\na_sum 1 # {a="b"} 0.5\n# EOF\n'),
@@ -695,7 +724,7 @@ def test_invalid_input(self):
695724
('# TYPE a gauge\na 0\na 0 0\n# EOF\n'),
696725
('# TYPE a gauge\na 0 0\na 0\n# EOF\n'),
697726
]:
698-
with self.assertRaises(ValueError):
727+
with self.assertRaises(ValueError, msg=case):
699728
list(text_string_to_metric_families(case))
700729

701730
@unittest.skipIf(sys.version_info < (2, 7), "float repr changed from 2.6 to 2.7")

0 commit comments

Comments
 (0)
0