odoo/openerpcommand/model.py

62 lines
2.1 KiB
Python

"""
Display information about a given model.
"""
import os
import sys
import textwrap
def run(args):
assert args.database
assert args.model
import openerp
openerp.tools.config['log_level'] = 100
openerp.netsvc.init_logger()
registry = openerp.modules.registry.RegistryManager.get(
args.database, update_module=False)
model = registry[args.model]
longest_k = 1
longest_string = 1
columns = model._columns
if args.field and args.field not in columns:
print "No such field."
sys.exit(1)
if args.field:
columns = { args.field: columns[args.field] }
else:
print "Fields (model `%s`, database `%s`):" % (args.model, args.database)
for k, v in columns.items():
longest_k = len(k) if longest_k < len(k) else longest_k
longest_string = len(v.string) \
if longest_string < len(v.string) else longest_string
for k, v in sorted(columns.items()):
attr = []
if v.required:
attr.append("Required")
if v.readonly:
attr.append("Read-only")
attr = '/'.join(attr)
attr = '(' + attr + ')' if attr else attr
if args.verbose:
print v.string, '-- ' + k + ', ' + v._type, attr
else:
print k.ljust(longest_k + 2), v._type, attr
if args.verbose and v.help:
print textwrap.fill(v.help, initial_indent=' ', subsequent_indent=' ')
def add_parser(subparsers):
parser = subparsers.add_parser('model',
description='Display information about a given model for an existing database.')
parser.add_argument('-d', '--database', metavar='DATABASE', required=True,
help='the database to connect to')
parser.add_argument('-m', '--model', metavar='MODEL', required=True,
help='the model for which information should be displayed')
parser.add_argument('-v', '--verbose', action='store_true',
help='display more information')
parser.add_argument('-f', '--field', metavar='FIELD',
help='display information only for this particular field')
parser.set_defaults(run=run)