summaryrefslogtreecommitdiffstats
path: root/Modules/gdbmmodule.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-03-03 22:02:24 (GMT)
committerGuido van Rossum <guido@python.org>1998-03-03 22:02:24 (GMT)
commitbfc49e8c75a45e54dfcaf007f081f23909720bbb (patch)
tree6783a261d25732c38c9ad3f710e4ff3268e33a5e /Modules/gdbmmodule.c
parent6659c30b67da07573e4ab315d6fca1667b920a35 (diff)
downloadcpython-bfc49e8c75a45e54dfcaf007f081f23909720bbb.zip
cpython-bfc49e8c75a45e54dfcaf007f081f23909720bbb.tar.gz
cpython-bfc49e8c75a45e54dfcaf007f081f23909720bbb.tar.bz2
Doc strings added by Mitch Chapman.
Also got rid of some inconsistent change log comments near the top.
Diffstat (limited to 'Modules/gdbmmodule.c')
-rw-r--r--Modules/gdbmmodule.c126
1 files changed, 107 insertions, 19 deletions
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c
index 8c870c0..88798b4 100644
--- a/Modules/gdbmmodule.c
+++ b/Modules/gdbmmodule.c
@@ -1,7 +1,3 @@
-/* GDBM module, hacked from the still-breathing corpse of the
- DBM module by anthony.baxter@aaii.oz.au. Original copyright
- follows:
-*/
/***********************************************************
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.
@@ -32,13 +28,10 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
******************************************************************/
-/*****************************************************************
- Modification History:
- Added support for 'gdbm_sync' method. Roger E. Masse 3/25/97
-
- *****************************************************************/
/* DBM module using dictionary interface */
+/* Author: Anthony Baxter, after dbmmodule.c */
+/* Doc strings: Mitch Chapman */
#include "Python.h"
@@ -48,6 +41,18 @@ PERFORMANCE OF THIS SOFTWARE.
#include <fcntl.h>
#include "gdbm.h"
+static char gdbmmodule__doc__[] = "\
+This module provides an interface to the GNU DBM (GDBM) library.\n\
+\n\
+This module is quite similar to the dbm module, but uses GDBM instead to\n\
+provide some additional functionality. Please note that the file formats\n\
+created by GDBM and dbm are incompatible. \n\
+\n\
+GDBM objects behave like mappings (dictionaries), except that keys and\n\
+values are always strings. Printing a GDBM object doesn't print the\n\
+keys and values, and the items() and values() methods are not\n\
+supported.";
+
typedef struct {
PyObject_HEAD
int di_size; /* -1 means recompute */
@@ -65,6 +70,16 @@ staticforward PyTypeObject Dbmtype;
static PyObject *DbmError;
+static char gdbm_object__doc__[] = "\
+This object represents a GDBM database.\n\
+GDBM objects behave like mappings (dictionaries), except that keys and\n\
+values are always strings. Printing a GDBM object doesn't print the\n\
+keys and values, and the items() and values() methods are not\n\
+supported.\n\
+\n\
+GDBM objects also support additional operations such as firstkey,\n\
+nextkey, reorganize, and sync.";
+
static PyObject *
newdbmobject(file, flags, mode)
char *file;
@@ -196,6 +211,11 @@ static PyMappingMethods dbm_as_mapping = {
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
};
+static char dbm_close__doc__[] = "\
+close() -> None\n\
+Closes the database.
+";
+
static PyObject *
dbm_close(dp, args)
register dbmobject *dp;
@@ -210,6 +230,10 @@ PyObject *args;
return Py_None;
}
+static char dbm_keys__doc__[] = "\
+keys() -> list_of_keys\n\
+Get a list of all keys in the database.";
+
static PyObject *
dbm_keys(dp, args)
register dbmobject *dp;
@@ -256,6 +280,10 @@ PyObject *args;
return v;
}
+static char dbm_has_key__doc__[] = "\
+has_key(key) -> boolean\n\
+Find out whether or not the database contains a given key.";
+
static PyObject *
dbm_has_key(dp, args)
register dbmobject *dp;
@@ -269,6 +297,13 @@ PyObject *args;
return PyInt_FromLong((long) gdbm_exists(dp->di_dbm, key));
}
+static char dbm_firstkey__doc__[] = "\
+firstkey() -> key\n\
+It's possible to loop over every key in the database using this method\n\
+and the nextkey() method. The traversal is ordered by GDBM's internal\n\
+hash values, and won't be sorted by the key values. This method\n\
+returns the starting key.";
+
static PyObject *
dbm_firstkey(dp, args)
register dbmobject *dp;
@@ -291,6 +326,17 @@ PyObject *args;
}
}
+static char dbm_nextkey__doc__[] = "\
+nextkey(key) -> next_key\n\
+Returns the key that follows key in the traversal.\n\
+The following code prints every key in the database db, without having\n\
+to create a list in memory that contains them all:\n\
+\n\
+ k = db.firstkey()\n\
+ while k != None:\n\
+ print k\n\
+ k = db.nextkey(k)";
+
static PyObject *
dbm_nextkey(dp, args)
register dbmobject *dp;
@@ -313,6 +359,14 @@ PyObject *args;
}
}
+static char dbm_reorganize__doc__[] = "\
+reorganize() -> None\n\
+If you have carried out a lot of deletions and would like to shrink\n\
+the space used by the GDBM file, this routine will reorganize the\n\
+database. GDBM will not shorten the length of a database file except\n\
+by using this reorganization; otherwise, deleted file space will be\n\
+kept and reused as new (key,value) pairs are added.";
+
static PyObject *
dbm_reorganize(dp, args)
register dbmobject *dp;
@@ -334,6 +388,11 @@ PyObject *args;
return Py_None;
}
+static char dbm_sync__doc__[] = "\
+sync() -> None\n\
+When the database has been opened in fast mode, this method forces\n\
+any unwritten data to be written to the disk.";
+
static PyObject *
dbm_sync(dp, args)
register dbmobject *dp;
@@ -348,13 +407,13 @@ dbm_sync(dp, args)
}
static PyMethodDef dbm_methods[] = {
- {"close", (PyCFunction)dbm_close},
- {"keys", (PyCFunction)dbm_keys},
- {"has_key", (PyCFunction)dbm_has_key},
- {"firstkey", (PyCFunction)dbm_firstkey},
- {"nextkey", (PyCFunction)dbm_nextkey},
- {"reorganize", (PyCFunction)dbm_reorganize},
- {"sync", (PyCFunction)dbm_sync},
+ {"close", (PyCFunction)dbm_close, 0, dbm_close__doc__},
+ {"keys", (PyCFunction)dbm_keys, 0, dbm_keys__doc__},
+ {"has_key", (PyCFunction)dbm_has_key, 0, dbm_has_key__doc__},
+ {"firstkey", (PyCFunction)dbm_firstkey, 0, dbm_firstkey__doc__},
+ {"nextkey", (PyCFunction)dbm_nextkey, 0, dbm_nextkey__doc__},
+ {"reorganize", (PyCFunction)dbm_reorganize, 0, dbm_reorganize__doc__},
+ {"sync", (PyCFunction)dbm_sync, 0, dbm_sync__doc__},
{NULL, NULL} /* sentinel */
};
@@ -381,10 +440,38 @@ static PyTypeObject Dbmtype = {
0, /*tp_as_number*/
0, /*tp_as_sequence*/
&dbm_as_mapping, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ 0, /*tp_xxx4*/
+ gdbm_object__doc__, /*tp_doc*/
};
/* ----------------------------------------------------------------- */
+static char dbmopen__doc__[] = "\
+open(filename, [flag, [mode]]) -> dbm_object\n\
+Open a dbm database and return a dbm object. The filename argument is\n\
+the name of the database file.\n\
+\n\
+The optional flag argument can be 'r' (to open an existing database\n\
+for reading only -- default), 'w' (to open an existing database for\n\
+reading and writing), 'c' (which creates the database if it doesn't\n\
+exist), or 'n' (which always creates a new empty database).\n\
+\n\
+Appending f to the flag opens the database in fast mode; altered\n\
+data will not automatically be written to the disk after every\n\
+change. This results in faster writes to the database, but may\n\
+result in an inconsistent database if the program crashes while the\n\
+database is still open. Use the sync() method to force any\n\
+unwritten data to be written to the disk.\n\
+\n\
+The optional mode argument is the Unix mode of the file, used only\n\
+when the database has to be created. It defaults to octal 0666. ";
+
static PyObject *
dbmopen(self, args)
PyObject *self;
@@ -395,7 +482,6 @@ PyObject *args;
int iflags;
int mode = 0666;
-/* XXXX add other flags. 2nd character can be "f" meaning open in fast mode. */
if ( !PyArg_ParseTuple(args, "s|si", &name, &flags, &mode) )
return NULL;
switch (flags[0]) {
@@ -422,7 +508,7 @@ PyObject *args;
}
static PyMethodDef dbmmodule_methods[] = {
- { "open", (PyCFunction)dbmopen, 1 },
+ { "open", (PyCFunction)dbmopen, 1, dbmopen__doc__},
{ 0, 0 },
};
@@ -430,7 +516,9 @@ void
initgdbm() {
PyObject *m, *d;
- m = Py_InitModule("gdbm", dbmmodule_methods);
+ m = Py_InitModule4("gdbm", dbmmodule_methods,
+ gdbmmodule__doc__, (PyObject *)NULL,
+ PYTHON_API_VERSION);
d = PyModule_GetDict(m);
DbmError = PyErr_NewException("gdbm.error", NULL, NULL);
if (DbmError != NULL)