- Mailing Lists
- Contributors
- Module loading priority and inheritance
Archives
- By thread 1419
-
By date
- August 2019 59
- September 2019 118
- October 2019 165
- November 2019 97
- December 2019 35
- January 2020 58
- February 2020 204
- March 2020 121
- April 2020 172
- May 2020 50
- June 2020 158
- July 2020 85
- August 2020 94
- September 2020 193
- October 2020 277
- November 2020 100
- December 2020 159
- January 2021 38
- February 2021 87
- March 2021 146
- April 2021 73
- May 2021 90
- June 2021 86
- July 2021 123
- August 2021 50
- September 2021 68
- October 2021 66
- November 2021 74
- December 2021 75
- January 2022 98
- February 2022 77
- March 2022 68
- April 2022 31
- May 2022 59
- June 2022 87
- July 2022 141
- August 2022 38
- September 2022 73
- October 2022 152
- November 2022 39
- December 2022 50
- January 2023 93
- February 2023 49
- March 2023 106
- April 2023 47
- May 2023 69
- June 2023 92
- July 2023 64
- August 2023 103
- September 2023 91
- October 2023 101
- November 2023 94
- December 2023 46
- January 2024 75
- February 2024 79
- March 2024 104
- April 2024 63
- May 2024 40
- June 2024 160
- July 2024 80
- August 2024 70
- September 2024 62
- October 2024 121
- November 2024 117
- December 2024 89
- January 2025 59
- February 2025 104
- March 2025 96
- April 2025 107
- May 2025 52
- June 2025 72
- July 2025 60
- August 2025 81
- September 2025 124
- October 2025 63
- November 2025 22
Contributors
Module loading priority and inheritance
Yann PAPOUIN, Ingénieur R&D | DEC
by Yann Papouin - 03:31 - 15 Jun 2022
Follow-Ups
-
Re: Module loading priority and inheritance
Richard, I understand your concern about the priority number, but having it in our toolbox could still be extremely useful.As a first step, I made a PR that implements both:Contrary to my original proposal, I don't alter the SQL query, the sorting is done in python like the dependency loading by using the manifest attributes (not stored in the DB)
by Yann Papouin - 03:21 - 17 Jun 2022 -
Re: Module loading priority and inheritance
Yann,
Yes, we too have occasionally encountered such issues. Bridging modules are sometimes required to ensure correct execution, but then, that is still for modules all within our control.
We often find the issue worst when using a third-party app, where there is a complete method overwrite (and maybe justifiably so).
Under your proposal, though, one would need to know about the modules causing the issue - which generally, I guess, is feasable.
I do wonder, though, if implementing a "soft_depends" as opposed to a loading priority, is better.
If randomly, in a manifest, there is a loading priority, then you sort of need to know and set all the other loading priorities, even in the third party modules, which may have their own issues.
A soft depends, at least, it is clear that "this module has a conflict with that module which is now resolved by this dependency", as a priority number just gets lost (like sequences on views when you have many modules extending views)
I would love to see something in this area...
Richard
Kind Regards
T: (03) 9135 1900 | M: 0403 76 76 76 | A: Bld 10/435 Williamstown Road, Port Melbourne, 3207
MAKING GROWTH THROUGH TECHNOLOGY EASY
Notice: This email and any files transmitted with it are confidential and are intended solely for the use of the individual or entity to which they are addressed. If you are not the intended recipient, you may not disclose or use the information in this email in any way. If you have received this email in error please notify the sender. Although reasonable precautions have been taken to ensure no viruses are present in this email, no responsibility is accepted by WilldooIT Pty Ltd or its related entities for any loss or damage arising from the use of this email or attachments. Any views expressed in this email or file attachments are those of the individual sender only, unless expressly stated to be those of WilldooIT Pty Ltd ABN 85 006 073 052 or any of its related entities.
From: Yann Papouin <ypa@decgroupe.com>
Sent: Friday, 17 June 2022 7:02 PM
To: Contributors <contributors@odoo-community.org>
Subject: Re: Module loading priority and inheritanceAfter investigation, the sequence field is only used for the kanban view to display applications in a specific order.
Module list is fetched from database in odoo/odoo/modules/loading.py::load_marked_modules with this query
cr.execute("SELECT name from ir_module_module WHERE state IN %s" ,(tuple(states),))
So, the module loading order actually depends on 4 params:- PostgreSQL database collation
- Module name
- Datetime of the creation of the ir_module_module row (since no ORDER BY is defined in the query)
- The dependencies
That's a terrible loading implementation as the parameter 3 is based on an internal postgreSQL data, it also depends on the list order of your addons_path and also depends on when odoo/addons/base/models/ir_module.py::update_list is called.Example for this last assertion:
- On the development database:
- You add the module account_extra, that depends on account and override method update_something, in your main addons path
- update_list()
- Two weeks later, you add the module account_best , that also depends on account and also override the method update_something, in your main addons path
- update_list()
- Module account_extra will be loaded before account_best
- Three weeks later, on the production database:
- You add modules account_extra and account_best in your main addons path
- update_list()
- Module account_best will be loaded before account_extra
And there I'm not talking about other cases like:- Multiple addons_path
- Manual module deletion from odoo module list followed by a module list update
- Manual module installation from UI whereas the server is already started with loaded modules
So, I agree that most cases would be solved by the depends attribute but a fix could still be:- Add a loading_priority manifest key:
- default value is 0 if not set, could be positive (load before) or negative (load after)
- add an ORDER BY loading_priority, name
in all SQL query of the loading.py
- Add a soft_depends manifest key:
- a list of modules that we depends on, only if they exists and are installed
_______________________________________________
Mailing-List: https://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: https://odoo-community.org/groups?unsubscribe
by "Richard deMeester" <richard.demeester@willdooit.com> - 02:46 - 17 Jun 2022 -
Re: Module loading priority and inheritance
Thanks for the investigation. Your proposals seems good, but not sure if Odoo will add such mechanisms in the framework. You can try.Regards.
by Pedro M. Baeza - 12:26 - 17 Jun 2022 -
Re: Module loading priority and inheritance
After investigation, the sequence field is only used for the kanban view to display applications in a specific order.Module list is fetched from database in odoo/odoo/modules/loading.py::load_marked_modules with this querycr.execute("SELECT name from ir_module_module WHERE state IN %s" ,(tuple(states),))So, the module loading order actually depends on 4 params:- PostgreSQL database collation
- Module name
- Datetime of the creation of the ir_module_module row (since no ORDER BY is defined in the query)
- The dependencies
That's a terrible loading implementation as the parameter 3 is based on an internal postgreSQL data, it also depends on the list order of your addons_path and also depends on when odoo/addons/base/models/ir_module.py::update_list is called.Example for this last assertion:- On the development database:
- You add the module account_extra, that depends on account and override method update_something, in your main addons path
- update_list()
- Two weeks later, you add the module account_best , that also depends on account and also override the method update_something, in your main addons path
- update_list()
- Module account_extra will be loaded before account_best
- Three weeks later, on the production database:
- You add modules account_extra and account_best in your main addons path
- update_list()
- Module account_best will be loaded before account_extra
And there I'm not talking about other cases like:- Multiple addons_path
- Manual module deletion from odoo module list followed by a module list update
- Manual module installation from UI whereas the server is already started with loaded modules
So, I agree that most cases would be solved by the depends attribute but a fix could still be:- Add a loading_priority manifest key:
- default value is 0 if not set, could be positive (load before) or negative (load after)
- add an ORDER BY
loading_priority, name
in all SQL query of the loading.py
- Add a soft_depends manifest key:
- a list of modules that we depends on, only if they exists and are installed
by Yann Papouin - 11:00 - 17 Jun 2022 -
Re: Module loading priority and inheritance
AFAIK, there's a `sequence` manifest key for such loading order.Regards.
by Pedro M. Baeza - 05:26 - 15 Jun 2022