From d190f9c45e07caa77f8f79ac34560d41271a7c7b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 4 Feb 2008 21:26:27 +0000 Subject: [PATCH] In bsddb, replace UserDict.DictMixin with collections.MutableMapping. I can't test this directly on my build, so letting the buildbots do it for me. If it fails, expect a reversion. --- Lib/bsddb/__init__.py | 8 ++++---- Lib/bsddb/dbobj.py | 9 +++++---- Lib/bsddb/dbshelve.py | 8 +++++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index 26e41b1358e..939700ff20e 100644 --- a/Lib/bsddb/__init__.py +++ b/Lib/bsddb/__init__.py @@ -64,10 +64,10 @@ error = db.DBError # So bsddb.error will mean something... #---------------------------------------------------------------------- -import sys, os, UserDict +import sys, os, collections from weakref import ref -class _iter_mixin(UserDict.DictMixin): +class _iter_mixin(collections.MutableMapping): def _make_iter_cursor(self): cur = _DeadlockWrap(self.db.cursor) key = id(cur) @@ -289,7 +289,7 @@ class _ExposedProperties: def _cursor_refs(self): return self.db._cursor_refs -class StringKeys(UserDict.DictMixin, _ExposedProperties): +class StringKeys(collections.MutableMapping, _ExposedProperties): """Wrapper around DB object that automatically encodes all keys as UTF-8; the keys must be strings.""" @@ -357,7 +357,7 @@ class StringKeys(UserDict.DictMixin, _ExposedProperties): def sync(self): return self.db.sync() -class StringValues(UserDict.DictMixin, _ExposedProperties): +class StringValues(collections.MutableMapping, _ExposedProperties): """Wrapper around DB object that automatically encodes and decodes all values as UTF-8; input values must be strings.""" diff --git a/Lib/bsddb/dbobj.py b/Lib/bsddb/dbobj.py index 987f7735f50..4c0f12582df 100644 --- a/Lib/bsddb/dbobj.py +++ b/Lib/bsddb/dbobj.py @@ -24,10 +24,9 @@ from . import db try: - from UserDict import DictMixin + from collections import MutableMapping except ImportError: - # DictMixin is new in Python 2.3 - class DictMixin: pass + class MutableMapping: pass class DBEnv: def __init__(self, *args, **kwargs): @@ -113,7 +112,7 @@ class DBEnv: return self._cobj.lsn_reset(*args, **kwargs) -class DB(DictMixin): +class DB(MutableMapping): def __init__(self, dbenv, *args, **kwargs): # give it the proper DBEnv C object that its expecting self._cobj = db.DB(dbenv._cobj, *args, **kwargs) @@ -127,6 +126,8 @@ class DB(DictMixin): self._cobj[key] = value def __delitem__(self, arg): del self._cobj[arg] + def __iter__(self): + return iter(self.keys()) def append(self, *args, **kwargs): return self._cobj.append(*args, **kwargs) diff --git a/Lib/bsddb/dbshelve.py b/Lib/bsddb/dbshelve.py index 8264f2d8121..942ee170160 100644 --- a/Lib/bsddb/dbshelve.py +++ b/Lib/bsddb/dbshelve.py @@ -38,12 +38,12 @@ if sys.version_info[:3] >= (2, 3, 0): HIGHEST_PROTOCOL = pickle.HIGHEST_PROTOCOL def _dumps(object, protocol): return pickle.dumps(object, protocol=protocol) - from UserDict import DictMixin + from collections import MutableMapping else: HIGHEST_PROTOCOL = None def _dumps(object, protocol): return pickle.dumps(object, bin=protocol) - class DictMixin: pass + class MutableMapping: pass from . import db @@ -90,7 +90,7 @@ def open(filename, flags=db.DB_CREATE, mode=0o660, filetype=db.DB_HASH, class DBShelveError(db.DBError): pass -class DBShelf(DictMixin): +class DBShelf(MutableMapping): """A shelf to hold pickled objects, built upon a bsddb DB object. It automatically pickles/unpickles data objects going to/from the DB. """ @@ -141,6 +141,8 @@ class DBShelf(DictMixin): else: return self.db.keys() + def __iter__(self): + return iter(self.keys()) def open(self, *args, **kwargs): self.db.open(*args, **kwargs)