187 lines
6.0 KiB
Python
187 lines
6.0 KiB
Python
#import debugpy
|
|
#debugpy.listen(("0.0.0.0", 5678))
|
|
#print("⏳ Warten auf Debugger-Anbindung (VS Code: Python: Remote Attach)...")
|
|
#debugpy.wait_for_client()
|
|
#print("✅ Debugger verbunden!")
|
|
|
|
|
|
import datetime
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import click
|
|
import yaml
|
|
from click_loglevel import LogLevel
|
|
from loguru import logger
|
|
|
|
import odoo_openupgrade_wizard
|
|
from odoo_openupgrade_wizard.cli.cli_copydb import copydb
|
|
from odoo_openupgrade_wizard.cli.cli_docker_build import docker_build
|
|
from odoo_openupgrade_wizard.cli.cli_dropdb import dropdb
|
|
from odoo_openupgrade_wizard.cli.cli_dumpdb import dumpdb
|
|
from odoo_openupgrade_wizard.cli.cli_estimate_workload import estimate_workload
|
|
from odoo_openupgrade_wizard.cli.cli_execute_script_python import (
|
|
execute_script_python,
|
|
)
|
|
from odoo_openupgrade_wizard.cli.cli_execute_script_sql import (
|
|
execute_script_sql,
|
|
)
|
|
from odoo_openupgrade_wizard.cli.cli_generate_module_analysis import (
|
|
generate_module_analysis,
|
|
)
|
|
from odoo_openupgrade_wizard.cli.cli_get_code import get_code
|
|
from odoo_openupgrade_wizard.cli.cli_guess_requirement import guess_requirement
|
|
from odoo_openupgrade_wizard.cli.cli_init import init
|
|
from odoo_openupgrade_wizard.cli.cli_install_from_csv import install_from_csv
|
|
from odoo_openupgrade_wizard.cli.cli_psql import psql
|
|
from odoo_openupgrade_wizard.cli.cli_pull_submodule import pull_submodule
|
|
from odoo_openupgrade_wizard.cli.cli_restoredb import restoredb
|
|
from odoo_openupgrade_wizard.cli.cli_run import run
|
|
from odoo_openupgrade_wizard.cli.cli_upgrade import upgrade
|
|
from odoo_openupgrade_wizard.tools.tools_system import ensure_folder_exists
|
|
|
|
DEFAULT_CONFIG_FILE = "config.yml"
|
|
DEFAULT_MODULES_FILE = "modules.csv"
|
|
|
|
|
|
@click.group()
|
|
@click.version_option(version=odoo_openupgrade_wizard.__version__)
|
|
@click.option(
|
|
"--env-folder",
|
|
default="./",
|
|
type=click.Path(
|
|
exists=True,
|
|
file_okay=False,
|
|
writable=True,
|
|
resolve_path=True,
|
|
),
|
|
help="Directory that will contain all the configuration of the wizard "
|
|
"and all the Odoo code required to perform the migrations. Leave "
|
|
"empty to use current directory (./).",
|
|
)
|
|
@click.option(
|
|
"-c",
|
|
"--config-file",
|
|
type=click.Path(
|
|
exists=True,
|
|
file_okay=True,
|
|
),
|
|
help=(
|
|
f"Configuration file to use. By default, a file named "
|
|
f'"{DEFAULT_CONFIG_FILE}" in the environment directory will be used.'
|
|
),
|
|
)
|
|
@click.option(
|
|
"--modules-file",
|
|
type=click.Path(
|
|
exists=True,
|
|
file_okay=True,
|
|
),
|
|
help=(
|
|
f"Modules file to use. By default, a file named "
|
|
f'"{DEFAULT_MODULES_FILE}" in the environment directory will be used.'
|
|
),
|
|
)
|
|
@click.option(
|
|
"--filestore-folder",
|
|
type=click.Path(
|
|
exists=True, file_okay=False, writable=True, resolve_path=True
|
|
),
|
|
help="Directory that contains the Odoo filestore of the database(s) to "
|
|
"migrate. Leave empty to use the subdirectory 'filestore' of the "
|
|
"environment directory.",
|
|
)
|
|
@click.option("-l", "--log-level", type=LogLevel(), default=logging.INFO)
|
|
@click.pass_context
|
|
def main(
|
|
ctx, env_folder, config_file, modules_file, filestore_folder, log_level
|
|
):
|
|
"""Provides a command set to perform Odoo Community Edition migrations.
|
|
|
|
Instructions are provided in the README.md file, or see the
|
|
help provided for each 'Command' listed below. For
|
|
example, to learn more about the `init` command,
|
|
run:
|
|
|
|
`oow init --help`
|
|
"""
|
|
date_begin = datetime.datetime.now()
|
|
logger.remove()
|
|
logger.add(sys.stderr, level=log_level)
|
|
logger.debug(f"Beginning script '{ctx.invoked_subcommand}'...")
|
|
if not isinstance(ctx.obj, dict):
|
|
ctx.obj = {}
|
|
|
|
# Define all the folder required by the tools
|
|
env_folder_path = Path(env_folder)
|
|
src_folder_path = env_folder_path / Path("./src/")
|
|
if filestore_folder:
|
|
filestore_folder_path = filestore_folder
|
|
else:
|
|
filestore_folder_path = env_folder_path / "filestore"
|
|
|
|
script_folder_path = env_folder_path / Path("./scripts/")
|
|
log_folder_path = env_folder_path / Path("./log/")
|
|
|
|
if config_file:
|
|
config_file_path = Path(config_file)
|
|
else:
|
|
config_file_path = env_folder_path / Path(DEFAULT_CONFIG_FILE)
|
|
|
|
if modules_file:
|
|
module_file_path = Path(modules_file)
|
|
else:
|
|
module_file_path = env_folder_path / Path(DEFAULT_MODULES_FILE)
|
|
|
|
if config_file_path.exists():
|
|
# Load the main configuration file
|
|
with open(config_file_path) as file:
|
|
config = yaml.safe_load(file)
|
|
ctx.obj["config"] = config
|
|
|
|
# ensure log folder exists
|
|
ensure_folder_exists(log_folder_path, git_ignore_content=True)
|
|
|
|
# Create log file
|
|
log_prefix = "{}__{}".format(
|
|
date_begin.strftime("%Y_%m_%d__%H_%M_%S"), ctx.invoked_subcommand
|
|
)
|
|
log_file_path = log_folder_path / Path(log_prefix + ".log")
|
|
logger.add(log_file_path)
|
|
|
|
ctx.obj["log_prefix"] = log_prefix
|
|
elif ctx.invoked_subcommand not in ("init", None):
|
|
ctx.fail(
|
|
f"Environment not initialized. "
|
|
f"Expected config file at: {config_file_path}",
|
|
)
|
|
|
|
# Add all global values in the context
|
|
ctx.obj["env_folder_path"] = env_folder_path
|
|
ctx.obj["src_folder_path"] = src_folder_path
|
|
ctx.obj["filestore_folder_path"] = filestore_folder_path
|
|
ctx.obj["script_folder_path"] = script_folder_path
|
|
ctx.obj["log_folder_path"] = log_folder_path
|
|
ctx.obj["config_file_path"] = config_file_path
|
|
ctx.obj["module_file_path"] = module_file_path
|
|
|
|
|
|
main.add_command(copydb)
|
|
main.add_command(restoredb)
|
|
main.add_command(docker_build)
|
|
main.add_command(dropdb)
|
|
main.add_command(dumpdb)
|
|
main.add_command(estimate_workload)
|
|
main.add_command(execute_script_python)
|
|
main.add_command(execute_script_sql)
|
|
main.add_command(generate_module_analysis)
|
|
main.add_command(guess_requirement)
|
|
main.add_command(get_code)
|
|
main.add_command(init)
|
|
main.add_command(install_from_csv)
|
|
main.add_command(psql)
|
|
main.add_command(pull_submodule)
|
|
main.add_command(run)
|
|
main.add_command(upgrade)
|