New submission from Ray.Allen <ysj....@gmail.com>:

During the patching work of issue8634, I found several problems about the 
module dbm.gnu and dbm.ndbm, I feel it's better to address them on a separate 
issue.

1. As issue8634 said, the dbm.gnu, dbm.ndbm and dbm.dumb should have the 
similar interface, since they are intended to use the general dbm module as a 
common interface. If some methods only appears in one or two of them, like the 
"get()" method, it will be not convenient for users. Making all the three ones 
follow the collections.MutableMapping interface could be a better choice. Since 
the dbm.dumb is already collections.MutableMapping, I implemented missing 
methods of collections.MutableMapping in dbm.gnu and dbm.ndbm, and register the 
dbm object type in dbm.gnu and dbm.ndbm to the ABC. The missing methods mainly 
include get(), values(), items(), pop(), popitem(), clear()

2. I fix the dbm_contains() function which implement the "in" operator to 
accept all buffer object, just like the dbm_subscript() fuction which implment 
the "[]" slice operator. I feel it's wearied that if "dbm['a']" yields the 
expected result but at the same time "'a' in dbm" raises TypeError. 

3. The type of dbm object in dbm.gnu is not iterable, and there is no way to 
iterate on it sufficiently because the only way we can iterate over it is to 
get all the keys first using keys() and then iter on the keys list. So I 
implemented a iterator type for dbm.gnu. Besides the dbm object in dbm.ndbm is 
also not iterable, and I implemented its tp_iter by get an iterator from its 
keys list instead of implementing a "real" iterator since the ndbm c api for 
get all the keys one by one is thread specific and I could not found a way to 
implement a real iterator to avoid the problem which occurred in the case we 
get tow iterators from one db object in the same thread and iterate over both 
at the same time.

The patch contains also unittest and doc.

----------
files: issue8634.diff
keywords: patch
messages: 112989
nosy: ysj.ray
priority: normal
severity: normal
status: open
title: Improve dbm module
Added file: http://bugs.python.org/file18402/issue8634.diff

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue9523>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to