summaryrefslogtreecommitdiff
path: root/openerpcommand/module.py
diff options
context:
space:
mode:
Diffstat (limited to 'openerpcommand/module.py')
-rw-r--r--openerpcommand/module.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/openerpcommand/module.py b/openerpcommand/module.py
new file mode 100644
index 00000000000..550e0a2be28
--- /dev/null
+++ b/openerpcommand/module.py
@@ -0,0 +1,68 @@
+"""
+Show module information for a given database or from the file-system.
+"""
+import os
+import sys
+import textwrap
+
+from . import common
+
+# TODO provide a --rpc flag to use XML-RPC (with a specific username) instead
+# of server-side library.
+def run(args):
+ assert args.database
+ import openerp
+
+ config = openerp.tools.config
+ config['log_handler'] = [':CRITICAL']
+ if args.addons:
+ args.addons = args.addons.split(':')
+ else:
+ args.addons = []
+ config['addons_path'] = ','.join(args.addons)
+ openerp.netsvc.init_logger()
+
+ if args.filesystem:
+ module_names = common.get_addons_from_paths(args.addons, [])
+ print "Modules (addons path %s):" % (', '.join(args.addons),)
+ for x in sorted(module_names):
+ print x
+ else:
+ registry = openerp.modules.registry.RegistryManager.get(
+ args.database, update_module=False)
+
+ xs = []
+ ir_module_module = registry.get('ir.module.module')
+ cr = registry.db.cursor() # TODO context manager
+ try:
+ ids = ir_module_module.search(cr, openerp.SUPERUSER_ID, [], {})
+ xs = ir_module_module.read(cr, openerp.SUPERUSER_ID, ids, [], {})
+ finally:
+ cr.close()
+
+ if xs:
+ print "Modules (database `%s`):" % (args.database,)
+ for x in xs:
+ if args.short:
+ print '%3d %s' % (x['id'], x['name'])
+ else:
+ print '%3d %s %s' % (x['id'], x['name'], {'installed': '(installed)'}.get(x['state'], ''))
+ else:
+ print "No module found (database `%s`)." % (args.database,)
+
+def add_parser(subparsers):
+ parser = subparsers.add_parser('module',
+ description='Display modules known from a given database or on file-system.')
+ parser.add_argument('-d', '--database', metavar='DATABASE',
+ **common.required_or_default('DATABASE', 'the database to modify'))
+ common.add_addons_argument(parser)
+ parser.add_argument('-m', '--module', metavar='MODULE', required=False,
+ help='the module for which information should be shown')
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help='display more information')
+ parser.add_argument('--short', action='store_true',
+ help='display less information')
+ parser.add_argument('-f', '--filesystem', action='store_true',
+ help='display module in the addons path, not in db')
+
+ parser.set_defaults(run=run)