Source code for data_model.json_validation
"""Validation helpers for JSON-compatible structured model values."""
import math
from numbers import Real
[docs]
def validate_finite_json_values(value, path="$"):
"""Reject non-finite JSON numbers and identify their nested path.
Parameters
----------
value : object
JSON-like value to inspect.
path : str, optional
JSON path used in an error message.
Raises
------
ValueError
If a real number is NaN or infinite.
"""
if isinstance(value, dict):
for key, item in value.items():
validate_finite_json_values(item, f"{path}.{key}")
elif isinstance(value, list):
for index, item in enumerate(value):
validate_finite_json_values(item, f"{path}[{index}]")
elif isinstance(value, Real) and not isinstance(value, bool) and not math.isfinite(value):
raise ValueError(f"Non-finite JSON number at {path}")