[IMP] split generate_odoo_command

In 2 functions:

-  generate_odoo_command_options
-  generate_odoo_command

To be able to use generate_odoo_command_options from other places
This commit is contained in:
Simon Maillard 2024-12-04 14:23:24 +00:00 committed by Rémy Taymans
parent eec7068628
commit d595c6584c

View File

@ -121,7 +121,7 @@ def get_docker_container_name(ctx, database: str, migration_step: dict) -> str:
) )
def generate_odoo_command( def generate_odoo_command_options(
ctx, ctx,
migration_step: dict, migration_step: dict,
execution_context: str, execution_context: str,
@ -130,13 +130,13 @@ def generate_odoo_command(
update: str = False, update: str = False,
init: str = False, init: str = False,
stop_after_init: bool = False, stop_after_init: bool = False,
shell: bool = False, ) -> list:
) -> str: """
Generate Odoo command options as a string to append to any command.
"""
odoo_env_path = get_odoo_env_path(ctx, migration_step["version"]) odoo_env_path = get_odoo_env_path(ctx, migration_step["version"])
# Compute 'server_wide_modules' # Compute 'server_wide_modules'
# For that purpose, read the custom odoo.conf file
# to know if server_wide_modules is defined
custom_odoo_config_file = odoo_env_path / "odoo.conf" custom_odoo_config_file = odoo_env_path / "odoo.conf"
parser = configparser.RawConfigParser() parser = configparser.RawConfigParser()
parser.read(custom_odoo_config_file) parser.read(custom_odoo_config_file)
@ -147,7 +147,7 @@ def generate_odoo_command(
migration_step, execution_context migration_step, execution_context
) )
# compute 'addons_path' # Compute 'addons_path'
addons_path_list, empty_addons_path_list = get_odoo_addons_path( addons_path_list, empty_addons_path_list = get_odoo_addons_path(
ctx, odoo_env_path, migration_step, execution_context ctx, odoo_env_path, migration_step, execution_context
) )
@ -161,49 +161,72 @@ def generate_odoo_command(
" because it doesn't contain any odoo module." " because it doesn't contain any odoo module."
) )
# compute 'log_file' # Compute 'log_file'
log_file_name = "{}____{}.log".format( log_file_name = (
ctx.obj["log_prefix"], migration_step["complete_name"] f"{ctx.obj['log_prefix']}____{migration_step['complete_name']}.log"
) )
log_file_docker_path = "/env/log/%s" % log_file_name log_file_docker_path = f"/env/log/{log_file_name}"
database_cmd = database and "--database %s" % database or "" # Build options string
load_cmd = ( options = [
server_wide_modules "--config=/odoo_env/odoo.conf",
and "--load %s" % ",".join(server_wide_modules) "--data-dir=/env/filestore/",
or "" f"--addons-path={addons_path}",
f"--logfile={log_file_docker_path}",
"--db_host=db",
"--db_port=5432",
"--db_user=odoo",
"--db_password=odoo",
"--workers=0",
f"{'--without-demo=all' if not demo else ''}",
f"{'--load ' + ','.join(server_wide_modules) if server_wide_modules else ''}", # noqa
f"{'--database=' + database if database else ''}",
f"{'--update ' + update if update else ''}",
f"{'--init ' + init if init else ''}",
f"{'--stop-after-init' if stop_after_init else ''}",
]
# remove empty strings
return [x for x in options if x]
def generate_odoo_command(
ctx,
migration_step: dict,
execution_context: str,
database: str,
demo: bool = False,
update: str = False,
init: str = False,
stop_after_init: bool = False,
shell: bool = False,
) -> str:
"""
Generate the full Odoo command using options from
generate_odoo_command_options.
"""
options = generate_odoo_command_options(
ctx,
migration_step,
execution_context,
database,
demo,
update,
init,
stop_after_init,
) )
update_cmd = update and "--update %s" % update or ""
init_cmd = init and "--init %s" % init or "" base_command = (
stop_after_init_cmd = stop_after_init and "--stop-after-init" or ""
shell_cmd = shell and "shell" or ""
demo_cmd = not demo and "--without-demo all" or ""
command = (
Path("/odoo_env") Path("/odoo_env")
/ Path(get_odoo_folder(migration_step, execution_context)) / Path(get_odoo_folder(migration_step, execution_context))
/ Path(get_odoo_run_command(migration_step)) / Path(get_odoo_run_command(migration_step))
) )
result = ( options_as_string = " ".join(options)
f" {command}" if shell:
f" {shell_cmd}" return f"{base_command} shell {options_as_string}"
f" --config=/odoo_env/odoo.conf" else:
f" --data-dir=/env/filestore/" return f"{base_command} {options_as_string}"
f" --addons-path={addons_path}"
f" --logfile={log_file_docker_path}"
f" --db_host=db"
f" --db_port=5432"
f" --db_user=odoo"
f" --db_password=odoo"
f" --workers=0"
f" {demo_cmd}"
f" {load_cmd}"
f" {database_cmd}"
f" {update_cmd}"
f" {init_cmd}"
f" {stop_after_init_cmd}"
)
return result
def run_odoo( def run_odoo(