# 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()