net: Support 'super' commands implemented in Python.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 30 Dec 2009 20:06:21 +0000 (21:06 +0100)
committerAndrew Tridgell <tridge@samba.org>
Thu, 31 Dec 2009 06:33:28 +0000 (17:33 +1100)
Signed-off-by: Andrew Tridgell <tridge@samba.org>
source4/scripting/python/samba/netcmd/__init__.py

index 9798f3529b0b96e2444447a823d8dbd18308464a..a204ab897b880889d275d3f5d5850bf9da5095de 100644 (file)
@@ -40,7 +40,7 @@ class Command(object):
 
     name = property(_get_name)
 
-    def usage(self, args):
+    def usage(self, *args):
         parser, _ = self._create_parser()
         parser.print_usage()
 
@@ -49,7 +49,7 @@ class Command(object):
     def _get_synopsis(self):
         ret = self.name
         if self.takes_args:
-            ret += " " + " ".join(self.takes_args)
+            ret += " " + " ".join([x.upper() for x in self.takes_args])
         return ret
 
     synopsis = property(_get_synopsis)
@@ -90,7 +90,7 @@ class Command(object):
             if arg[-1] == "*":
                 max_args = -1
         if len(args) < min_args or (max_args != -1 and len(args) > max_args):
-            self.usage(args)
+            self.usage(*args)
             return -1
         try:
             return self.run(*args, **kwargs)
@@ -108,21 +108,22 @@ class SuperCommand(Command):
 
     subcommands = {}
 
-    def run(self, subcommand, *args, **kwargs):
-        if not subcommand in subcommands:
-            print >>sys.stderr, "ERROR: No such subcommand '%s'" % subcommand
-            return subcommands[subcommand].run(*args, **kwargs)
-
-    def usage(self, subcommand=None, *args, **kwargs):
+    def _run(self, myname, subcommand=None, *args):
         if subcommand is None:
-            print "Available subcommands"
-            for subcommand in subcommands:
+            print "Available subcommands:"
+            for subcommand in self.subcommands:
                 print "\t%s" % subcommand
             return 0
+        if not subcommand in self.subcommands:
+            raise CommandError("No such subcommand '%s'" % subcommand)
+        return self.subcommands[subcommand]._run(subcommand, *args)
+
+    def usage(self, myname, subcommand=None, *args):
+        if subcommand is None or not subcommand in self.subcommands:
+            print "Usage: %s (%s) [options]" % (myname,
+                " | ".join(self.subcommands.keys()))
         else:
-            if not subcommand in subcommands:
-                print >>sys.stderr, "ERROR: No such subcommand '%s'" % subcommand
-            return subcommands[subcommand].usage(*args, **kwargs)
+            return self.subcommands[subcommand].usage(*args)
 
 
 class CommandError(Exception):