diff --git a/.vs/client_python/v16/.suo b/.vs/client_python/v16/.suo new file mode 100644 index 00000000..1f02f5a1 Binary files /dev/null and b/.vs/client_python/v16/.suo differ diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 00000000..4fe56edc Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/prometheus_client/metrics.py b/prometheus_client/metrics.py index 91cd9ecf..dfa38b78 100644 --- a/prometheus_client/metrics.py +++ b/prometheus_client/metrics.py @@ -706,6 +706,8 @@ def info(self, val: Dict[str, str]) -> None: raise ValueError('Overlapping labels for Info metric, metric: {} child: {}'.format( self._labelnames, val)) with self._lock: + if any( i is None for i in val.values() ): + raise ValueError('Label value cannot be None') self._value = dict(val) def _child_samples(self) -> Iterable[Sample]: diff --git a/tests/test_core.py b/tests/test_core.py index 30f9e0ad..8a54a02d 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -534,6 +534,7 @@ def test_info(self): def test_labels(self): self.assertRaises(ValueError, self.labels.labels('a').info, {'l': ''}) + self.assertRaises(ValueError, self.labels.labels('a').info, {'il': None}) self.labels.labels('a').info({'foo': 'bar'}) self.assertEqual(1, self.registry.get_sample_value('il_info', {'l': 'a', 'foo': 'bar'}))