1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-24 02:04:21 +03:00

python: Provide way to iterate over available shares.

This commit is contained in:
Jelmer Vernooij 2009-06-16 02:24:43 +02:00
parent f7ada51c29
commit 308de544f4
3 changed files with 53 additions and 2 deletions

View File

@ -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))

View File

@ -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 }
};

View File

@ -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):