From 227671290df2c172ab520242780286ba4f4d95e6 Mon Sep 17 00:00:00 2001 From: Pierre Masereel Date: Wed, 29 Nov 2023 16:46:42 +0100 Subject: [PATCH] [FIX] base_import_module: add function returning dependencies A function that returns the list of missing modules is needed to know if the the customer needs to changi his plan when importing an industry module. closes odoo/odoo#144241 Signed-off-by: Pierre Masereel (pim) --- .../models/base_import_module.py | 4 ++++ .../tests/test_import_module.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/addons/base_import_module/models/base_import_module.py b/addons/base_import_module/models/base_import_module.py index f65a1a82137..0035c9eb8fd 100644 --- a/addons/base_import_module/models/base_import_module.py +++ b/addons/base_import_module/models/base_import_module.py @@ -29,6 +29,10 @@ class BaseImportModule(models.TransientModel): 'url': '/web', } + def get_dependencies_to_install_names(self): + module_ids = self.env['ir.module.module']._get_missing_dependencies_modules(base64.decodebytes(self.module_file)) + return module_ids.mapped('name') + def action_module_open(self): self.ensure_one() return { diff --git a/addons/base_import_module/tests/test_import_module.py b/addons/base_import_module/tests/test_import_module.py index 65c10ba0327..a84a59369e5 100644 --- a/addons/base_import_module/tests/test_import_module.py +++ b/addons/base_import_module/tests/test_import_module.py @@ -337,3 +337,19 @@ class TestImportModuleHttp(TestImportModule, odoo.tests.HttpCase): self.assertEqual(asset.path, asset_path) asset_data = files[1][1] self.assertEqual(self.url_open(asset_path).content, asset_data) + + def test_check_zip_dependencies(self): + files = [ + ('foo/__manifest__.py', b"{'data': ['data.xml']}") + ] + archive = BytesIO() + with ZipFile(archive, 'w') as zipf: + for path, data in files: + zipf.writestr(path, data) + import_module = self.env['base.import.module'].create({ + 'module_file': base64.b64encode(archive.getvalue()), + 'state': 'init', + 'modules_dependencies': self.env['ir.module.module']._get_missing_dependencies(archive.getvalue()) + }) + dependencies_names = import_module.get_dependencies_to_install_names() + self.assertEqual(dependencies_names, [])