Coverage for adhoc-cicd-odoo-odoo / odoo / modules / neutralize.py: 36%
21 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 18:05 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-09 18:05 +0000
1# Part of Odoo. See LICENSE file for full copyright and licensing details.
2from __future__ import annotations
4import logging
5import typing
6from contextlib import suppress
8from odoo.tools.misc import file_open
10if typing.TYPE_CHECKING:
11 from collections.abc import Iterable, Iterator
13 from odoo.sql_db import Cursor
15_logger = logging.getLogger(__name__)
18def get_installed_modules(cursor: Cursor) -> list[str]:
19 cursor.execute('''
20 SELECT name
21 FROM ir_module_module
22 WHERE state IN ('installed', 'to upgrade', 'to remove');
23 ''')
24 return [result[0] for result in cursor.fetchall()]
27def get_neutralization_queries(modules: Iterable[str]) -> Iterator[str]:
28 # neutralization for each module
29 for module in modules:
30 filename = f'{module}/data/neutralize.sql'
31 with suppress(FileNotFoundError):
32 with file_open(filename) as file:
33 yield file.read().strip()
36def neutralize_database(cursor: Cursor) -> None:
37 installed_modules = get_installed_modules(cursor)
38 queries = get_neutralization_queries(installed_modules)
39 for query in queries:
40 cursor.execute(query)
41 _logger.info("Neutralization finished")