Skip to content

Commit 999ca24

Browse files
committed
Merge PR #564 into 18.0
Signed-off-by lmignon
2 parents a8795e1 + 4fb83e5 commit 999ca24

8 files changed

Lines changed: 265 additions & 141 deletions

File tree

pydantic/README.rst

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
.. image:: https://odoo-community.org/readme-banner-image
2-
:target: https://odoo-community.org/get-involved?utm_source=readme
3-
:alt: Odoo Community Association
4-
51
========
62
Pydantic
73
========
@@ -11,13 +7,13 @@ Pydantic
117
!! This file is generated by oca-gen-addon-readme !!
128
!! changes will be overwritten. !!
139
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14-
!! source digest: sha256:bf754ec770116cffb9eee07a08eb62409c1868dfd0f765c017156da1d8242df5
10+
!! source digest: sha256:0282f433b416c240729625a685a03a9775a264b4628001c237941a3fe506c13b
1511
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1612
1713
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
1814
:target: https://odoo-community.org/page/development-status
1915
:alt: Beta
20-
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
16+
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
2117
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
2218
:alt: License: LGPL-3
2319
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frest--framework-lightgray.png?logo=github
@@ -33,13 +29,13 @@ Pydantic
3329
|badge1| |badge2| |badge3| |badge4| |badge5|
3430

3531
This addon provides a utility method that can be used to map odoo record
36-
to a `Pydantic model <https://pydantic-docs.helpmanual.io/>`__.
32+
to a `Pydantic model (>= v2) <https://docs.pydantic.dev/>`__.
3733

3834
If you need to make your Pydantic models extendable at runtime, takes a
3935
look at the python package
4036
`extendable-pydantic <https://pypi.org/project/extendable_pydantic/>`__
41-
and the odoo addon
42-
`extendable <https://github.com/acsone/odoo-addon-extendable>`__
37+
and the `odoo addon
38+
extendable <https://pypi.org/project/odoo-addon-extendable>`__
4339

4440
**Table of contents**
4541

@@ -51,36 +47,28 @@ Usage
5147

5248
To support pydantic models that map to Odoo models, Pydantic model
5349
instances can be created from arbitrary odoo model instances by mapping
54-
fields from odoo models to fields defined by the pydantic model. To ease
55-
the mapping, the addon provide a utility class
56-
odoo.addons.pydantic.utils.GenericOdooGetter.
50+
fields from odoo models to fields defined by the pydantic model.
51+
52+
To ease the mapping, the addon provide an utility class (using
53+
``pydantic>2.0``) ``odoo.addons.pydantic.utils.PydanticOdooBaseModel``:
5754

5855
.. code:: python
5956
60-
import pydantic
61-
from odoo.addons.pydantic import utils
57+
from odoo.addons.pydantic.utils import PydanticOdooBaseModel
6258
63-
class Group(pydantic.BaseModel):
64-
name: str
6559
66-
class Config:
67-
orm_mode = True
68-
getter_dict = utils.GenericOdooGetter
60+
class Group(PydanticOdooBaseModel):
61+
name: str
6962
70-
class UserInfo(pydantic.BaseModel):
63+
class UserInfo(PydanticOdooBaseModel):
7164
name: str
7265
groups: List[Group] = pydantic.Field(alias="groups_id")
7366
74-
class Config:
75-
orm_mode = True
76-
getter_dict = utils.GenericOdooGetter
77-
7867
user = self.env.user
7968
user_info = UserInfo.from_orm(user)
8069
81-
See the official `Pydantic
82-
documentation <https://pydantic-docs.helpmanual.io/>`__ to discover all
83-
the available functionalities.
70+
See the official `Pydantic documentation <https://docs.pydantic.dev/>`__
71+
to discover all the available functionalities.
8472

8573
Known issues / Roadmap
8674
======================
@@ -112,8 +100,9 @@ Authors
112100
Contributors
113101
------------
114102

115-
- Laurent Mignon <laurent.mignon@acsone.eu>
116-
- Tris Doan <tridm@trobz.com>
103+
- Laurent Mignon <laurent.mignon@acsone.eu>
104+
- Tris Doan <tridm@trobz.com>
105+
- Pierre Verkest <pierre@verkest.fr>
117106

118107
Maintainers
119108
-----------

pydantic/readme/CONTRIBUTORS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
- Laurent Mignon \<<laurent.mignon@acsone.eu>\>
22
- Tris Doan \<<tridm@trobz.com>\>
3+
- Pierre Verkest \<<pierre@verkest.fr>\>

pydantic/readme/DESCRIPTION.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
This addon provides a utility method that can be used to map odoo record
2-
to a [Pydantic model](https://pydantic-docs.helpmanual.io/).
2+
to a [Pydantic model (>= v2)](https://docs.pydantic.dev/).
33

44
If you need to make your Pydantic models extendable at runtime, takes a
55
look at the python package
66
[extendable-pydantic](https://pypi.org/project/extendable_pydantic/) and
7-
the odoo addon
8-
[extendable](https://github.com/acsone/odoo-addon-extendable)
7+
the [odoo addon extendable](https://pypi.org/project/odoo-addon-extendable)

pydantic/readme/USAGE.md

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,25 @@
11
To support pydantic models that map to Odoo models, Pydantic model
22
instances can be created from arbitrary odoo model instances by mapping
3-
fields from odoo models to fields defined by the pydantic model. To ease
4-
the mapping, the addon provide a utility class
5-
odoo.addons.pydantic.utils.GenericOdooGetter.
3+
fields from odoo models to fields defined by the pydantic model.
4+
5+
6+
To ease the mapping, the addon provide an utility class (using `pydantic>2.0`) `odoo.addons.pydantic.utils.PydanticOdooBaseModel`:
67

78
``` python
8-
import pydantic
9-
from odoo.addons.pydantic import utils
9+
from odoo.addons.pydantic.utils import PydanticOdooBaseModel
1010

11-
class Group(pydantic.BaseModel):
12-
name: str
1311

14-
class Config:
15-
orm_mode = True
16-
getter_dict = utils.GenericOdooGetter
12+
class Group(PydanticOdooBaseModel):
13+
name: str
1714

18-
class UserInfo(pydantic.BaseModel):
15+
class UserInfo(PydanticOdooBaseModel):
1916
name: str
2017
groups: List[Group] = pydantic.Field(alias="groups_id")
2118

22-
class Config:
23-
orm_mode = True
24-
getter_dict = utils.GenericOdooGetter
25-
2619
user = self.env.user
2720
user_info = UserInfo.from_orm(user)
2821
```
2922

3023
See the official [Pydantic
31-
documentation](https://pydantic-docs.helpmanual.io/) to discover all the
24+
documentation](https://docs.pydantic.dev/) to discover all the
3225
available functionalities.

pydantic/static/description/index.html

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
55
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
6-
<title>README.rst</title>
6+
<title>Pydantic</title>
77
<style type="text/css">
88

99
/*
@@ -360,28 +360,23 @@
360360
</style>
361361
</head>
362362
<body>
363-
<div class="document">
363+
<div class="document" id="pydantic">
364+
<h1 class="title">Pydantic</h1>
364365

365-
366-
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
367-
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
368-
</a>
369-
<div class="section" id="pydantic">
370-
<h1>Pydantic</h1>
371366
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
372367
!! This file is generated by oca-gen-addon-readme !!
373368
!! changes will be overwritten. !!
374369
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375370
!! source digest: sha256:bf754ec770116cffb9eee07a08eb62409c1868dfd0f765c017156da1d8242df5
376371
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377-
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/license-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/rest-framework/tree/18.0/pydantic"><img alt="OCA/rest-framework" src="https://img.shields.io/badge/github-OCA%2Frest--framework-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/rest-framework-18-0/rest-framework-18-0-pydantic"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/rest-framework&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
372+
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/rest-framework/tree/18.0/pydantic"><img alt="OCA/rest-framework" src="https://img.shields.io/badge/github-OCA%2Frest--framework-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/rest-framework-18-0/rest-framework-18-0-pydantic"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/rest-framework&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
378373
<p>This addon provides a utility method that can be used to map odoo record
379-
to a <a class="reference external" href="https://pydantic-docs.helpmanual.io/">Pydantic model</a>.</p>
374+
to a <a class="reference external" href="https://docs.pydantic.dev/">Pydantic model (&gt;= v2)</a>.</p>
380375
<p>If you need to make your Pydantic models extendable at runtime, takes a
381376
look at the python package
382377
<a class="reference external" href="https://pypi.org/project/extendable_pydantic/">extendable-pydantic</a>
383-
and the odoo addon
384-
<a class="reference external" href="https://github.com/acsone/odoo-addon-extendable">extendable</a></p>
378+
and the <a class="reference external" href="https://pypi.org/project/odoo-addon-extendable">odoo addon
379+
extendable</a></p>
385380
<p><strong>Table of contents</strong></p>
386381
<div class="contents local topic" id="contents">
387382
<ul class="simple">
@@ -397,71 +392,63 @@ <h1>Pydantic</h1>
397392
</ul>
398393
</div>
399394
<div class="section" id="usage">
400-
<h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
395+
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
401396
<p>To support pydantic models that map to Odoo models, Pydantic model
402397
instances can be created from arbitrary odoo model instances by mapping
403-
fields from odoo models to fields defined by the pydantic model. To ease
404-
the mapping, the addon provide a utility class
405-
odoo.addons.pydantic.utils.GenericOdooGetter.</p>
398+
fields from odoo models to fields defined by the pydantic model.</p>
399+
<p>To ease the mapping, the addon provide an utility class (using
400+
<tt class="docutils literal">pydantic&gt;2.0</tt>) <tt class="docutils literal">odoo.addons.pydantic.utils.PydanticOdooBaseModel</tt>:</p>
406401
<pre class="code python literal-block">
407-
<span class="kn">import</span><span class="w"> </span><span class="nn">pydantic</span><span class="w">
408-
</span><span class="kn">from</span><span class="w"> </span><span class="nn">odoo.addons.pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">utils</span><span class="w">
402+
<span class="kn">from</span><span class="w"> </span><span class="nn">odoo.addons.pydantic.utils</span><span class="w"> </span><span class="kn">import</span> <span class="n">PydanticOdooBaseModel</span><span class="w">
409403

410-
</span><span class="k">class</span><span class="w"> </span><span class="nc">Group</span><span class="p">(</span><span class="n">pydantic</span><span class="o">.</span><span class="n">BaseModel</span><span class="p">):</span><span class="w">
411-
</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="w">
412404

413-
</span> <span class="k">class</span><span class="w"> </span><span class="nc">Config</span><span class="p">:</span><span class="w">
414-
</span> <span class="n">orm_mode</span> <span class="o">=</span> <span class="kc">True</span><span class="w">
415-
</span> <span class="n">getter_dict</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">GenericOdooGetter</span><span class="w">
405+
</span><span class="k">class</span><span class="w"> </span><span class="nc">Group</span><span class="p">(</span><span class="n">PydanticOdooBaseModel</span><span class="p">):</span><span class="w">
406+
</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="w">
416407

417-
</span><span class="k">class</span><span class="w"> </span><span class="nc">UserInfo</span><span class="p">(</span><span class="n">pydantic</span><span class="o">.</span><span class="n">BaseModel</span><span class="p">):</span><span class="w">
408+
</span><span class="k">class</span><span class="w"> </span><span class="nc">UserInfo</span><span class="p">(</span><span class="n">PydanticOdooBaseModel</span><span class="p">):</span><span class="w">
418409
</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="w">
419410
</span> <span class="n">groups</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Group</span><span class="p">]</span> <span class="o">=</span> <span class="n">pydantic</span><span class="o">.</span><span class="n">Field</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="s2">&quot;groups_id&quot;</span><span class="p">)</span><span class="w">
420411

421-
</span> <span class="k">class</span><span class="w"> </span><span class="nc">Config</span><span class="p">:</span><span class="w">
422-
</span> <span class="n">orm_mode</span> <span class="o">=</span> <span class="kc">True</span><span class="w">
423-
</span> <span class="n">getter_dict</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">GenericOdooGetter</span><span class="w">
424-
425412
</span><span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">user</span><span class="w">
426413
</span><span class="n">user_info</span> <span class="o">=</span> <span class="n">UserInfo</span><span class="o">.</span><span class="n">from_orm</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
427414
</pre>
428-
<p>See the official <a class="reference external" href="https://pydantic-docs.helpmanual.io/">Pydantic
429-
documentation</a> to discover all
430-
the available functionalities.</p>
415+
<p>See the official <a class="reference external" href="https://docs.pydantic.dev/">Pydantic documentation</a>
416+
to discover all the available functionalities.</p>
431417
</div>
432418
<div class="section" id="known-issues-roadmap">
433-
<h2><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h2>
419+
<h1><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h1>
434420
<p>The
435421
<a class="reference external" href="https://github.com/OCA/rest-framework/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement+label%3Apydantic">roadmap</a>
436422
and <a class="reference external" href="https://github.com/OCA/rest-framework/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Apydantic">known
437423
issues</a>
438424
can be found on GitHub.</p>
439425
</div>
440426
<div class="section" id="bug-tracker">
441-
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
427+
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
442428
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/rest-framework/issues">GitHub Issues</a>.
443429
In case of trouble, please check there if your issue has already been reported.
444430
If you spotted it first, help us to smash it by providing a detailed and welcomed
445431
<a class="reference external" href="https://github.com/OCA/rest-framework/issues/new?body=module:%20pydantic%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
446432
<p>Do not contact contributors directly about support or help with technical issues.</p>
447433
</div>
448434
<div class="section" id="credits">
449-
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
435+
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
450436
<div class="section" id="authors">
451-
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
437+
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
452438
<ul class="simple">
453439
<li>ACSONE SA/NV</li>
454440
</ul>
455441
</div>
456442
<div class="section" id="contributors">
457-
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
443+
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
458444
<ul class="simple">
459445
<li>Laurent Mignon &lt;<a class="reference external" href="mailto:laurent.mignon&#64;acsone.eu">laurent.mignon&#64;acsone.eu</a>&gt;</li>
460446
<li>Tris Doan &lt;<a class="reference external" href="mailto:tridm&#64;trobz.com">tridm&#64;trobz.com</a>&gt;</li>
447+
<li>Pierre Verkest &lt;<a class="reference external" href="mailto:pierre&#64;verkest.fr">pierre&#64;verkest.fr</a>&gt;</li>
461448
</ul>
462449
</div>
463450
<div class="section" id="maintainers">
464-
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
451+
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
465452
<p>This module is maintained by the OCA.</p>
466453
<a class="reference external image-reference" href="https://odoo-community.org">
467454
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
@@ -476,6 +463,5 @@ <h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
476463
</div>
477464
</div>
478465
</div>
479-
</div>
480466
</body>
481-
</html>
467+
</html>

pydantic/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import test_pydantic_generic_odoo_getter

0 commit comments

Comments
 (0)