Serialize Object Selector correctly if a field is required (#148577)

This commit is contained in:
Paulus Schoutsen 2025-07-10 23:45:56 +02:00 committed by GitHub
parent 19b3b6cb28
commit e6702d2392
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 4 deletions

View File

@ -779,13 +779,19 @@ def selector_serializer(schema: Any) -> Any: # noqa: C901
if isinstance(schema, selector.ObjectSelector):
result = {"type": "object"}
if fields := schema.config.get("fields"):
result["properties"] = {
field: convert(
properties = {}
required = []
for field, field_schema in fields.items():
properties[field] = convert(
selector.selector(field_schema["selector"]),
custom_serializer=selector_serializer,
)
for field, field_schema in fields.items()
}
if field_schema.get("required"):
required.append(field)
result["properties"] = properties
if required:
result["required"] = required
else:
result["additionalProperties"] = True
if schema.config.get("multiple"):

View File

@ -1161,6 +1161,7 @@ async def test_selector_serializer(
"name": {"type": "string"},
"percentage": {"type": "number", "minimum": 30, "maximum": 100},
},
"required": ["name"],
}
assert selector_serializer(
selector.ObjectSelector(
@ -1190,6 +1191,7 @@ async def test_selector_serializer(
"maximum": 100,
},
},
"required": ["name"],
},
}
assert selector_serializer(