93 lines
2.3 KiB
Python
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")
|