From f446de846897f0a4f0a3bd1e7727e8112b675da1 Mon Sep 17 00:00:00 2001 From: Garming Sam Date: Fri, 15 Jul 2016 14:29:02 +1200 Subject: [PATCH] samba-tool: Speed up all samba-tool commands This in particular helps the docs.py test halve in time (at least on my machine) Signed-off-by: Garming Sam --- python/samba/netcmd/__init__.py | 5 ++++ python/samba/netcmd/main.py | 58 +++++++++++++++-------------------------- 2 files changed, 26 insertions(+), 37 deletions(-) diff --git a/python/samba/netcmd/__init__.py b/python/samba/netcmd/__init__.py index 1debae8..8f53f2b 100644 --- a/python/samba/netcmd/__init__.py +++ b/python/samba/netcmd/__init__.py @@ -197,8 +197,12 @@ class SuperCommand(Command): subcommands = {} + def _load_subcommand(self, subcommand): + pass + def _run(self, myname, subcommand=None, *args): if subcommand in self.subcommands: + self._load_subcommand(subcommand) return self.subcommands[subcommand]._run( "%s %s" % (myname, subcommand), *args) @@ -207,6 +211,7 @@ class SuperCommand(Command): subcmds.sort() max_length = max([len(c) for c in subcmds]) for cmd_name in subcmds: + self._load_subcommand(subcommand) cmd = self.subcommands[cmd_name] if not cmd.hidden: epilog += " %*s - %s\n" % ( diff --git a/python/samba/netcmd/main.py b/python/samba/netcmd/main.py index 498702c..1dffa6c 100644 --- a/python/samba/netcmd/main.py +++ b/python/samba/netcmd/main.py @@ -20,25 +20,6 @@ from samba import getopt as options from samba.netcmd import SuperCommand -from samba.netcmd.dbcheck import cmd_dbcheck -from samba.netcmd.delegation import cmd_delegation -from samba.netcmd.dns import cmd_dns -from samba.netcmd.domain import cmd_domain -from samba.netcmd.drs import cmd_drs -from samba.netcmd.dsacl import cmd_dsacl -from samba.netcmd.fsmo import cmd_fsmo -from samba.netcmd.gpo import cmd_gpo -from samba.netcmd.group import cmd_group -from samba.netcmd.ldapcmp import cmd_ldapcmp -from samba.netcmd.ntacl import cmd_ntacl -from samba.netcmd.rodc import cmd_rodc -from samba.netcmd.sites import cmd_sites -from samba.netcmd.spn import cmd_spn -from samba.netcmd.testparm import cmd_testparm -from samba.netcmd.nettime import cmd_time -from samba.netcmd.user import cmd_user -from samba.netcmd.processes import cmd_processes - class cmd_sambatool(SuperCommand): """Main samba administration tool.""" @@ -48,21 +29,24 @@ class cmd_sambatool(SuperCommand): } subcommands = {} - subcommands["dbcheck"] = cmd_dbcheck() - subcommands["delegation"] = cmd_delegation() - subcommands["dns"] = cmd_dns() - subcommands["domain"] = cmd_domain() - subcommands["drs"] = cmd_drs() - subcommands["dsacl"] = cmd_dsacl() - subcommands["fsmo"] = cmd_fsmo() - subcommands["gpo"] = cmd_gpo() - subcommands["group"] = cmd_group() - subcommands["ldapcmp"] = cmd_ldapcmp() - subcommands["ntacl"] = cmd_ntacl() - subcommands["rodc"] = cmd_rodc() - subcommands["sites"] = cmd_sites() - subcommands["spn"] = cmd_spn() - subcommands["testparm"] = cmd_testparm() - subcommands["time"] = cmd_time() - subcommands["user"] = cmd_user() - subcommands["processes"] = cmd_processes() + subcommands["dbcheck"] = None + subcommands["delegation"] = None + subcommands["dns"] = None + subcommands["domain"] = None + subcommands["drs"] = None + subcommands["dsacl"] = None + subcommands["fsmo"] = None + subcommands["gpo"] = None + subcommands["group"] = None + subcommands["ldapcmp"] = None + subcommands["ntacl"] = None + subcommands["rodc"] = None + subcommands["sites"] = None + subcommands["spn"] = None + subcommands["testparm"] = None + subcommands["time"] = None + subcommands["user"] = None + subcommands["processes"] = None + + def _load_subcommand(self, subcommand): + self.subcommands[subcommand] = getattr(__import__('samba.netcmd.%s' % subcommand, fromlist=['cmd_%s' % subcommand]), 'cmd_%s' % subcommand)() -- 1.9.1