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:
parent
f7ada51c29
commit
308de544f4
@ -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))
|
||||
|
@ -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 }
|
||||
};
|
||||
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user