summaryrefslogtreecommitdiff
path: root/odoo/cli/shell.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/cli/shell.py')
-rw-r--r--odoo/cli/shell.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/odoo/cli/shell.py b/odoo/cli/shell.py
new file mode 100644
index 00000000000..0d1ed59813e
--- /dev/null
+++ b/odoo/cli/shell.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import code
+import os
+import signal
+import sys
+
+import openerp
+from . import Command
+
+def raise_keyboard_interrupt(*a):
+ raise KeyboardInterrupt()
+
+class Console(code.InteractiveConsole):
+ def __init__(self, locals=None, filename="<console>"):
+ code.InteractiveConsole.__init__(self, locals, filename)
+ try:
+ import readline
+ import rlcompleter
+ except ImportError:
+ print 'readline or rlcompleter not available, autocomplete disabled.'
+ else:
+ readline.set_completer(rlcompleter.Completer(locals).complete)
+ readline.parse_and_bind("tab: complete")
+
+class Shell(Command):
+ """Start odoo in an interactive shell"""
+ def init(self, args):
+ openerp.tools.config.parse_config(args)
+ openerp.cli.server.report_configuration()
+ openerp.service.server.start(preload=[], stop=True)
+ signal.signal(signal.SIGINT, raise_keyboard_interrupt)
+
+ def console(self, local_vars):
+ if not os.isatty(sys.stdin.fileno()):
+ exec sys.stdin in local_vars
+ else:
+ if 'env' not in local_vars:
+ print 'No environment set, use `odoo.py shell -d dbname` to get one.'
+ for i in sorted(local_vars):
+ print '%s: %s' % (i, local_vars[i])
+ Console(locals=local_vars).interact()
+
+ def shell(self, dbname):
+ local_vars = {
+ 'openerp': openerp
+ }
+ with openerp.api.Environment.manage():
+ if dbname:
+ registry = openerp.registry(dbname)
+ with registry.cursor() as cr:
+ uid = openerp.SUPERUSER_ID
+ ctx = openerp.api.Environment(cr, uid, {})['res.users'].context_get()
+ env = openerp.api.Environment(cr, uid, ctx)
+ local_vars['env'] = env
+ local_vars['self'] = env.user
+ self.console(local_vars)
+ else:
+ self.console(local_vars)
+
+ def run(self, args):
+ self.init(args)
+ self.shell(openerp.tools.config['db_name'])
+ return 0