The branch, v4-0-test has been updated
via a8f90ed34ce9341080b63c801ef54b82de42b8e6 (commit)
via e6498a0780dd31dfc623a69432004b606aeaccbe (commit)
from 588531bf211f5ede2731df56fd540934b673a2d7 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test
- Log -----------------------------------------------------------------
commit a8f90ed34ce9341080b63c801ef54b82de42b8e6
Author: Jelmer Vernooij <[EMAIL PROTECTED]>
Date: Fri Jan 11 01:02:58 2008 +0100
ldb/python: Implement __len__ for MessageElement.
commit e6498a0780dd31dfc623a69432004b606aeaccbe
Author: Jelmer Vernooij <[EMAIL PROTECTED]>
Date: Fri Jan 11 00:23:33 2008 +0100
python/ldb: Add __getitem__ implementation for LdbMessageElement.
-----------------------------------------------------------------------
Summary of changes:
source/lib/ldb/ldb.i | 22 +++++++++++
source/lib/ldb/ldb.py | 8 ++++
source/lib/ldb/ldb_wrap.c | 70 ++++++++++++++++++++++++++++++++++++
source/lib/ldb/tests/python/api.py | 10 +++++
4 files changed, 110 insertions(+), 0 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/lib/ldb/ldb.i b/source/lib/ldb/ldb.i
index 57cb6b5..57fa365 100644
--- a/source/lib/ldb/ldb.i
+++ b/source/lib/ldb/ldb.i
@@ -278,11 +278,33 @@ typedef struct ldb_message_element {
{
return ldb_msg_element_from_pyobject(NULL, set_obj, flags, name);
}
+
+ int __len__()
+ {
+ return $self->num_values;
+ }
#endif
+
+ PyObject *get(int i)
+ {
+ if (i < 0 || i >= $self->num_values)
+ return Py_None;
+
+ return PyString_FromStringAndSize(
+ (const char *)$self->values[i].data,
+ $self->values[i].length);
+ }
+
~ldb_msg_element() { talloc_free($self); }
int compare(ldb_msg_element *);
}
%pythoncode {
+ def __getitem__(self, i):
+ ret = self.get(i)
+ if ret is None:
+ raise KeyError("no such value")
+ return ret
+
def __eq__(self, other):
if (isinstance(other, str) and
len(set(self)) == 1 and
diff --git a/source/lib/ldb/ldb.py b/source/lib/ldb/ldb.py
index ebf8f60..2d037f0 100644
--- a/source/lib/ldb/ldb.py
+++ b/source/lib/ldb/ldb.py
@@ -94,6 +94,12 @@ class ldb_msg_element(object):
def __init__(self): raise AttributeError, "No constructor defined"
__repr__ = _swig_repr
__swig_destroy__ = _ldb.delete_ldb_msg_element
+ def __getitem__(self, i):
+ ret = self.get(i)
+ if ret is None:
+ raise KeyError("no such value")
+ return ret
+
def __eq__(self, other):
if (isinstance(other, str) and
len(set(self)) == 1 and
@@ -104,6 +110,8 @@ class ldb_msg_element(object):
ldb_msg_element.__iter__ =
new_instancemethod(_ldb.ldb_msg_element___iter__,None,ldb_msg_element)
ldb_msg_element.__set__ =
new_instancemethod(_ldb.ldb_msg_element___set__,None,ldb_msg_element)
+ldb_msg_element.__len__ =
new_instancemethod(_ldb.ldb_msg_element___len__,None,ldb_msg_element)
+ldb_msg_element.get =
new_instancemethod(_ldb.ldb_msg_element_get,None,ldb_msg_element)
ldb_msg_element.__cmp__ =
new_instancemethod(_ldb.ldb_msg_element___cmp__,None,ldb_msg_element)
ldb_msg_element_swigregister = _ldb.ldb_msg_element_swigregister
ldb_msg_element_swigregister(ldb_msg_element)
diff --git a/source/lib/ldb/ldb_wrap.c b/source/lib/ldb/ldb_wrap.c
index 7368d7f..10ea4f4 100644
--- a/source/lib/ldb/ldb_wrap.c
+++ b/source/lib/ldb/ldb_wrap.c
@@ -2889,6 +2889,17 @@ SWIG_AsVal_int (PyObject * obj, int *val)
SWIGINTERN ldb_msg_element *new_ldb_msg_element(PyObject *set_obj,int
flags,char const *name){
return ldb_msg_element_from_pyobject(NULL, set_obj, flags, name);
}
+SWIGINTERN int ldb_msg_element___len__(ldb_msg_element *self){
+ return self->num_values;
+ }
+SWIGINTERN PyObject *ldb_msg_element_get(ldb_msg_element *self,int i){
+ if (i < 0 || i >= self->num_values)
+ return Py_None;
+
+ return PyString_FromStringAndSize(
+ (const char *)self->values[i].data,
+ self->values[i].length);
+ }
SWIGINTERN void delete_ldb_msg_element(ldb_msg_element *self){
talloc_free(self); }
PyObject *ldb_msg_list_elements(ldb_msg *msg)
@@ -3671,6 +3682,63 @@ fail:
}
+SWIGINTERN PyObject *_wrap_ldb_msg_element___len__(PyObject
*SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ ldb_msg_element *arg1 = (ldb_msg_element *) 0 ;
+ int result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject *swig_obj[1] ;
+
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message_element, 0
| 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '"
"ldb_msg_element___len__" "', argument " "1"" of type '" "ldb_msg_element
*""'");
+ }
+ arg1 = (ldb_msg_element *)(argp1);
+ result = (int)ldb_msg_element___len__(arg1);
+ resultobj = SWIG_From_int((int)(result));
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_ldb_msg_element_get(PyObject *SWIGUNUSEDPARM(self),
PyObject *args, PyObject *kwargs) {
+ PyObject *resultobj = 0;
+ ldb_msg_element *arg1 = (ldb_msg_element *) 0 ;
+ int arg2 ;
+ PyObject *result = 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int val2 ;
+ int ecode2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ char * kwnames[] = {
+ (char *) "self",(char *) "i", NULL
+ };
+
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char
*)"OO:ldb_msg_element_get",kwnames,&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message_element, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '"
"ldb_msg_element_get" "', argument " "1"" of type '" "ldb_msg_element *""'");
+ }
+ arg1 = (ldb_msg_element *)(argp1);
+ ecode2 = SWIG_AsVal_int(obj1, &val2);
+ if (!SWIG_IsOK(ecode2)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '"
"ldb_msg_element_get" "', argument " "2"" of type '" "int""'");
+ }
+ arg2 = (int)(val2);
+ result = (PyObject *)ldb_msg_element_get(arg1,arg2);
+ resultobj = result;
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_delete_ldb_msg_element(PyObject
*SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb_msg_element *arg1 = (ldb_msg_element *) 0 ;
@@ -5254,6 +5322,8 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"ldb_msg_element___iter__",
(PyCFunction)_wrap_ldb_msg_element___iter__, METH_O, NULL},
{ (char *)"ldb_msg_element___set__",
(PyCFunction)_wrap_ldb_msg_element___set__, METH_O, NULL},
{ (char *)"new_MessageElement", (PyCFunction)
_wrap_new_MessageElement, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"ldb_msg_element___len__",
(PyCFunction)_wrap_ldb_msg_element___len__, METH_O, NULL},
+ { (char *)"ldb_msg_element_get", (PyCFunction)
_wrap_ldb_msg_element_get, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"delete_ldb_msg_element",
(PyCFunction)_wrap_delete_ldb_msg_element, METH_O, NULL},
{ (char *)"ldb_msg_element___cmp__", (PyCFunction)
_wrap_ldb_msg_element___cmp__, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"ldb_msg_element_swigregister",
ldb_msg_element_swigregister, METH_VARARGS, NULL},
diff --git a/source/lib/ldb/tests/python/api.py
b/source/lib/ldb/tests/python/api.py
index d9dfce8..5ab4010 100755
--- a/source/lib/ldb/tests/python/api.py
+++ b/source/lib/ldb/tests/python/api.py
@@ -382,6 +382,16 @@ class MessageElementTests(unittest.TestCase):
x = ldb.MessageElement(["foo"])
self.assertEquals(["foo"], list(x))
+ def test_get_item(self):
+ x = ldb.MessageElement(["foo", "bar"])
+ self.assertEquals("foo", x[0])
+ self.assertEquals("bar", x[1])
+ self.assertRaises(KeyError, lambda: x[-1])
+
+ def test_len(self):
+ x = ldb.MessageElement(["foo", "bar"])
+ self.assertEquals(2, len(x))
+
class ExampleModule:
name = "example"
--
Samba Shared Repository