From 938b73e0bc2851d30246d572d5cefecf57b02041 Mon Sep 17 00:00:00 2001 From: Wissam Abu Ahmad Date: Wed, 28 May 2025 23:19:39 +0200 Subject: [PATCH 1/3] BugFix: Skip validating and parsing comment lines early (#1108) (#1109) Signed-off-by: Wissam Abu Ahmad --- prometheus_client/parser.py | 6 +++--- tests/test_parser.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/prometheus_client/parser.py b/prometheus_client/parser.py index 92d66723..0434edf7 100644 --- a/prometheus_client/parser.py +++ b/prometheus_client/parser.py @@ -308,6 +308,9 @@ def build_metric(name: str, documentation: str, typ: str, samples: List[Sample]) continue candidate_name, quoted = '', False if len(parts) > 2: + # Ignore comment tokens + if parts[1] != 'TYPE' and parts[1] != 'HELP': + continue candidate_name, quoted = _unquote_unescape(parts[2]) if not quoted and not _is_valid_legacy_metric_name(candidate_name): raise ValueError @@ -342,9 +345,6 @@ def build_metric(name: str, documentation: str, typ: str, samples: List[Sample]) 'histogram': ['_count', '_sum', '_bucket'], }.get(typ, ['']) allowed_names = [name + n for n in allowed_names] - else: - # Ignore other comment tokens - pass elif line == '': # Ignore blank lines pass diff --git a/tests/test_parser.py b/tests/test_parser.py index 10a2fc90..e18a8782 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -120,6 +120,17 @@ def test_blank_lines_and_comments(self): """) self.assertEqualMetrics([CounterMetricFamily("a", "help", value=1)], list(families)) + + def test_comments_parts_are_not_validated_against_legacy_metric_name(self): + # https://github.com/prometheus/client_python/issues/1108 + families = text_string_to_metric_families(""" +# A simple. comment line where third token cannot be matched against METRIC_NAME_RE under validation.py +# 3565 12345/4436467 another random comment line where third token cannot be matched against METRIC_NAME_RE under validation.py +""") + self.assertEqualMetrics([], list(families)) + + + def test_tabs(self): families = text_string_to_metric_families("""#\tTYPE\ta\tcounter #\tHELP\ta\thelp From f294cbbf1dd24ae8936808923d30fafe0a7e519b Mon Sep 17 00:00:00 2001 From: Chris Marchbanks Date: Mon, 2 Jun 2025 08:23:22 -0600 Subject: [PATCH 2/3] Use License Expressions in pyproject.toml (#1111) With the release of PEP-639 the best practice for specifying the license is now to use a license expression in the license field and specify any license files in license-files rather than the table-based approach from PEP-621. Including the license in the classifiers is also no longer allowed when using PEP-639 and has been removed. Signed-off-by: Chris Marchbanks --- pyproject.toml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5305e38b..b50119ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools"] +requires = ["setuptools>=77.0.0"] build-backend = "setuptools.build_meta" [project] @@ -7,7 +7,11 @@ name = "prometheus_client" version = "0.22.0" description = "Python client for the Prometheus monitoring system." readme = "README.md" -license = { file = "LICENSE" } +license = "Apache-2.0 AND BSD-2-Clause" +license-files = [ + "LICENSE", + "NOTICE", +] requires-python = ">=3.9" authors = [ { name = "The Prometheus Authors", email = "prometheus-developers@googlegroups.com" }, @@ -33,7 +37,6 @@ classifiers = [ "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: System :: Monitoring", - "License :: OSI Approved :: Apache Software License", ] [project.optional-dependencies] From d24220a6c477eef2dfeb12a312e0da66539095e1 Mon Sep 17 00:00:00 2001 From: Chris Marchbanks Date: Mon, 2 Jun 2025 08:26:12 -0600 Subject: [PATCH 3/3] Release 0.22.1 Signed-off-by: Chris Marchbanks --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b50119ef..0c762505 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "prometheus_client" -version = "0.22.0" +version = "0.22.1" description = "Python client for the Prometheus monitoring system." readme = "README.md" license = "Apache-2.0 AND BSD-2-Clause"