-
-
Notifications
You must be signed in to change notification settings - Fork 596
Open
Labels
BugSomething doesn't work the way it should.Something doesn't work the way it should.Error ReportingIssues related to clearer or more robust validation error reportingIssues related to clearer or more robust validation error reporting
Description
In continuation to #1250. The fix has seemingly undesired side effect.
from jsonschema import Draft202012Validator as Validator, exceptions
schema = {'oneOf': [
{'properties': {'run': {'type': 'string'}}, 'required': ['run']},
{'properties': {'uses': {'type': 'string'}}, 'required': ['uses']},
]}
instance = {'uses': 1, 'run': 1}
error = exceptions.best_match(Validator(schema).iter_errors(instance))
print(schema, "\n\n", error)
After the fix it produces:
1 is not of type 'string'
On instance['run']:
1
Conceptually, it is not clear why run
has priority (I understand that technically it has priority due to the alphabetical order).
Based on real example https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/github-workflow.json
As an alternative proposal, the relevance function could not be changed, but best_match
could distinguish errors having different error.path in the same subscheme, and choose first of them (maybe having even not the minimal relevance, but the maximum one for this particular subscheme provided that it is still minimal among different subschemes).
Metadata
Metadata
Assignees
Labels
BugSomething doesn't work the way it should.Something doesn't work the way it should.Error ReportingIssues related to clearer or more robust validation error reportingIssues related to clearer or more robust validation error reporting
Activity
ilia1243 commentedon May 19, 2024
Opened pull request with possible improvement of
best_match
.nfriedl1 commentedon Jun 13, 2024
Hi, I think I am running into the same thing, but I wanted to share my example just in case.
Below is the output with
jsonschema == 4.22.0
.The 3rd case here has a misleading error message. As shown in case 4, if the values in the tuple are swapped, the error message is more accurate.
Julian commentedon Jun 14, 2024
A helpful thing to check would be if your case is solved by @ilia1243's fix in #1258 (which I am still unfortunately behind on looking into). But it would be very helpful if you checked whether you are more satisfied with the error after that change.
ilia1243 commentedon Jun 20, 2024
The mentioned fix does solve the problem by @nfriedl1. It shows in 3 and 4 cases:
and