ldb/python: Implement __len__ for MessageElement.
authorJelmer Vernooij <jelmer@samba.org>
Fri, 11 Jan 2008 00:02:58 +0000 (01:02 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 11 Jan 2008 00:04:25 +0000 (01:04 +0100)
source/lib/ldb/ldb.i
source/lib/ldb/ldb.py
source/lib/ldb/ldb_wrap.c
source/lib/ldb/tests/python/api.py

index 0ad628fdf5b3671fbef78ac9e68f4e53eb2b0f00..57fa36584ec0ad6c7f9112eba6ff97694da18048 100644 (file)
@@ -278,6 +278,11 @@ 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)
index 51a4a0fadbe1d4881dcaafd1ebdc9668e04abd72..2d037f080c007a5b8545e692df198dee751cfe03 100644 (file)
@@ -110,6 +110,7 @@ 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
index 6e809b6504b0a3fba6a91e0449acf2a994e8177f..10ea4f4a2456f69f30474bc1bc753f0f656adf07 100644 (file)
@@ -2889,6 +2889,9 @@ 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;
@@ -3679,6 +3682,29 @@ 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 ;
@@ -5296,6 +5322,7 @@ 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},
index 0a5ba035ffac0ec308b912e050b58654fdde7021..5ab40106a8da377439fce5b7befe046ba0c6d212 100755 (executable)
@@ -388,6 +388,10 @@ class MessageElementTests(unittest.TestCase):
         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"