diff options
| author | Vo Minh Thu <vmt@openerp.com> | 2013-01-11 14:46:57 +0100 |
|---|---|---|
| committer | Vo Minh Thu <vmt@openerp.com> | 2013-01-11 14:46:57 +0100 |
| commit | 3da57500c279cd19fa6d561eef149d708383138d (patch) | |
| tree | e6ea46397217349ff0381b91346a1ba02394e14b /openerpcommand/module.py | |
| parent | 3478333bca1a28483c1c7eb90431cb1e979c74ba (diff) | |
[ADD] oe: provides sane (unfucked) command-line interface.
The implementation is far from perfect. Some improvements are waiting in
its previous location: lp:~openerp/openerp-command.
Some docs are provided, see doc/openerp-command.rst and
doc/adding-command.rst.
bzr revid: vmt@openerp.com-20130111134657-im2f3uqjluyo4pm6
Diffstat (limited to 'openerpcommand/module.py')
| -rw-r--r-- | openerpcommand/module.py | 68 |
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) |
