diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2009-12-28 13:53:18 +0100 |
---|---|---|
committer | Jelmer Vernooij <jelmer@ganieda.vernstok.nl> | 2009-12-29 16:26:19 +0100 |
commit | 9e603dfb95f61a7daf2acc80c9c3120ae9ecf98e (patch) | |
tree | ff5752e5a7e5ffb7704ee5a61a588e5ae6d410d7 /source4/scripting | |
parent | 9b1a21031187e83de61d999b70a6d1cda7b68444 (diff) | |
download | samba-9e603dfb95f61a7daf2acc80c9c3120ae9ecf98e.tar.gz samba-9e603dfb95f61a7daf2acc80c9c3120ae9ecf98e.tar.bz2 samba-9e603dfb95f61a7daf2acc80c9c3120ae9ecf98e.zip |
s4/net: Support parsing arguments in Python commands.
Diffstat (limited to 'source4/scripting')
-rw-r--r-- | source4/scripting/python/samba/netcmd/__init__.py | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/source4/scripting/python/samba/netcmd/__init__.py b/source4/scripting/python/samba/netcmd/__init__.py index f644febba6..16f19f8b24 100644 --- a/source4/scripting/python/samba/netcmd/__init__.py +++ b/source4/scripting/python/samba/netcmd/__init__.py @@ -17,21 +17,79 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # +import optparse +from samba import getopt as options, Ldb + + +class Option(optparse.Option): + pass + + class Command(object): """A net command.""" def _get_description(self): - return self.__doc__ + return self.__doc__.splitlines()[-1].rstrip("\n") + + def _get_name(self): + name = self.__class__.__name__ + if name.startswith("cmd_"): + return name[4:] + return name + + name = property(_get_name) def usage(self): - raise NotImplementedError + self.parser.print_usage() description = property(_get_description) + takes_args = [] + takes_options = [] + + def __init__(self): + synopsis = self.name + if self.takes_args: + synopsis += " " + " ".join(self.takes_args) + self.parser = optparse.OptionParser(synopsis) + self.parser.add_options(self.takes_options) + + def _run(self, *argv): + opts, args = self.parser.parse_args(list(argv)) + return self.run(*args, **opts.__dict__) + def run(self): """Run the command. This should be overriden by all subclasses.""" raise NotImplementedError(self.run) +class SuperCommand(Command): + """A command with subcommands.""" + + subcommands = {} + + def run(self, subcommand, *args, **kwargs): + if not subcommand in subcommands: + print >>sys.stderr, "No such subcommand '%s'" % subcommand + return subcommands[subcommand].run(*args, **kwargs) + + def usage(self, subcommand=None, *args, **kwargs): + if subcommand is None: + print "Available subcommands" + for subcommand in subcommands: + print "\t%s" % subcommand + return 0 + else: + if not subcommand in subcommands: + print >>sys.stderr, "No such subcommand '%s'" % subcommand + return subcommands[subcommand].usage(*args, **kwargs) + + +class FooCommand(Command): + + def run(self, bar): + print "LALALA" + bar + return 0 + commands = {} -commands["foo"] = Command() +commands["foo"] = FooCommand() |