-
Notifications
You must be signed in to change notification settings - Fork 154
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
improve Union deserialization when "__type" field specifier is not present #478
improve Union deserialization when "__type" field specifier is not present #478
Conversation
9ef41c3
to
aec7e21
Compare
@george-zubrienko and @pawelwilczewski Building on #464 I added simple support for iterating over available |
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, thank you for contribution and nice to see people are actively collaborating! From what I see core.py
it seems like your fork was behind master? It looks like the original commit from @pawelwilczewski ?
I don't see what you mean @george-zubrienko . The logic change I added in |
@idbentley See what the final PR looked like. As per @george-zubrienko suggestion, I refactored the file a bit before finalising the PR. |
Oh, I see! Sorry, I misunderstood your comment @george-zubrienko ! I've updated it to match recommended style! |
4ac995c
to
9c20702
Compare
Hi @george-zubrienko . Would love to see this PR get a review as it will enable a feature to be completed on my team. I updated the style (as you asked) last week, and and rebased from master today. Thanks for your consideration! |
Hello :) no worries I'll review/merge this week. Github also made a mess recently, which impacts our ability to release to PyPI, thus I cannot guarantee a PyPI release this week. Sep 14 is when GH engineering should provide a solution - or so I was told. Stay tuned for updates. |
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.
LGTM, minor comment re exception catch
Pleasant discussion, elaborate reasoning, all-around great PR. Time to merge! |
Great working with you @george-zubrienko ! Thanks for all the help. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [dataclasses-json](https://togithub.com/lidatong/dataclasses-json) ([changelog](https://togithub.com/lidatong/dataclasses-json/releases)) | `^0.5.7` -> `^0.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/dataclasses-json/0.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/dataclasses-json/0.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/dataclasses-json/0.5.9/0.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/dataclasses-json/0.5.9/0.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- > [!WARNING] > Some dependencies could not be looked up. Check the warning logs for more information. --- ### Release Notes <details> <summary>lidatong/dataclasses-json (dataclasses-json)</summary> ### [`v0.6.3`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.6.3) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.6.2...v0.6.3) #### What's Changed - Fixes catchall inheritance issue by [@​jasonrock-a3](https://togithub.com/jasonrock-a3) in [https://github.com/lidatong/dataclasses-json/pull/500](https://togithub.com/lidatong/dataclasses-json/pull/500) #### New Contributors - [@​jasonrock-a3](https://togithub.com/jasonrock-a3) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/500](https://togithub.com/lidatong/dataclasses-json/pull/500) **Full Changelog**: lidatong/dataclasses-json@v0.6.2...v0.6.3 ### [`v0.6.2`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.6.2) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.6.1...v0.6.2) #### What's Changed - fix: allow using CatchAll with postponed evaluation of annotations by [@​2ynn](https://togithub.com/2ynn) in [https://github.com/lidatong/dataclasses-json/pull/490](https://togithub.com/lidatong/dataclasses-json/pull/490) - Fix PEP 0673 before 3.11 by [@​george-zubrienko](https://togithub.com/george-zubrienko) in [https://github.com/lidatong/dataclasses-json/pull/487](https://togithub.com/lidatong/dataclasses-json/pull/487) - fix mypy error when assigning to dataclass_json_config by [@​MickaelBergem](https://togithub.com/MickaelBergem) in [https://github.com/lidatong/dataclasses-json/pull/486](https://togithub.com/lidatong/dataclasses-json/pull/486) - Fix an issue introduced with hetero tuple decode by [@​george-zubrienko](https://togithub.com/george-zubrienko) in [https://github.com/lidatong/dataclasses-json/pull/493](https://togithub.com/lidatong/dataclasses-json/pull/493) #### New Contributors - [@​2ynn](https://togithub.com/2ynn) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/490](https://togithub.com/lidatong/dataclasses-json/pull/490) - [@​MickaelBergem](https://togithub.com/MickaelBergem) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/486](https://togithub.com/lidatong/dataclasses-json/pull/486) **Full Changelog**: lidatong/dataclasses-json@v0.6.1...v0.6.2 ### [`v0.6.1`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.6.1) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.6.0...v0.6.1) ##### What's Changed - Add links to make PyPI a better maintainer reference by [@​pydanny](https://togithub.com/pydanny) in [https://github.com/lidatong/dataclasses-json/pull/482](https://togithub.com/lidatong/dataclasses-json/pull/482) - improve Union deserialization when "\__type" field specifier is not present by [@​idbentley](https://togithub.com/idbentley) in [https://github.com/lidatong/dataclasses-json/pull/478](https://togithub.com/lidatong/dataclasses-json/pull/478) ##### New Contributors - [@​pydanny](https://togithub.com/pydanny) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/482](https://togithub.com/lidatong/dataclasses-json/pull/482) - [@​idbentley](https://togithub.com/idbentley) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/478](https://togithub.com/lidatong/dataclasses-json/pull/478) **Full Changelog**: lidatong/dataclasses-json@v0.6.0...v0.6.1 ### [`v0.6.0`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.6.0) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.5.14...v0.6.0) ##### What's Changed - Improve dataclass_json and \_process_class type annotations by [@​ringohoffman](https://togithub.com/ringohoffman) in [https://github.com/lidatong/dataclasses-json/pull/475](https://togithub.com/lidatong/dataclasses-json/pull/475) - Update Poetry version used for 3.7 test suite and change Requires-Python boundary by [@​george-zubrienko](https://togithub.com/george-zubrienko) in [https://github.com/lidatong/dataclasses-json/pull/476](https://togithub.com/lidatong/dataclasses-json/pull/476) - Fix for [#​239](https://togithub.com/lidatong/dataclasses-json/issues/239): Union inside List or Dict is not deserialized as the correspond… by [@​pawelwilczewski](https://togithub.com/pawelwilczewski) in [https://github.com/lidatong/dataclasses-json/pull/464](https://togithub.com/lidatong/dataclasses-json/pull/464) Due to a behaviour change discovered in [https://github.com/lidatong/dataclasses-json/issues/466](https://togithub.com/lidatong/dataclasses-json/issues/466) and also as a matter of preparation for full deprecation of Py3.7, we are bumping the minor version to 0.6.0. Most important change is that since 0.5.9 builtins are coerced automatically without throwing an exception. Please visit the issue for more info :) ##### New Contributors - [@​ringohoffman](https://togithub.com/ringohoffman) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/475](https://togithub.com/lidatong/dataclasses-json/pull/475) - [@​pawelwilczewski](https://togithub.com/pawelwilczewski) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/464](https://togithub.com/lidatong/dataclasses-json/pull/464) **Full Changelog**: lidatong/dataclasses-json@v0.5.15...v0.6.0 ### [`v0.5.14`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.5.14) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.5.13...v0.5.14) #### What's Changed - Temporarily disable code coverage publish for fork PRs by [@​george-zubrienko](https://togithub.com/george-zubrienko) in [https://github.com/lidatong/dataclasses-json/pull/444](https://togithub.com/lidatong/dataclasses-json/pull/444) - fix mashmallow fields.Tuple creation by [@​healthmatrice](https://togithub.com/healthmatrice) in [https://github.com/lidatong/dataclasses-json/pull/434](https://togithub.com/lidatong/dataclasses-json/pull/434) - Allow the global config dictionary keys to also be Optional\[type] by [@​sumnerevans](https://togithub.com/sumnerevans) in [https://github.com/lidatong/dataclasses-json/pull/255](https://togithub.com/lidatong/dataclasses-json/pull/255) - Fix global_config.mm_fields having no effect by [@​sigmunau](https://togithub.com/sigmunau) in [https://github.com/lidatong/dataclasses-json/pull/253](https://togithub.com/lidatong/dataclasses-json/pull/253) - Fixes recursion bug related to enum flags by [@​matt035343](https://togithub.com/matt035343) in [https://github.com/lidatong/dataclasses-json/pull/447](https://togithub.com/lidatong/dataclasses-json/pull/447) - Update Python version boundaries to include 3.12 by [@​cdce8p](https://togithub.com/cdce8p) in [https://github.com/lidatong/dataclasses-json/pull/449](https://togithub.com/lidatong/dataclasses-json/pull/449) #### New Contributors - [@​healthmatrice](https://togithub.com/healthmatrice) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/434](https://togithub.com/lidatong/dataclasses-json/pull/434) - [@​sigmunau](https://togithub.com/sigmunau) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/253](https://togithub.com/lidatong/dataclasses-json/pull/253) - [@​cdce8p](https://togithub.com/cdce8p) made their first contribution in [https://github.com/lidatong/dataclasses-json/pull/449](https://togithub.com/lidatong/dataclasses-json/pull/449) **Full Changelog**: lidatong/dataclasses-json@v0.5.13...v0.5.14 ### [`v0.5.13`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.5.13) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.5.12...v0.5.13) #### What's Changed - Fixes bug related to Tuples defined with ellipsis by [@​matt035343](https://togithub.com/matt035343) in [https://github.com/lidatong/dataclasses-json/pull/440](https://togithub.com/lidatong/dataclasses-json/pull/440) - Revert type hint in annotation call by [@​george-zubrienko](https://togithub.com/george-zubrienko) in [https://github.com/lidatong/dataclasses-json/pull/441](https://togithub.com/lidatong/dataclasses-json/pull/441) **Full Changelog**: lidatong/dataclasses-json@v0.5.12...v0.5.13 ### [`v0.5.12`](https://togithub.com/lidatong/dataclasses-json/releases/tag/v0.5.12) [Compare Source](https://togithub.com/lidatong/dataclasses-json/compare/v0.5.9...v0.5.12) #### What's Changed - Fix multiline scripts in CI by [@​george-zubrienko](https://togithub.com/george-zubrienko) in [https://github.com/lidatong/dataclasses-json/pull/439](https://togithub.com/lidatong/dataclasses-json/pull/439) **Full Changelog**: lidatong/dataclasses-json@v0.5.11...v0.5.12 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ixm-one/pytest-cmake-presets). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi43OS4xIiwidXBkYXRlZEluVmVyIjoiMzcuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> --------- Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Izzy Muerte <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Izzy Muerte <[email protected]>
This pull request adds a best-effort deserialization to Union types when no
__type
field specifier is present.In the case that no
__type
field is present, a warning is issued describing the risk of such unmarshalling attempt.We attempt to decode ensuring that keys exist on the type, and the values are appropriate. If either of these conditions fails, we abandon that dataclass type, and move onto the next one.
If no type is found, a warning is issued, the value is not decoded, and is left as-is.