oca-ocb-core/odoo-bringout-oca-ocb-base/odoo/modules/neutralize.py
Ernad Husremovic 991d2234ca 19.0 vanilla
2025-10-03 18:07:25 +02:00

41 lines
1.2 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from __future__ import annotations
import logging
import typing
from contextlib import suppress
from odoo.tools.misc import file_open
if typing.TYPE_CHECKING:
from collections.abc import Iterable, Iterator
from odoo.sql_db import Cursor
_logger = logging.getLogger(__name__)
def get_installed_modules(cursor: Cursor) -> list[str]:
cursor.execute('''
SELECT name
FROM ir_module_module
WHERE state IN ('installed', 'to upgrade', 'to remove');
''')
return [result[0] for result in cursor.fetchall()]
def get_neutralization_queries(modules: Iterable[str]) -> Iterator[str]:
# neutralization for each module
for module in modules:
filename = f'{module}/data/neutralize.sql'
with suppress(FileNotFoundError):
with file_open(filename) as file:
yield file.read().strip()
def neutralize_database(cursor: Cursor) -> None:
installed_modules = get_installed_modules(cursor)
queries = get_neutralization_queries(installed_modules)
for query in queries:
cursor.execute(query)
_logger.info("Neutralization finished")