-
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 dataclass_json and _process_class type annotations #475
Improve dataclass_json and _process_class type annotations #475
Conversation
Use typing.overload to differentiate the return type of dataclass_json based on whether _cls parameter is None or not
Hi @ringohoffman! If you can provide additional information on how this change interacts with:
This would significantly speed up the review process here, otherwise I'll have to try all these myself before I can review. Community had issues with this codepiece some time ago, so I have to be extra careful here. Also a sidenote, |
What I had already posted were the changes you can see in VS Code using pylance/pyright. Pylance is a Visual Studio Code extension that uses pyright at its core for static type checking. I've gone ahead and added the before and after for PyCharm and mypy to the description as well.
What do you mean by this? Do you want me to add a GitHub Workflow step to run pyright and pylint? When I run pyright on the I don't see any Let me know how you want to move forward based on this and my updated description. |
I think it's ok, however I'm curious if this works with IDE autocomplete? You snippets are runtime code, but autocomplete does not rely on reveal_type etc. Though people mainly complain about static type checkers, we had cases when they also want IDE autocomplete to work like it does when using a Mixin. Other small question, we plan to deprecate this function in v1 API (coming soon). How does that affect you? |
I don't think it's possible to make This doesn't impact me in any major way. I already migrated |
Good, though v1 deprecates both the Mixin and the annotation - check discussion in #442. Note that we'll release v1 alongside v0 and deprecation of v0 will take very long time so please do not be scared :) But it helps a lot for us to understand the use cases like the code snippet you referenced. Thanks a lot for contribution, we have a bit of an issue with 3.7 rn, but I plan to go around it and release your commit in 0.6 in a few days. |
[![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]>
Use
typing.overload
to differentiate the return type ofdataclass_json
based on whether_cls
parameter isNone
or not.This is motivated by fixing type issues in flytekit, which does not only use
dataclass_json
as a decorator.