From 74e5cf78708e4bfaa488a67059063948b7e49e48 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Thu, 23 Nov 2023 09:53:17 +0100 Subject: [PATCH] 1.3.0 --- .bumpversion.cfg | 2 +- HISTORY.rst | 47 ++++++++++++++++++++++++++++++ news/19.bugfix | 39 ------------------------- src/extendable_pydantic/version.py | 2 +- 4 files changed, 49 insertions(+), 41 deletions(-) delete mode 100644 news/19.bugfix diff --git a/.bumpversion.cfg b/.bumpversion.cfg index a0dbe4d..c3a87ca 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.2.1 +current_version = 1.3.0 [bumpversion:file:.bumpversion.cfg] diff --git a/HISTORY.rst b/HISTORY.rst index d5fcf86..b47e972 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,50 @@ +1.3.0 (2023-11-23) +================== + +Bugfixes +-------- + +- Fix problem with unresolved annotated types in the aggregated model. + + At the end of the registry building process, the registry contains the aggregated + model. Each aggregated model is the result of the build of a new class based on + a hierarchy of all the classes defined as 'extends' of the same base class. The + order of the classes hierarchy is defined by the order in which the classes are + loaded by the class loader or by a specific order defined by the developer when + the registry is built. + + The last step of the build process is to resolve all the annotated types in the + aggregated model and rebuild the pydantic schema validator. This step is necessary + because when the developer defines a model, some fields can be annotated with a + type that refers to a class that is an extendable class. It's therefore necessary + to update the annotated type with the aggregated result of the specified + extendable class and rebuild the pydantic schema validator to take into account + the new annotated types. + + Prior to this commit, the resolution of the annotated types was not done in a + recursive way and the rebuild of the pydantic schema validator was only done + just after the resolution of an aggregated class. This means that if a class A + is an extendable defining a fields annotated with a type that refers to a class + B, and if the class B is an extendable class defining a field of type C, + the annotated type of the field of the class A was resolved with the aggregated + model of the class B but we didn't resolve th annotated type of the field ot type + B with the aggregated model of the type C. Therefore when the pydantic schema + validator was rebuilt after the resolution of the class A, if the class B was + not yet resolved and therefore the pydantic schema validator was not rebuilt, + the new schema validator for the class A was not correct because it didn't take + into account the aggregated model of the class C nor the definition of extra + fields of the aggregated model of the class B. + + This commit changes the resolution of the annotated types to be recursive. Therefore + when the pydantic schema validator is rebuilt, we are sure that all referenced + subtypes are resolved and defines a correct schema validator. In the + same time, when an aggregated class is resolved, it's marked as resolved to avoid + to resolve it again and rebuild the pydantic schema validator again for nothing. + In addition to resolve the initial problem, this commit also improves + the performance of the build process because schema validators rebuilds are + done only once per aggregated class. (`#19 `_) + + 1.2.1 (2023-11-13) ================== diff --git a/news/19.bugfix b/news/19.bugfix deleted file mode 100644 index 0ffec1a..0000000 --- a/news/19.bugfix +++ /dev/null @@ -1,39 +0,0 @@ -Fix problem with unresolved annotated types in the aggregated model. - -At the end of the registry building process, the registry contains the aggregated -model. Each aggregated model is the result of the build of a new class based on -a hierarchy of all the classes defined as 'extends' of the same base class. The -order of the classes hierarchy is defined by the order in which the classes are -loaded by the class loader or by a specific order defined by the developer when -the registry is built. - -The last step of the build process is to resolve all the annotated types in the -aggregated model and rebuild the pydantic schema validator. This step is necessary -because when the developer defines a model, some fields can be annotated with a -type that refers to a class that is an extendable class. It's therefore necessary -to update the annotated type with the aggregated result of the specified -extendable class and rebuild the pydantic schema validator to take into account -the new annotated types. - -Prior to this commit, the resolution of the annotated types was not done in a -recursive way and the rebuild of the pydantic schema validator was only done -just after the resolution of an aggregated class. This means that if a class A -is an extendable defining a fields annotated with a type that refers to a class -B, and if the class B is an extendable class defining a field of type C, -the annotated type of the field of the class A was resolved with the aggregated -model of the class B but we didn't resolve th annotated type of the field ot type -B with the aggregated model of the type C. Therefore when the pydantic schema -validator was rebuilt after the resolution of the class A, if the class B was -not yet resolved and therefore the pydantic schema validator was not rebuilt, -the new schema validator for the class A was not correct because it didn't take -into account the aggregated model of the class C nor the definition of extra -fields of the aggregated model of the class B. - -This commit changes the resolution of the annotated types to be recursive. Therefore -when the pydantic schema validator is rebuilt, we are sure that all referenced -subtypes are resolved and defines a correct schema validator. In the -same time, when an aggregated class is resolved, it's marked as resolved to avoid -to resolve it again and rebuild the pydantic schema validator again for nothing. -In addition to resolve the initial problem, this commit also improves -the performance of the build process because schema validators rebuilds are -done only once per aggregated class. diff --git a/src/extendable_pydantic/version.py b/src/extendable_pydantic/version.py index a955fda..67bc602 100644 --- a/src/extendable_pydantic/version.py +++ b/src/extendable_pydantic/version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0"