Merge pull request #22909 from mvdbeek/color-json-schema-format-checker

[26.1] Enforce color format in JSON schema tests via FormatChecker
This commit is contained in:
Marius van den Beek
2026-06-14 08:49:10 +02:00
committed by GitHub
2 changed files with 18 additions and 4 deletions
@@ -1234,9 +1234,11 @@ gx_color:
- parameter: '#aabbcc'
- parameter: '#000000'
- parameter: '#abcd'
- parameter: 'red'
request_invalid:
- parameter: null
- parameter: {}
- parameter: 'foobar'
workflow_step_valid:
- parameter: '#aabbcc'
- parameter: '#000000'
@@ -1253,9 +1255,6 @@ gx_color:
- parameter: 'foobar'
- parameter: 5
- parameter: {__class__: 'ConnectedValue2'}
_json_schema_skip:
workflow_step_invalid: "color validator uses AfterValidator"
workflow_step_linked_invalid: "color validator uses AfterValidator"
gx_data:
request_valid:
@@ -22,8 +22,10 @@ from typing import (
)
import jsonschema
import jsonschema.exceptions
import pytest
import yaml
from pydantic_extra_types.color import Color as _Color
pytestmark = pytest.mark.skipif(
sys.version_info < (3, 9), reason="jsonschema<4.24 on Python 3.8 mishandles additionalProperties in anyOf"
@@ -72,8 +74,21 @@ def _json_schema_for(bundle: ToolParameterBundleModel, state_representation: Sta
return to_json_schema(model)
_FORMAT_CHECKER = jsonschema.FormatChecker()
@_FORMAT_CHECKER.checks("color", raises=jsonschema.exceptions.FormatError)
def _check_color_format(value: object) -> bool:
if isinstance(value, str):
try:
_Color(value)
except Exception as e:
raise jsonschema.exceptions.FormatError(f"{value!r} is not a valid color", cause=e)
return True
def _json_schema_validates(schema: Dict[str, Any], state_dict: RawStateDict) -> bool:
validator = jsonschema.Draft202012Validator(schema)
validator = jsonschema.Draft202012Validator(schema, format_checker=_FORMAT_CHECKER)
errors = list(validator.iter_errors(state_dict))
return len(errors) == 0