Open
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).