summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@yahoo.com>2010-09-29 01:58:14 +0000
committerTarmac <>2010-09-29 01:58:14 +0000
commit767db3693d5552d6bb986e69b200ab840a5139ae (patch)
tree39390d3c9cd584a7375a2e9f707c2099fdd1c11d
parent27220e66e20e30304bae8491ebe90fcc968c43ca (diff)
parentb68b73d08155483d19f4088baa6a4ffe73ef5f1d (diff)
Adds bpython support to nova-manage shell, because it is super sexy.
-rwxr-xr-xbin/nova-manage56
-rw-r--r--nova/tests/rpc_unittest.py11
2 files changed, 58 insertions, 9 deletions
diff --git a/bin/nova-manage b/bin/nova-manage
index a5087bfec..fa6a49f36 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -135,15 +135,48 @@ class VpnCommands(object):
class ShellCommands(object):
- def run(self):
- "Runs a Python interactive interpreter. Tries to use IPython, if it's available."
- try:
- import IPython
- # Explicitly pass an empty list as arguments, because otherwise IPython
- # would use sys.argv from this script.
- shell = IPython.Shell.IPShell(argv=[])
- shell.mainloop()
- except ImportError:
+ def bpython(self):
+ """Runs a bpython shell.
+
+ Falls back to Ipython/python shell if unavailable"""
+ self.run('bpython')
+
+ def ipython(self):
+ """Runs an Ipython shell.
+
+ Falls back to Python shell if unavailable"""
+ self.run('ipython')
+
+ def python(self):
+ """Runs a python shell.
+
+ Falls back to Python shell if unavailable"""
+ self.run('python')
+
+ def run(self, shell=None):
+ """Runs a Python interactive interpreter.
+
+ args: [shell=bpython]"""
+ if not shell:
+ shell = 'bpython'
+
+ if shell == 'bpython':
+ try:
+ import bpython
+ bpython.embed()
+ except ImportError:
+ shell = 'ipython'
+ if shell == 'ipython':
+ try:
+ import IPython
+ # Explicitly pass an empty list as arguments, because otherwise IPython
+ # would use sys.argv from this script.
+ shell = IPython.Shell.IPShell(argv=[])
+ shell.mainloop()
+ except ImportError:
+ shell = 'python'
+
+ if shell == 'python':
import code
try: # Try activating rlcompleter, because it's handy.
import readline
@@ -156,6 +189,11 @@ class ShellCommands(object):
readline.parse_and_bind("tab:complete")
code.interact()
+ def script(self, path):
+ """Runs the script from the specifed path with flags set properly.
+ arguments: path"""
+ exec(compile(open(path).read(), path, 'exec'), locals(), globals())
+
class RoleCommands(object):
"""Class for managing roles."""
diff --git a/nova/tests/rpc_unittest.py b/nova/tests/rpc_unittest.py
index e12a28fbc..f4d7b4b28 100644
--- a/nova/tests/rpc_unittest.py
+++ b/nova/tests/rpc_unittest.py
@@ -67,6 +67,17 @@ class RpcTestCase(test.BaseTestCase):
except rpc.RemoteError as exc:
self.assertEqual(int(exc.value), value)
+ def test_pass_object(self):
+ """Test that we can pass objects through rpc"""
+ class x():
+ pass
+ obj = x()
+ x.foo = 'bar'
+ x.baz = 100
+
+ result = yield rpc.call('test', {"method": "echo",
+ "args": {"value": obj}})
+ print result
class TestReceiver(object):
"""Simple Proxy class so the consumer has methods to call