From b2faa9ea8cb29e52e91d845b6677cdd13309ad47 Mon Sep 17 00:00:00 2001 From: Nicolas Bayet Date: Wed, 27 Sep 2023 13:31:44 +0200 Subject: [PATCH] [FIX] base,web_editor,website: pregenerate lazyloaded bundles Prior to this commit, lazy-loaded bundles weren't pregenerated, potentially causing non-deterministic test failures when the generation process took too long. Plus, each Python test loading these bundles necessitated their regeneration. With this commit, the lazy-loaded bundles are now included in the pregenerated bundles. task-3493014 runbot-24842 closes odoo/odoo#134464 Related: odoo/enterprise#46985 Signed-off-by: David Monjoie (dmo) --- addons/test_mass_mailing/models/__init__.py | 1 + addons/test_mass_mailing/models/ir_qweb.py | 10 +++++++ addons/web_editor/models/__init__.py | 1 + addons/web_editor/models/ir_qweb.py | 15 +++++++++++ addons/website/models/ir_qweb.py | 8 ++++++ odoo/addons/base/models/ir_qweb.py | 30 ++++++++++++++------- 6 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 addons/test_mass_mailing/models/ir_qweb.py create mode 100644 addons/web_editor/models/ir_qweb.py diff --git a/addons/test_mass_mailing/models/__init__.py b/addons/test_mass_mailing/models/__init__.py index fcd1ee0e951..db7ad3a9895 100644 --- a/addons/test_mass_mailing/models/__init__.py +++ b/addons/test_mass_mailing/models/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from . import ir_qweb from . import mailing_models from . import mailing_models_cornercase diff --git a/addons/test_mass_mailing/models/ir_qweb.py b/addons/test_mass_mailing/models/ir_qweb.py new file mode 100644 index 00000000000..b70445bd367 --- /dev/null +++ b/addons/test_mass_mailing/models/ir_qweb.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +from odoo import models + +class IrQWeb(models.AbstractModel): + _inherit = "ir.qweb" + + def _get_bundles_to_pregenarate(self): + js_assets, css_assets = super(IrQWeb, self)._get_bundles_to_pregenarate() + assets = {'mass_mailing.iframe_css_assets_edit'} + return (js_assets | assets, css_assets | assets) diff --git a/addons/web_editor/models/__init__.py b/addons/web_editor/models/__init__.py index 393b0721b56..87d483d5169 100644 --- a/addons/web_editor/models/__init__.py +++ b/addons/web_editor/models/__init__.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import ir_attachment +from . import ir_qweb from . import ir_qweb_fields from . import ir_ui_view from . import ir_http diff --git a/addons/web_editor/models/ir_qweb.py b/addons/web_editor/models/ir_qweb.py new file mode 100644 index 00000000000..5696cf85dc0 --- /dev/null +++ b/addons/web_editor/models/ir_qweb.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from odoo import models + +class IrQWeb(models.AbstractModel): + _inherit = "ir.qweb" + + def _get_bundles_to_pregenarate(self): + js_assets, css_assets = super(IrQWeb, self)._get_bundles_to_pregenarate() + assets = { + 'web_editor.assets_legacy_wysiwyg', + 'web_editor.backend_assets_wysiwyg', + 'web_editor.assets_wysiwyg', + 'web_editor.wysiwyg_iframe_editor_assets', + } + return (js_assets | assets, css_assets | assets) diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index 836d55b3304..4bbc4ad4b70 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -136,3 +136,11 @@ class IrQWeb(models.AbstractModel): if isinstance(atts.get('style'), str) and 'background-image' in atts['style']: atts['style'] = re_background_image.sub(lambda m: '%s%s' % (m[1], url_adapter(m[2])), atts['style']) return atts + + def _get_bundles_to_pregenarate(self): + js_assets, css_assets = super(IrQWeb, self)._get_bundles_to_pregenarate() + assets = { + 'website.backend_assets_all_wysiwyg', + 'website.assets_all_wysiwyg', + } + return (js_assets | assets, css_assets | assets) diff --git a/odoo/addons/base/models/ir_qweb.py b/odoo/addons/base/models/ir_qweb.py index f7a3b11e4b8..d67d26bc964 100644 --- a/odoo/addons/base/models/ir_qweb.py +++ b/odoo/addons/base/models/ir_qweb.py @@ -2626,6 +2626,24 @@ class IrQWeb(models.AbstractModel): """ _logger.runbot('Pregenerating assets bundles') + js_bundles, css_bundles = self._get_bundles_to_pregenarate() + + links = [] + start = time.time() + for bundle in sorted(js_bundles): + links += self._generate_asset_links(bundle, css=False, js=True) + _logger.info('JS Assets bundles generated in %s seconds', time.time()-start) + start = time.time() + for bundle in sorted(css_bundles): + links += self._generate_asset_links(bundle, css=True, js=False) + _logger.info('CSS Assets bundles generated in %s seconds', time.time()-start) + return links + + def _get_bundles_to_pregenarate(self): + """ + Returns the list of bundles to pregenerate. + """ + views = self.env['ir.ui.view'].search([('type', '=', 'qweb'), ('arch_db', 'like', 't-call-assets')]) js_bundles = set() css_bundles = set() @@ -2638,16 +2656,8 @@ class IrQWeb(models.AbstractModel): js_bundles.add(asset) if css: css_bundles.add(asset) - links = [] - start = time.time() - for bundle in sorted(js_bundles): - links += self._generate_asset_links(bundle, css=False, js=True) - _logger.info('JS Assets bundles generated in %s seconds', time.time()-start) - start = time.time() - for bundle in sorted(css_bundles): - links += self._generate_asset_links(bundle, css=True, js=False) - _logger.info('CSS Assets bundles generated in %s seconds', time.time()-start) - return links + + return (js_bundles, css_bundles) def render(template_name, values, load, **options):