-
Notifications
You must be signed in to change notification settings - Fork 407
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
fix(event_handler): custom serializer recursive values when using data validation #4664
fix(event_handler): custom serializer recursive values when using data validation #4664
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## develop #4664 +/- ##
===========================================
+ Coverage 96.38% 96.45% +0.07%
===========================================
Files 214 223 +9
Lines 10030 10728 +698
Branches 1846 1996 +150
===========================================
+ Hits 9667 10348 +681
- Misses 259 268 +9
- Partials 104 112 +8 ☔ View full report in Codecov by Sentry. |
Will check CI later this afternoon. |
@leandrodamascena when you can, I'm gonna need your help on how to best test pydantic version differences to get this to pass. I'll get back to this late afternoon / evening |
Hey @heitorlessa! Two things here: 1 - I found a bug in the Nox tests that is installing Pydantic 2.0 in the v1.0 test only in some situations, I don't know why, but it is. To fix this, I'll change this line to 2 - This test is wrong because it is not possible to do this with Pydantic to dump JSON. The first thing we do when we detect that it is a Pydantic model is to dump it into JSON and then invoke the I'll fix both problems tomorrow morning! Thanks for working on this. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello @heitorlessa! I removed the change where we added custom_serializer
to the Pydantic model because it will never work. When using Pydantic, the customer must handle the serializer within the model itself, otherwise Pydantic will fail.
Reference: pydantic/pydantic#7991
For me this PR is approved!
Gotcha! thanks a lot @leandrodamascena and for fixing the pydantic nox unrelated bug too; I didn't know class MyResult(BaseModel):
name: str
token_list: TokenList
@field_serializer('token_list')
def token_list_serializer(self, token_list: TokenList, _info):
return orjson.Fragment(orjson.dumps(token_list.model_dump())) |
@sthulb need your approval as Leandro pushed a fix to this PR |
Issue number: #4658
Summary
Recursively include custom serializer for all supported data types (dicts, sequences, dataclasses, Pydantic Models).
Previously, we were only using a
custom_serializer
for top-level keys. That meant thecustom_serializer
reference was getting lost during recursion.With this change, we can now correctly serialize custom items in a list, custom values in a dict, custom values in a dataclass/Pydantic model, etc. however deep.
Changes
User experience
Checklist
If your change doesn't seem to apply, please leave them unchecked.
Is this a breaking change?
RFC issue number:
Checklist:
Acknowledgment
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
Disclaimer: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful.