#!/usr/bin/env python3 """Install/update/uninstall specified odoo module.""" import odoorpc import argparse USER = 'admin' PASSWORD = 'admin' HOST = '127.0.0.1' 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')