@@ -29,10 +29,10 @@ static char *which_dbm = "Berkeley DB";
2929#endif
3030
3131/*[clinic input]
32- module dbm
33- class dbm .dbm "dbmobject *" "&Dbmtype"
32+ module _dbm
33+ class _dbm .dbm "dbmobject *" "&Dbmtype"
3434[clinic start generated code]*/
35- /*[clinic end generated code: output=da39a3ee5e6b4b0d input=92450564684a69a3 ]*/
35+ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=9b1aa8756d16150e ]*/
3636
3737typedef struct {
3838 PyObject_HEAD
@@ -51,15 +51,6 @@ static PyTypeObject Dbmtype;
5151
5252static PyObject * DbmError ;
5353
54- /*[python input]
55- class dbmobject_converter(self_converter):
56- type = "dbmobject *"
57- def pre_render(self):
58- super().pre_render()
59- self.name = 'dp'
60- [python start generated code]*/
61- /*[python end generated code: output=da39a3ee5e6b4b0d input=6ad536357913879a]*/
62-
6354static PyObject *
6455newdbmobject (const char * file , int flags , int mode )
6556{
@@ -183,29 +174,43 @@ static PyMappingMethods dbm_as_mapping = {
183174 (objobjargproc )dbm_ass_sub , /*mp_ass_subscript*/
184175};
185176
177+ /*[clinic input]
178+ _dbm.dbm.close
179+
180+ Close the database.
181+ [clinic start generated code]*/
182+
186183static PyObject *
187- dbm__close (dbmobject * dp , PyObject * unused )
184+ _dbm_dbm_close_impl (dbmobject * self )
185+ /*[clinic end generated code: output=c8dc5b6709600b86 input=046db72377d51be8]*/
188186{
189- if (dp -> di_dbm )
190- dbm_close (dp -> di_dbm );
191- dp -> di_dbm = NULL ;
187+ if (self -> di_dbm )
188+ dbm_close (self -> di_dbm );
189+ self -> di_dbm = NULL ;
192190 Py_INCREF (Py_None );
193191 return Py_None ;
194192}
195193
194+ /*[clinic input]
195+ _dbm.dbm.keys
196+
197+ Return a list of all keys in the database.
198+ [clinic start generated code]*/
199+
196200static PyObject *
197- dbm_keys (dbmobject * dp , PyObject * unused )
201+ _dbm_dbm_keys_impl (dbmobject * self )
202+ /*[clinic end generated code: output=434549f7c121b33c input=d210ba778cd9c68a]*/
198203{
199204 PyObject * v , * item ;
200205 datum key ;
201206 int err ;
202207
203- check_dbmobject_open (dp );
208+ check_dbmobject_open (self );
204209 v = PyList_New (0 );
205210 if (v == NULL )
206211 return NULL ;
207- for (key = dbm_firstkey (dp -> di_dbm ); key .dptr ;
208- key = dbm_nextkey (dp -> di_dbm )) {
212+ for (key = dbm_firstkey (self -> di_dbm ); key .dptr ;
213+ key = dbm_nextkey (self -> di_dbm )) {
209214 item = PyBytes_FromStringAndSize (key .dptr , key .dsize );
210215 if (item == NULL ) {
211216 Py_DECREF (v );
@@ -267,76 +272,82 @@ static PySequenceMethods dbm_as_sequence = {
267272};
268273
269274/*[clinic input]
270-
271- dbm.dbm.get
272-
273- self: dbmobject
275+ _dbm.dbm.get
274276
275277 key: str(types={'str', 'robuffer'}, length=True)
276- default: object = None
278+ default: object(c_default="NULL") = b''
277279 /
278280
279281Return the value for key if present, otherwise default.
280282[clinic start generated code]*/
281283
282284static PyObject *
283- dbm_dbm_get_impl (dbmobject * dp , const char * key , Py_ssize_clean_t key_length ,
284- PyObject * default_value )
285- /*[clinic end generated code: output=4f5c0e523eaf1251 input=f81478bc211895ef ]*/
285+ _dbm_dbm_get_impl (dbmobject * self , const char * key ,
286+ Py_ssize_clean_t key_length , PyObject * default_value )
287+ /*[clinic end generated code: output=b44f95eba8203d93 input=fee97bbe85e84822 ]*/
286288{
287289 datum dbm_key , val ;
288290
289291 dbm_key .dptr = (char * )key ;
290292 dbm_key .dsize = key_length ;
291- check_dbmobject_open (dp );
292- val = dbm_fetch (dp -> di_dbm , dbm_key );
293+ check_dbmobject_open (self );
294+ val = dbm_fetch (self -> di_dbm , dbm_key );
293295 if (val .dptr != NULL )
294296 return PyBytes_FromStringAndSize (val .dptr , val .dsize );
295297
296298 Py_INCREF (default_value );
297299 return default_value ;
298300}
299301
302+ /*[clinic input]
303+ _dbm.dbm.setdefault
304+ key: str(types={'str', 'robuffer'}, length=True)
305+ default: object(c_default="NULL") = b''
306+ /
307+
308+ Return the value for key if present, otherwise default.
309+
310+ If key is not in the database, it is inserted with default as the value.
311+ [clinic start generated code]*/
312+
300313static PyObject *
301- dbm_setdefault (dbmobject * dp , PyObject * args )
314+ _dbm_dbm_setdefault_impl (dbmobject * self , const char * key ,
315+ Py_ssize_clean_t key_length ,
316+ PyObject * default_value )
317+ /*[clinic end generated code: output=52545886cf272161 input=6a3b99ae91f20203]*/
302318{
303- datum key , val ;
304- PyObject * defvalue = NULL ;
305- char * tmp_ptr ;
319+ datum dbm_key , val ;
306320 Py_ssize_t tmp_size ;
307321
308- if (!PyArg_ParseTuple (args , "s#|O:setdefault" ,
309- & tmp_ptr , & tmp_size , & defvalue ))
310- return NULL ;
311- key .dptr = tmp_ptr ;
312- key .dsize = tmp_size ;
313- check_dbmobject_open (dp );
314- val = dbm_fetch (dp -> di_dbm , key );
322+ dbm_key .dptr = (char * )key ;
323+ dbm_key .dsize = key_length ;
324+ check_dbmobject_open (self );
325+ val = dbm_fetch (self -> di_dbm , dbm_key );
315326 if (val .dptr != NULL )
316327 return PyBytes_FromStringAndSize (val .dptr , val .dsize );
317- if (defvalue == NULL ) {
318- defvalue = PyBytes_FromStringAndSize (NULL , 0 );
319- if (defvalue == NULL )
328+ if (default_value == NULL ) {
329+ default_value = PyBytes_FromStringAndSize (NULL , 0 );
330+ if (default_value == NULL )
320331 return NULL ;
321332 val .dptr = NULL ;
322333 val .dsize = 0 ;
323334 }
324335 else {
325- if ( !PyArg_Parse (defvalue , "s#" , & val .dptr , & tmp_size ) ) {
336+ if ( !PyArg_Parse (default_value , "s#" , & val .dptr , & tmp_size ) ) {
326337 PyErr_SetString (PyExc_TypeError ,
327338 "dbm mappings have byte string elements only" );
328339 return NULL ;
329340 }
330341 val .dsize = tmp_size ;
331- Py_INCREF (defvalue );
342+ Py_INCREF (default_value );
332343 }
333- if (dbm_store (dp -> di_dbm , key , val , DBM_INSERT ) < 0 ) {
334- dbm_clearerr (dp -> di_dbm );
344+ if (dbm_store (self -> di_dbm , dbm_key , val , DBM_INSERT ) < 0 ) {
345+ dbm_clearerr (self -> di_dbm );
335346 PyErr_SetString (DbmError , "cannot add item to database" );
336- Py_DECREF (defvalue );
347+ Py_DECREF (default_value );
337348 return NULL ;
338349 }
339- return defvalue ;
350+ return default_value ;
340351}
341352
342353static PyObject *
@@ -355,15 +366,10 @@ dbm__exit__(PyObject *self, PyObject *args)
355366
356367
357368static PyMethodDef dbm_methods [] = {
358- {"close" , (PyCFunction )dbm__close , METH_NOARGS ,
359- "close()\nClose the database." },
360- {"keys" , (PyCFunction )dbm_keys , METH_NOARGS ,
361- "keys() -> list\nReturn a list of all keys in the database." },
362- DBM_DBM_GET_METHODDEF
363- {"setdefault" , (PyCFunction )dbm_setdefault , METH_VARARGS ,
364- "setdefault(key[, default]) -> value\n"
365- "Return the value for key if present, otherwise default. If key\n"
366- "is not in the database, it is inserted with default as the value." },
369+ _DBM_DBM_CLOSE_METHODDEF
370+ _DBM_DBM_KEYS_METHODDEF
371+ _DBM_DBM_GET_METHODDEF
372+ _DBM_DBM_SETDEFAULT_METHODDEF
367373 {"__enter__" , dbm__enter__ , METH_NOARGS , NULL },
368374 {"__exit__" , dbm__exit__ , METH_VARARGS , NULL },
369375 {NULL , NULL } /* sentinel */
@@ -404,7 +410,7 @@ static PyTypeObject Dbmtype = {
404410
405411/*[clinic input]
406412
407- dbm .open as dbmopen
413+ _dbm .open as dbmopen
408414
409415 filename: str
410416 The filename to open.
@@ -425,7 +431,7 @@ Return a database object.
425431static PyObject *
426432dbmopen_impl (PyModuleDef * module , const char * filename , const char * flags ,
427433 int mode )
428- /*[clinic end generated code: output=e8d4b36f25c733fd input=6499ab0fab1333ac ]*/
434+ /*[clinic end generated code: output=e8d4b36f25c733fd input=226334bade5764e6 ]*/
429435{
430436 int iflags ;
431437
0 commit comments