pytdb: Make filename argument optional.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 19 Sep 2010 17:42:29 +0000 (10:42 -0700)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 7 Oct 2010 04:41:48 +0000 (15:11 +1030)
lib/tdb/pytdb.c
lib/tdb/python/tests/simple.py

index 2f0580f1d838ea361a3ec09524302e9e5b85baa6..f2638db492e86c403736571c0f9522eb9d02f8d1 100644 (file)
@@ -77,15 +77,19 @@ static PyObject *PyString_FromTDB_DATA(TDB_DATA data)
 
 static PyObject *py_tdb_open(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 {
-       char *name;
+       char *name = NULL;
        int hash_size = 0, tdb_flags = TDB_DEFAULT, flags = O_RDWR, mode = 0600;
        TDB_CONTEXT *ctx;
        PyTdbObject *ret;
        const char *kwnames[] = { "name", "hash_size", "tdb_flags", "flags", "mode", NULL };
 
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|iiii", (char **)kwnames, &name, &hash_size, &tdb_flags, &flags, &mode))
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|siiii", (char **)kwnames, &name, &hash_size, &tdb_flags, &flags, &mode))
                return NULL;
 
+       if (name == NULL) {
+               tdb_flags |= TDB_INTERNAL;
+       }
+
        ctx = tdb_open(name, hash_size, tdb_flags, flags, mode);
        if (ctx == NULL) {
                PyErr_SetFromErrno(PyExc_IOError);
@@ -448,9 +452,11 @@ static PyGetSetDef tdb_object_getsetters[] = {
 
 static PyObject *tdb_object_repr(PyTdbObject *self)
 {
-       return PyString_FromFormat("Tdb('%s')",
-               (tdb_get_flags(self->ctx) & TDB_INTERNAL) ? "<internal>"
-                                                         : tdb_name(self->ctx));
+       if (tdb_get_flags(self->ctx) & TDB_INTERNAL) {
+               return PyString_FromString("Tdb(<internal>)");
+       } else {
+               return PyString_FromFormat("Tdb('%s')", tdb_name(self->ctx));
+       }
 }
 
 static void tdb_object_dealloc(PyTdbObject *self)
index ea1ccd2d49a9834081302c3f22398ae317994a04..b7eb0b5e5a076db075c10f24b5643f82c62312fd 100644 (file)
@@ -16,6 +16,7 @@ class OpenTdbTests(TestCase):
         self.assertRaises(IOError, tdb.Tdb, "/some/nonexistant/file", 0, tdb.DEFAULT, os.O_RDWR)
 
 class CloseTdbTests(TestCase):
+
     def test_double_close(self):
         self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT, os.O_CREAT|os.O_RDWR)
         self.assertNotEqual(None, self.tdb)
@@ -26,11 +27,12 @@ class CloseTdbTests(TestCase):
 
 
 class InternalTdbTests(TestCase):
+
     def test_repr(self):
-        self.tdb = tdb.Tdb("whatever", tdb_flags=tdb.INTERNAL)
+        self.tdb = tdb.Tdb()
 
         # repr used to crash on internal db
-        self.assertEquals(repr(self.tdb), "Tdb('<internal>')")
+        self.assertEquals(repr(self.tdb), "Tdb(<internal>)")
 
 
 class SimpleTdbTests(TestCase):
@@ -122,12 +124,6 @@ class SimpleTdbTests(TestCase):
         self.tdb.transaction_commit()
         self.assertEquals("1", self.tdb["bloe"])
 
-    def test_iterator(self):
-        self.tdb["bloe"] = "2"
-        self.tdb["bla"] = "hoi"
-        i = iter(self.tdb)
-        self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()]))
-
     def test_iterkeys(self):
         self.tdb["bloe"] = "2"
         self.tdb["bla"] = "25"