diff --git a/odoo_tools/tasks/module.py b/odoo_tools/tasks/module.py index 71765b4..80d43e0 100644 --- a/odoo_tools/tasks/module.py +++ b/odoo_tools/tasks/module.py @@ -5,6 +5,8 @@ from invoke import task +from ..utils import db, ui + def get_addons_path(): """Reconstruct addons_path based on known odoo module locations""" @@ -59,8 +61,26 @@ def get_dependencies(self): with open(manifest_path) as f: return eval(f.read()).get("depends", []) + @classmethod + def get_installed_addons(cls, dbname="odoodb"): + query = "SELECT name FROM ir_module_module WHERE state = 'installed';" + result = db.execute_db_request(dbname, query) + return [mod_name for [mod_name] in result] + @task def where_is(ctx, module_name): """Locate a module""" print(Module(module_name).path) + + +@task +def installed(ctx, db_name="odoodb"): + """List installed addons.""" + db_list = db.get_db_list() + if db_name not in db_list: + ui.exit_msg( + f"Database {db_name} does not exist.\nAvailable: {', '.join(db_list)}" + ) + res = Module.get_installed_addons(dbname=db_name) + print("\n".join(sorted(res)))