mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-19 23:11:59 +02:00
41 lines
1.2 KiB
Python
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")
|