python-jsonschema / python-jsonschema/jsonschema
Validation errors should be able to indicate that a single error should be produced without collecting all of the details ahead of time
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 5k
- Forks
- 671
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 10
Description
In general, validation is lazy -- if only one error is needed (in the sense that it is known that an instance is invalid), only one is produced.
There are however (somewhat unintentional) exceptions.
E.g.:
anyOfandoneOfcalculate the.contextof the first error they yield by calculating all sub-errors that were generated. This is becauseValidationError.contextneeds to be provided on__init__.dependentRequired, on the other hand, yields many errors, one for each missing required property (see also #119)
What's happening in these situations is that the validation function knows an error has occurred -- it wants to yield an error, but in order to do so, it needs to calculate the full details required so that the error is "complete".
We should instead have a way to indicate a validation error has occurred, but delay fully calculating its contents until/unless they are requested.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the validation paths for anyOf, oneOf, and dependentRequired, then inspect how ValidationError.init receives context. Done means a validation error can be yielded without collecting all sub-errors, while its full contents are calculated only when requested.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100