NextERP-scripts/upgrade_module.py
2025-04-03 09:46:03 +07:00

93 lines
2.3 KiB
Python

#!/usr/bin/env python
"""Install/update/uninstall specified odoo module."""
import odoorpc
import argparse
USER = "admin"
PASSWORD = "admin"
HOST = "localhost"
PORT = "8069"
DB = "odoodb"
def prepare_args():
"""Prepare arguments for module action RPC call."""
parser = argparse.ArgumentParser(
description="Run modules install, upgrade or uninstall."
)
parser.add_argument(
"-i",
"--install",
help="Comma separated list of modules to install",
)
parser.add_argument(
"-u",
"--upgrade",
help="Comma separated list of modules to upgrade",
)
parser.add_argument(
"-del",
"--delete",
help="Comma separated list of modules to uninstall",
)
parser.add_argument(
"--user",
help="User to log in with",
default=USER,
)
parser.add_argument(
"--password",
help="Password to log in with",
default=PASSWORD,
)
parser.add_argument(
"--host",
help="Host to log in to",
default=HOST,
)
parser.add_argument(
"--port",
help="Odoo port",
default=PORT,
)
parser.add_argument(
"-d",
"--database",
help="Database name to log in to",
default=DB,
)
return parser.parse_args()
def login(user, password, host, port, database):
"""Login to Odoo database and return connection object."""
odoo = odoorpc.ODOO(host, port=port)
odoo.login(database, user, password)
return odoo
def _find_modules(env, module_names):
IrModuleModule = env["ir.module.module"]
modules = module_names.replace(" ", "").split(",")
module_ids = IrModuleModule.search([("name", "in", modules)])
return IrModuleModule.browse(module_ids)
def trigger_action(env, module_names, action):
modules = _find_modules(env, module_names)
method = getattr(modules, f"button_immediate_{action}")
return method()
if __name__ == "__main__":
args = prepare_args()
odoo = login(args.user, args.password, args.host, args.port, args.database)
env = odoo.env
if args.install:
trigger_action(env, args.install, "install")
if args.upgrade:
trigger_action(env, args.upgrade, "upgrade")
if args.delete:
trigger_action(env, args.delete, "uninstall")