69 lines
2.7 KiB
Python
69 lines
2.7 KiB
Python
# cli/module.py
|
|
import tqdm
|
|
from services.odoo.module import OdooModuleManager
|
|
import lib.color_log as color_log
|
|
|
|
|
|
def setup_cli(subparsers):
|
|
module_parser = subparsers.add_parser("module", help="Manage instance module")
|
|
module_parser.add_argument(
|
|
"action", choices=["install", "uninstall", "upgrade","update_list"], help="Module action"
|
|
)
|
|
module_parser.add_argument("instance", type=str, help="Instance Name")
|
|
module_parser.add_argument(
|
|
"--modules", "-m", nargs="+", help="List of modules to process"
|
|
)
|
|
module_parser.set_defaults(func=module)
|
|
return module_parser
|
|
|
|
|
|
def module(args):
|
|
module_manager = OdooModuleManager(config_path="utility/config/settings.yaml")
|
|
if args.modules:
|
|
color_log.Show(
|
|
"INFO",
|
|
f"Processing modules: {', '.join(args.modules)} for {args.instance}",
|
|
)
|
|
else:
|
|
color_log.Show(
|
|
"INFO",
|
|
f"No modules specified. Using default modules for {args.instance}",
|
|
)
|
|
args.modules = module_manager.get_modules(args.instance)
|
|
|
|
pbar = tqdm.tqdm(total=len(args.modules), desc="Processing modules", unit="module")
|
|
|
|
for module_name in args.modules:
|
|
try:
|
|
match args.action:
|
|
case "update_list":
|
|
pbar.set_description(f"Installing {module_name}")
|
|
module_manager.update_list(args.instance)
|
|
case "install":
|
|
pbar.set_description(f"Installing {module_name}")
|
|
module_manager.install(args.instance, [module_name])
|
|
case "uninstall":
|
|
pbar.set_description(f"Uninstalling {module_name}")
|
|
module_manager.uninstall(args.instance, [module_name])
|
|
case "upgrade":
|
|
# Check if module is installed first
|
|
if not module_manager.is_module_installed(args.instance, module_name):
|
|
pbar.set_description(f"Installing {module_name}")
|
|
module_manager.install(args.instance, [module_name])
|
|
pbar.set_description(f"Upgrading {module_name}")
|
|
module_manager.upgrade(args.instance, [module_name])
|
|
case _:
|
|
color_log.Show(
|
|
"FAILED",
|
|
f"Invalid action '{args.action}' for module management.",
|
|
)
|
|
return
|
|
pbar.update(1)
|
|
except Exception as e:
|
|
color_log.Show(
|
|
"FAILED",
|
|
f"Error processing module {module_name}: {str(e)}",
|
|
)
|
|
continue
|
|
pbar.close()
|