samba-tool: implement computer management commands
[samba.git] / python / samba / netcmd / main.py
1 # Unix SMB/CIFS implementation.
2 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2011
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #
17
18 """The main samba-tool command implementation."""
19
20 from samba import getopt as options
21
22 from samba.netcmd import SuperCommand
23
24 class cache_loader(dict):
25     """
26     We only load subcommand tools if they are actually used.
27     This significantly reduces the amount of time spent starting up
28     samba-tool
29     """
30     def __getitem__(self, attr):
31         item = dict.__getitem__(self, attr)
32         if item is None:
33             package = 'nettime' if attr == 'time' else attr
34             self[attr] = getattr(__import__('samba.netcmd.%s' % package,
35                                             fromlist=['cmd_%s' % attr]),
36                                  'cmd_%s' % attr)()
37         return dict.__getitem__(self, attr)
38
39     def get(self, attr, default=None):
40         try:
41             return self[attr]
42         except KeyError:
43             return default
44
45     def iteritems(self):
46         for key in self:
47             yield (key, self[key])
48
49     def items(self):
50         return list(self.iteritems())
51
52 class cmd_sambatool(SuperCommand):
53     """Main samba administration tool."""
54
55     takes_optiongroups = {
56         "versionopts": options.VersionOptions,
57         }
58
59     subcommands = cache_loader()
60
61     subcommands["computer"] = None
62     subcommands["dbcheck"] = None
63     subcommands["delegation"] = None
64     subcommands["dns"] = None
65     subcommands["domain"] = None
66     subcommands["drs"] = None
67     subcommands["dsacl"] = None
68     subcommands["fsmo"] = None
69     subcommands["gpo"] = None
70     subcommands["group"] = None
71     subcommands["ldapcmp"] = None
72     subcommands["ntacl"] = None
73     subcommands["rodc"] = None
74     subcommands["sites"] = None
75     subcommands["spn"] = None
76     subcommands["testparm"] = None
77     subcommands["time"] = None
78     subcommands["user"] = None
79     subcommands["ou"] = None
80     subcommands["processes"] = None
81     subcommands["visualize"] = None