Add backward compatibility with Pydantic V1
Add back the support of Pydantic V1 (Implements #90). This eases the migration from Pydantic V1 to Pydantic V2.
Without this support, users cannot gradually migrate a Flask project from Pydantic V1 to Pydantic V2. I tried to keep the code change to a minimum. However, test files are in a separate folder, to ease the migration when Pydantic V1 support would be completely dropped.
No noticeable performance impact for Pydantic V2 users.
Quality Gate passed
Issues
1 New issue
0 Accepted issues
Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code
@Merinorus hey, thanks for the PR, it seems like this PR some tests on the CI. I will have a closer looked at which tests are failing and why they are failing, but I think this PR could really benefit if we support both V1 and V2!
Hi @yctomwang, thank you! I made a little mistake on instance checking:
isinstance(obj, Union[BaseModel, V1BaseModel]) # Wrong
->
isinstance(obj, (BaseModel, V1BaseModel)) # Ok
This should be good for review now. Tests fail on the macOS runners, but it seems unrelated to the PR.
@Merinorus Hey, I dont think the MacOS failures are because of your PR, give me sometime to investigate into why the CI is failing and i will get back to you. Thank you once again for the PR and your patience!
@yctomwang Hi! I found out why the CI is failing: the macOS workers are now running ARM architecture, and python 3.7 is not supported anymore. So if you want to continue supporting this version, this might need to be tested against an old macOS version running on x86 architecture. The setup-python action needed to be upgraded as well.
You can check this PR: https://github.com/bauerji/flask-pydantic/pull/94
@Merinorus with the CI fixed and we can merge code, i think we can proceed with this PR. for somereason this PR right now still fails actions even tho its been rerun.
Hi @yctomwang, no worries. It's because this PR should be rebased on the latest commit from the main branch, otherwise it runs on the old CI. I'll rebase the branch.
All good :)
Hi there - what's the timeline to merge and release this PR? This is blocking our migration as well
I would be happy to proceed but I'm not a maintainer. In the meantime, you can fix your application requirements with the PR's commit.
Example of a python requirement.txt:
flask-Pydantic @ git+https://github.com/merinorus/flask-pydantic.git@da0a0489474d2b01c61a1f51d5b7536647e2ad29
...
pydantic==2.9.2
Fork it to your personal or organization repo, so you won't depend on mine.
+1 any update on getting this merged into core?
We have forked it in the mean time, but this is extremely helpful as an upgrade path from v1 to v2 and it would be nice to get it in
Hi @yctomwang, any news? I didn't find a way to contact you personally. If you need some people to collaborate, I'd happily join!
@Merinorus the project was just transferred under the pallets-eco umbrella which should help facility outside contribution better.
I'm very interested in seeing this PR get through, let me know if you would like to collaborate or need any assistance!
If you would like to chat with the pallet members you can visit the discord listed here https://www.palletsprojects.com/ecosystem
Hi, that's good news! I'm still interested in merging this PR. The base code hasn't changed, and we are still using this "patch" in production. If some other users use it as well, I guess it's ready to merge as is?
I just rebased the changes on the latest PR (changing linter from Black to Ruff).
Sweet, @Merinorus will review today!