Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle empty bodies in lexicon validation #2746

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

dholms
Copy link
Collaborator

@dholms dholms commented Aug 26, 2024

There's a weird edge case in lexicon validation around a schema moving from having no output schema to having an output schema with all optional properties. This is allowed in Lexicon. And it actually works with the current code but not for the reasons we expect.

The existing code will parse the body as an empty array and then treat it as an object and do lexicon checks against it as if it is the parsed JSON of the response.

Instead, we parse an empty body with no content type as undefined, and then in the higher level lexicon assertions (for validating output/input/params), pass instead pass the undefined through as an empty JSON object.

bnewbold added a commit to bluesky-social/indigo that referenced this pull request Oct 4, 2024
…e data validation (#420)

This is currently a branch on top of
#407

- [x] parse lexicon schema JSON
- [x] load entire directories of schema JSON files from disk as a
catalog
- [x] check lexicon schema semantics (eg, can't have min greater than
max)
- [x] validate runtime data (`map[string]any`) against lexicons
- [x] whole bunch of corner-case tests
- [x] CLI tool for some live-network testing
- [x] add support for `tid` and `record-key` lex formats (not in specs
yet)
- [x] configurable flexible to legacy blobs and lenient datetime parsing
(?)
- [x] comments and example code

probably in a later iteration:

- [ ] ensure empty body works
(bluesky-social/atproto#2746)
- [ ] validate rkey type against lexicon
- [ ] CLI tool to validate prod firehose
- [ ] CLI tool to validate CAR files
- [x] clarify specs around unions: only `object` and `token` types?
- [x] clarify specs around `unknown`: only `object` type?
- [ ] validate other "primary" lexicon types: subscription, HTTP body,
HTTP URL params, etc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants