Make ExtendedAtomDict inherit from MutableMapping, and fix __getitem__
authorZac Medico <zmedico@gentoo.org>
Tue, 27 Jul 2010 05:08:52 +0000 (22:08 -0700)
committerZac Medico <zmedico@gentoo.org>
Tue, 27 Jul 2010 05:08:52 +0000 (22:08 -0700)
to raise KeyError if given a non-string argument.

pym/portage/dep/__init__.py

index a8c647cee31e410bb0a205a6f04e4bafbcf86997..25cad8fd8be35dff2e7c06eb921c6b47d99e9997 100644 (file)
@@ -770,13 +770,16 @@ def extended_cp_match(extended_cp, other_cp):
                _extended_cp_re_cache[extended_cp] = extended_cp_re
        return extended_cp_re.match(other_cp) is not None
 
-class ExtendedAtomDict(object):
+class ExtendedAtomDict(portage.cache.mappings.MutableMapping):
        """
        dict() wrapper that supports extended atoms as keys and allows lookup
        of a normal cp against other normal cp and extended cp.
        The value type has to be given to __init__ and is assumed to be the same
        for all values.
        """
+
+       __slots__ = ('_extended', '_normal', '_value_class')
+
        def __init__(self, value_class):
                self._extended = {}
                self._normal = {}
@@ -817,6 +820,8 @@ class ExtendedAtomDict(object):
                        self._normal[cp] = val
 
        def __getitem__(self, cp):
+               if not isinstance(cp, basestring):
+                       raise KeyError(cp)
                if "*" in cp:
                        return self._extended[cp]
                else: