summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/bin/python/samba/tests/shares.py34
-rw-r--r--source4/param/pyparam.c16
-rw-r--r--source4/scripting/python/samba/shares.py5
3 files changed, 53 insertions, 2 deletions
diff --git a/source4/bin/python/samba/tests/shares.py b/source4/bin/python/samba/tests/shares.py
index 0a771b1754..9130c36780 100644
--- a/source4/bin/python/samba/tests/shares.py
+++ b/source4/bin/python/samba/tests/shares.py
@@ -20,15 +20,47 @@ from samba.shares import SharesContainer
from unittest 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 __contains__(self, name):
+ return name in self.data
+
+ def __len__(self):
+ return len(self.data)
+
+ def services(self):
+ return self.data.keys()
+
+
class ShareTests(TestCase):
def _get_shares(self, conf):
- return SharesContainer(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))
diff --git a/source4/param/pyparam.c b/source4/param/pyparam.c
index d8dabe3458..4f6e2fff49 100644
--- a/source4/param/pyparam.c
+++ b/source4/param/pyparam.c
@@ -232,6 +232,20 @@ static PyObject *py_lp_ctx_private_path(py_talloc_Object *self, PyObject *args)
return ret;
}
+static PyObject *py_lp_ctx_services(py_talloc_Object *self)
+{
+ struct loadparm_context *lp_ctx = PyLoadparmContext_AsLoadparmContext(self);
+ const char **names;
+ PyObject *ret;
+ int i;
+ names = lp_server_services(lp_ctx);
+ ret = PyList_New(str_list_length(names));
+ for (i = 0; names[i]; i++) {
+ PyList_SetItem(ret, i, PyString_FromString(names[i]));
+ }
+ return ret;
+}
+
static PyMethodDef py_lp_ctx_methods[] = {
{ "load", (PyCFunction)py_lp_ctx_load, METH_VARARGS,
"S.load(filename) -> None\n"
@@ -253,6 +267,8 @@ static PyMethodDef py_lp_ctx_methods[] = {
"Change a parameter." },
{ "private_path", (PyCFunction)py_lp_ctx_private_path, METH_VARARGS,
"S.private_path(name) -> path\n" },
+ { "services", (PyCFunction)py_lp_ctx_services, METH_NOARGS,
+ "S.services() -> list" },
{ NULL }
};
diff --git a/source4/scripting/python/samba/shares.py b/source4/scripting/python/samba/shares.py
index 622c3b6486..89a312e855 100644
--- a/source4/scripting/python/samba/shares.py
+++ b/source4/scripting/python/samba/shares.py
@@ -41,8 +41,11 @@ class SharesContainer(object):
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 self.lp.services()
+ return iter(self.keys())
class Share(object):