odoo-openupgrade-wizard/odoo_openupgrade_wizard/cli_generate_module_analysis.py

136 lines
4.1 KiB
Python

import click
from loguru import logger
from odoo_openupgrade_wizard.cli_options import (
database_option,
get_migration_steps_from_options,
step_option,
)
from odoo_openupgrade_wizard.configuration_version_dependant import (
generate_analysis_files,
generate_records,
get_installable_odoo_modules,
get_upgrade_analysis_module,
)
from odoo_openupgrade_wizard.tools_odoo import kill_odoo, run_odoo
from odoo_openupgrade_wizard.tools_odoo_instance import OdooInstance
@click.command()
@step_option
@database_option
@click.option(
"-m",
"--modules",
type=str,
help="Coma-separated list of modules to analysis."
" Let empty to analyse all the Odoo modules.",
)
@click.pass_context
def generate_module_analysis(ctx, step, database, modules):
migration_steps = get_migration_steps_from_options(ctx, step - 1, step)
initial_step = migration_steps[0].copy()
final_step = migration_steps[1].copy()
alternative_xml_rpc_port = ctx.obj["config"]["odoo_host_xmlrpc_port"] + 10
if not database:
database = "%s__analysis__" % (
ctx.obj["config"]["project_name"].replace("-", "_"),
)
initial_database = "%s_%s" % (
database,
str(initial_step["release"]).replace(".", ""),
)
final_database = "%s_%s" % (
database,
str(final_step["release"]).replace(".", ""),
)
modules = modules and modules.split(",") or []
# Force to be in openupgrade mode
initial_step["action"] = final_step["action"] = "upgrade"
try:
# INITIAL : Run odoo and install analysis module
run_odoo(
ctx,
initial_step,
database=initial_database,
detached_container=False,
stop_after_init=True,
init=get_upgrade_analysis_module(initial_step),
)
# INITIAL : Run odoo for odoorpc
initial_container = run_odoo(
ctx,
initial_step,
database=initial_database,
detached_container=True,
)
# # INITIAL : install modules to analyse and generate records
initial_instance = OdooInstance(ctx, initial_database)
initial_modules = (
modules
and modules
or get_installable_odoo_modules(initial_instance, initial_step)
)
initial_instance.install_modules(initial_modules)
generate_records(initial_instance, initial_step)
# FINAL : Run odoo and install analysis module
run_odoo(
ctx,
final_step,
database=final_database,
detached_container=False,
stop_after_init=True,
init=get_upgrade_analysis_module(final_step),
alternative_xml_rpc_port=alternative_xml_rpc_port,
)
# name of the first odoo instance inside the second odoo instance
odoo_initial_host_name = "odoo_initial_instance"
# FINAL : Run odoo for odoorpc and install modules to analyse
run_odoo(
ctx,
final_step,
database=final_database,
detached_container=True,
alternative_xml_rpc_port=alternative_xml_rpc_port,
links={initial_container.name: odoo_initial_host_name},
)
# # FINAL : install modules to analyse and generate records
final_instance = OdooInstance(
ctx,
final_database,
alternative_xml_rpc_port=alternative_xml_rpc_port,
)
final_modules = (
modules
and modules
or get_installable_odoo_modules(final_instance, final_step)
)
final_instance.install_modules(final_modules)
generate_records(final_instance, final_step)
generate_analysis_files(
final_instance,
final_step,
odoo_initial_host_name,
initial_database,
)
except (KeyboardInterrupt, SystemExit):
logger.info("Received Keyboard Interrupt or System Exiting...")
finally:
kill_odoo(ctx, initial_step)
kill_odoo(ctx, final_step)