diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-07-01 10:11:10 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-07-01 10:11:10 +0000 |
commit | 3ab46b943befdd480b24c3d459555011dd04e120 (patch) | |
tree | 193103aecbe731acbd022d2f11be38fb9bf8afbb /pym/portage | |
parent | 43833b58736bef2565250f3965a22ab747ba6d0b (diff) | |
download | portage-3ab46b943befdd480b24c3d459555011dd04e120.tar.gz portage-3ab46b943befdd480b24c3d459555011dd04e120.tar.bz2 portage-3ab46b943befdd480b24c3d459555011dd04e120.zip |
Add a "prefix" keyword parameter to slot_dict_class() which controls the
prefix used when mapping attribute names from keys. Use this to change
the syntax from files["foo"] to files.foo (it's fewer characters to look
at).
svn path=/main/trunk/; revision=10869
Diffstat (limited to 'pym/portage')
-rw-r--r-- | pym/portage/cache/mappings.py | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/pym/portage/cache/mappings.py b/pym/portage/cache/mappings.py index 2cddd8147..2ccc96b05 100644 --- a/pym/portage/cache/mappings.py +++ b/pym/portage/cache/mappings.py @@ -104,14 +104,17 @@ class LazyLoad(UserDict.DictMixin): _slot_dict_classes = weakref.WeakValueDictionary() -def slot_dict_class(keys): +def slot_dict_class(keys, prefix="_val_"): """ Generates mapping classes that behave similar to a dict but store values as object attributes that are allocated via __slots__. Instances of these objects have a smaller memory footprint than a normal dict object. @param keys: Fixed set of allowed keys - @type keys: iterable + @type keys: Iterable + @param prefix: a prefix to use when mapping + attribute names from keys + @type prefix: String @rtype: SlotDict @returns: A class that constructs SlotDict instances having the specified keys. @@ -120,14 +123,15 @@ def slot_dict_class(keys): keys_set = keys else: keys_set = frozenset(keys) - v = _slot_dict_classes.get(keys_set) + v = _slot_dict_classes.get((keys_set, prefix)) if v is None: class SlotDict(object): allowed_keys = keys_set + _prefix = prefix __slots__ = ("__weakref__",) + \ - tuple("_val_" + k for k in allowed_keys) + tuple(prefix + k for k in allowed_keys) def __iter__(self): for k, v in self.iteritems(): @@ -145,7 +149,7 @@ def slot_dict_class(keys): def iteritems(self): for k in self.allowed_keys: try: - yield (k, getattr(self, "_val_" + k)) + yield (k, getattr(self, self._prefix + k)) except AttributeError: pass @@ -161,12 +165,12 @@ def slot_dict_class(keys): def __delitem__(self, k): try: - delattr(self, "_val_" + k) + delattr(self, self._prefix + k) except AttributeError: raise KeyError(k) def __setitem__(self, k, v): - setattr(self, "_val_" + k, v) + setattr(self, self._prefix + k, v) def setdefault(self, key, default=None): try: @@ -186,7 +190,7 @@ def slot_dict_class(keys): def __getitem__(self, k): try: - return getattr(self, "_val_" + k) + return getattr(self, self._prefix + k) except AttributeError: raise KeyError(k) @@ -197,7 +201,7 @@ def slot_dict_class(keys): return default def __contains__(self, k): - return hasattr(self, "_val_" + k) + return hasattr(self, self._prefix + k) def has_key(self, k): return k in self @@ -232,7 +236,7 @@ def slot_dict_class(keys): def clear(self): for k in self.allowed_keys: try: - delattr(self, "_val_" + k) + delattr(self, self._prefix + k) except AttributeError: pass |