metadata: auto-convert YAML special float values: .nan .inf -.inf

Even for people who know what the special floats not-a-number, infinity,
and negative infinity, they don't necessarily know the YAML 1.2 syntax for
these.  I didn't.  And I've spent some quality time fighting things with
those values.  They are also easy to reliably convert to string values.
This commit is contained in:
Hans-Christoph Steiner 2023-05-04 18:34:50 +02:00
parent 8374842faa
commit 9f606d0fbb
2 changed files with 27 additions and 0 deletions

View File

@ -20,6 +20,7 @@
import git
from pathlib import Path
import math
import platform
import os
import re
@ -897,6 +898,14 @@ def _normalize_type_string(v):
if v:
return 'true'
return 'false'
if isinstance(v, float):
# YAML 1.2 values for NaN, Inf, and -Inf
if math.isnan(v):
return '.nan'
if math.isinf(v):
if v > 0:
return '.inf'
return '-.inf'
return str(v)

View File

@ -965,6 +965,24 @@ class MetadataTest(unittest.TestCase):
{'AntiFeatures': {'true': {}}},
)
def test_parse_yaml_app_antifeatures_float_nan(self):
self.assertEqual(
metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: .nan')),
{'AntiFeatures': {'.nan': {}}},
)
def test_parse_yaml_app_antifeatures_float_inf(self):
self.assertEqual(
metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: .inf')),
{'AntiFeatures': {'.inf': {}}},
)
def test_parse_yaml_app_antifeatures_float_negative_inf(self):
self.assertEqual(
metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: -.inf')),
{'AntiFeatures': {'-.inf': {}}},
)
def test_parse_yaml_app_antifeatures_int(self):
self.assertEqual(
metadata.parse_yaml_metadata(io.StringIO('AntiFeatures: 1')),