[Python-3000-checkins] r60586 - in python/branches/py3k: Lib/collections.py Misc/NEWS
raymond.hettinger
python-3000-checkins at python.org
Tue Feb 5 02:53:00 CET 2008
Author: raymond.hettinger
Date: Tue Feb 5 02:53:00 2008
New Revision: 60586
Modified:
python/branches/py3k/Lib/collections.py
python/branches/py3k/Misc/NEWS
Log:
Put an updated UserDict class in the collections module and
register it as a compliant Mutable Mapping.
Todo: Convert the UserDict dependent tests to the new API
and then remove the old UserDict module. Move the
UserDict docs to collections.rst.
Modified: python/branches/py3k/Lib/collections.py
==============================================================================
--- python/branches/py3k/Lib/collections.py (original)
+++ python/branches/py3k/Lib/collections.py Tue Feb 5 02:53:00 2008
@@ -1,4 +1,4 @@
-__all__ = ['deque', 'defaultdict', 'namedtuple']
+__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict']
# For bootstrapping reasons, the collection ABCs are defined in _abcoll.py.
# They should however be considered an integral part of collections.py.
from _abcoll import *
@@ -10,6 +10,10 @@
from keyword import iskeyword as _iskeyword
import sys as _sys
+################################################################################
+### namedtuple
+################################################################################
+
def namedtuple(typename, field_names, verbose=False):
"""Returns a new subclass of tuple with named fields.
@@ -106,7 +110,60 @@
+################################################################################
+### UserDict
+################################################################################
+
+class UserDict(MutableMapping):
+
+ # Start by filling-out the abstract methods
+ def __init__(self, dict=None, **kwargs):
+ self.data = {}
+ if dict is not None:
+ self.update(dict)
+ if len(kwargs):
+ self.update(kwargs)
+ def __len__(self): return len(self.data)
+ def __getitem__(self, key):
+ if key in self.data:
+ return self.data[key]
+ if hasattr(self.__class__, "__missing__"):
+ return self.__class__.__missing__(self, key)
+ raise KeyError(key)
+ def __setitem__(self, key, item): self.data[key] = item
+ def __delitem__(self, key): del self.data[key]
+ def __iter__(self):
+ return iter(self.data)
+
+
+ # Now, add the methods in dicts but not in MutableMapping
+ def __repr__(self): return repr(self.data)
+ def copy(self):
+ if self.__class__ is UserDict:
+ return UserDict(self.data.copy())
+ import copy
+ data = self.data
+ try:
+ self.data = {}
+ c = copy.copy(self)
+ finally:
+ self.data = data
+ c.update(self)
+ return c
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+MutableMapping.register(UserDict)
+
+
+################################################################################
+### Simple tests
+################################################################################
if __name__ == '__main__':
# verify that instances can be pickled
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Tue Feb 5 02:53:00 2008
@@ -70,6 +70,13 @@
Library
-------
+- Weakref dictionaries now inherit from MutableMapping.
+ XXX their API still needs to be modernized (i.e. eliminate the iter methods).
+
+- Created new UserDict class in collections module. This one inherits from and
+ complies with the MutableMapping ABC.
+ XXX still need to covert old UserDict based tests and eliminate the old UserDict module.
+
- Removed UserDict.DictMixin. Replaced all its uses with collections.MutableMapping.
- Issue #1703: getpass() should flush after writing prompt.
More information about the Python-3000-checkins
mailing list