From ca495e67b2c2c8b50e16c5bcfcafdc5c2ae5bc72 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 28 Nov 2010 13:39:12 +0100 Subject: samba.hostconfig: Move samba.shares into samba.hostconfig. --- source4/scripting/python/samba/hostconfig.py | 64 ++++++++++++++++--- source4/scripting/python/samba/shares.py | 61 ------------------- source4/scripting/python/samba/tests/hostconfig.py | 71 ++++++++++++++++++++++ source4/scripting/python/samba/tests/shares.py | 71 ---------------------- source4/selftest/tests.py | 2 +- 5 files changed, 129 insertions(+), 140 deletions(-) delete mode 100644 source4/scripting/python/samba/shares.py create mode 100644 source4/scripting/python/samba/tests/hostconfig.py delete mode 100644 source4/scripting/python/samba/tests/shares.py diff --git a/source4/scripting/python/samba/hostconfig.py b/source4/scripting/python/samba/hostconfig.py index 6eee6cf2b2..3e6dc6b1dd 100644 --- a/source4/scripting/python/samba/hostconfig.py +++ b/source4/scripting/python/samba/hostconfig.py @@ -2,32 +2,82 @@ # Unix SMB/CIFS implementation. # Copyright (C) Jelmer Vernooij 2008 -# +# # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +"""Local host configuration.""" + from samdb import SamDB class Hostconfig(object): - """Aggregate object that contains all information about the configuration + """Aggregate object that contains all information about the configuration of a Samba host.""" - def __init__(self, lp): + def __init__(self, lp): self.lp = lp + def get_shares(self): + return SharesContainer(self.lp) + def get_samdb(self, session_info, credentials): - return SamDB(url=self.lp.get("sam database"), - session_info=session_info, credentials=credentials, + """Access the SamDB host. + + :param session_info: Session info to use + :param credentials: Credentials to access the SamDB with + """ + return SamDB(url=self.lp.get("sam database"), + session_info=session_info, credentials=credentials, lp=self.lp) + +# TODO: Rather than accessing Loadparm directly here, we should really +# have bindings to the param/shares.c and use those. + + +class SharesContainer(object): + """A shares container.""" + + def __init__(self, lp): + self._lp = lp + + def __getitem__(self, name): + if name == "global": + # [global] is not a share + raise KeyError + return Share(self._lp[name]) + + def __len__(self): + if "global" in self._lp.services(): + return len(self._lp)-1 + return len(self._lp) + + def keys(self): + return [name for name in self._lp.services() if name != "global"] + + def __iter__(self): + return iter(self.keys()) + + +class Share(object): + """A file share.""" + + def __init__(self, service): + self._service = service + + def __getitem__(self, name): + return self._service[name] + + def __setitem__(self, name, value): + self._service[name] = value diff --git a/source4/scripting/python/samba/shares.py b/source4/scripting/python/samba/shares.py deleted file mode 100644 index 17780cfd20..0000000000 --- a/source4/scripting/python/samba/shares.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python - -# Unix SMB/CIFS implementation. -# Copyright (C) Jelmer Vernooij 2009 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -"""Share management.""" - - -# TODO: Rather than accessing Loadparm directly here, we should really -# have bindings to the param/shares.c and use those. - - -class SharesContainer(object): - """A shares container.""" - - def __init__(self, lp): - self._lp = lp - - def __getitem__(self, name): - if name == "global": - # [global] is not a share - raise KeyError - return Share(self._lp[name]) - - def __len__(self): - if "global" in self._lp.services(): - return len(self._lp)-1 - return len(self._lp) - - def keys(self): - return [name for name in self._lp.services() if name != "global"] - - def __iter__(self): - return iter(self.keys()) - - -class Share(object): - """A file share.""" - - def __init__(self, service): - self._service = service - - def __getitem__(self, name): - return self._service[name] - - def __setitem__(self, name, value): - self._service[name] = value diff --git a/source4/scripting/python/samba/tests/hostconfig.py b/source4/scripting/python/samba/tests/hostconfig.py new file mode 100644 index 0000000000..c01e63c798 --- /dev/null +++ b/source4/scripting/python/samba/tests/hostconfig.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +# Unix SMB/CIFS implementation. Tests for shares +# Copyright (C) Jelmer Vernooij 2009 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +from samba.shares import SharesContainer +from samba.tests import TestCase + + +class MockService(object): + + def __init__(self, data): + self.data = data + + def __getitem__(self, name): + return self.data[name] + + +class MockLoadParm(object): + + def __init__(self, data): + self.data = data + + def __getitem__(self, name): + return MockService(self.data[name]) + + def __len__(self): + return len(self.data) + + def services(self): + return self.data.keys() + + +class ShareTests(TestCase): + + def _get_shares(self, conf): + return SharesContainer(MockLoadParm(conf)) + + def test_len_no_global(self): + shares = self._get_shares({}) + self.assertEquals(0, len(shares)) + + def test_iter(self): + self.assertEquals([], list(self._get_shares({}))) + self.assertEquals([], list(self._get_shares({"global":{}}))) + self.assertEquals(["bla"], list(self._get_shares({"global":{}, "bla":{}}))) + + def test_len(self): + shares = self._get_shares({"global": {}}) + self.assertEquals(0, len(shares)) + + def test_getitem_nonexistant(self): + shares = self._get_shares({"global": {}}) + self.assertRaises(KeyError, shares.__getitem__, "bla") + + def test_getitem_global(self): + shares = self._get_shares({"global": {}}) + self.assertRaises(KeyError, shares.__getitem__, "global") diff --git a/source4/scripting/python/samba/tests/shares.py b/source4/scripting/python/samba/tests/shares.py deleted file mode 100644 index c01e63c798..0000000000 --- a/source4/scripting/python/samba/tests/shares.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python - -# Unix SMB/CIFS implementation. Tests for shares -# Copyright (C) Jelmer Vernooij 2009 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -from samba.shares import SharesContainer -from samba.tests import TestCase - - -class MockService(object): - - def __init__(self, data): - self.data = data - - def __getitem__(self, name): - return self.data[name] - - -class MockLoadParm(object): - - def __init__(self, data): - self.data = data - - def __getitem__(self, name): - return MockService(self.data[name]) - - def __len__(self): - return len(self.data) - - def services(self): - return self.data.keys() - - -class ShareTests(TestCase): - - def _get_shares(self, conf): - return SharesContainer(MockLoadParm(conf)) - - def test_len_no_global(self): - shares = self._get_shares({}) - self.assertEquals(0, len(shares)) - - def test_iter(self): - self.assertEquals([], list(self._get_shares({}))) - self.assertEquals([], list(self._get_shares({"global":{}}))) - self.assertEquals(["bla"], list(self._get_shares({"global":{}, "bla":{}}))) - - def test_len(self): - shares = self._get_shares({"global": {}}) - self.assertEquals(0, len(shares)) - - def test_getitem_nonexistant(self): - shares = self._get_shares({"global": {}}) - self.assertRaises(KeyError, shares.__getitem__, "bla") - - def test_getitem_global(self): - shares = self._get_shares({"global": {}}) - self.assertRaises(KeyError, shares.__getitem__, "global") diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 180f089642..bf63c97655 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -477,7 +477,7 @@ planpythontestsuite("dc:local", "samba.tests.dcerpc.bare") planpythontestsuite("dc:local", "samba.tests.dcerpc.unix") planpythontestsuite("none", "samba.tests.dcerpc.rpc_talloc") planpythontestsuite("none", "samba.tests.samdb") -planpythontestsuite("none", "samba.tests.shares") +planpythontestsuite("none", "samba.tests.hostconfig") planpythontestsuite("none", "samba.tests.messaging") planpythontestsuite("none", "samba.tests.samba3sam") planpythontestsuite("none", "subunit") -- cgit