Browse Source

Programs: amqp command no longer messes up argv

Ask Solem 11 years ago
parent
commit
233aae2f8e
2 changed files with 10 additions and 8 deletions
  1. 9 7
      celery/bin/amqp.py
  2. 1 1
      celery/tests/bin/test_amqp.py

+ 9 - 7
celery/bin/amqp.py

@@ -246,32 +246,34 @@ class AMQShell(cmd.Cmd):
         return [cmd for cmd in names
                 if cmd.partition('.')[2].startswith(text)]
 
-    def dispatch(self, cmd, argline):
+    def dispatch(self, cmd, arglist):
         """Dispatch and execute the command.
 
         Lookup order is: :attr:`builtins` -> :attr:`amqp`.
 
         """
-        arglist = shlex.split(safe_str(argline))
+        if isinstance(arglist, string_t):
+            arglist = shlex.split(safe_str(arglist))
         if cmd in self.builtins:
             return getattr(self, self.builtins[cmd])(*arglist)
         fun, args, formatter = self.get_amqp_api_command(cmd, arglist)
         return formatter(fun(*args))
 
-    def parseline(self, line):
+    def parseline(self, parts):
         """Parse input line.
 
         :returns: tuple of three items:
             `(command_name, arglist, original_line)`
 
         """
-        parts = line.split()
         if parts:
-            return parts[0], ' '.join(parts[1:]), line
-        return '', '', line
+            return parts[0], parts[1:], ' '.join(parts)
+        return '', '', ''
 
     def onecmd(self, line):
         """Parse line and execute command."""
+        if isinstance(line, string_t):
+            line = shlex.split(safe_str(line))
         cmd, arg, line = self.parseline(line)
         if not line:
             return self.emptyline()
@@ -326,7 +328,7 @@ class AMQPAdmin(object):
     def run(self):
         shell = self.Shell(connect=self.connect, out=self.out)
         if self.args:
-            return shell.onecmd(' '.join(self.args))
+            return shell.onecmd(self.args)
         try:
             return shell.cmdloop()
         except KeyboardInterrupt:

+ 1 - 1
celery/tests/bin/test_amqp.py

@@ -124,7 +124,7 @@ class test_AMQShell(AppCase):
         self.assertNotIn('FOO', self.fh.getvalue())
 
     def test_run(self):
-        a = self.create_adm('queue.declare foo')
+        a = self.create_adm('queue.declare',  'foo')
         a.run()
         self.assertIn('ok', self.fh.getvalue())