From: Mike Bayer Date: Mon, 27 May 2013 00:17:22 +0000 (-0400) Subject: clean up some of this collection stuff X-Git-Tag: rel_0_9_0b1~304^2~13^2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6abd0c4eac69ba9ca3530a9e5076d57a5b42b998;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git clean up some of this collection stuff --- diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index 08875c3a0d..0482a9205b 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -758,24 +758,15 @@ class _AssociationDict(_AssociationCollection): def keys(self): return self.col.keys() - def _iteritems(self): - for key in self.col: - yield (key, self._get(self.col[key])) - raise StopIteration - - def _itervalues(self): - for key in self.col: - yield self._get(self.col[key]) - raise StopIteration + if util.py2k: + def iteritems(self): + return ((key, self._get(self.col[key])) for key in self.col) - def _iterkeys(self): - return self.col.iterkeys() + def itervalues(self): + return (self._get(self.col[key]) for key in self.col) - - if util.py2k: - iterkeys = _iterkeys - itervalues = _itervalues - iteritems = _iteritems + def iterkeys(self): + return self.col.iterkeys() def values(self): return [self._get(member) for member in self.col.values()] @@ -783,8 +774,11 @@ class _AssociationDict(_AssociationCollection): def items(self): return [(k, self._get(self.col[k])) for k in self] else: - values = _itervalues - items = _iteritems + def items(self): + return ((key, self._get(self.col[key])) for key in self.col) + + def values(self): + return (self._get(self.col[key]) for key in self.col) def pop(self, key, default=_NotProvided): if default is _NotProvided: diff --git a/lib/sqlalchemy/orm/identity.py b/lib/sqlalchemy/orm/identity.py index 55a78066a9..d0234a1d38 100644 --- a/lib/sqlalchemy/orm/identity.py +++ b/lib/sqlalchemy/orm/identity.py @@ -154,12 +154,11 @@ class WeakInstanceDict(IdentityMap): if util.py2k: items = _items + values = _values def iteritems(self): return iter(self.items()) - values = _values - def itervalues(self): return iter(self.values()) else: diff --git a/lib/sqlalchemy/util/_collections.py b/lib/sqlalchemy/util/_collections.py index c10d19ea12..ed9ecfedc1 100644 --- a/lib/sqlalchemy/util/_collections.py +++ b/lib/sqlalchemy/util/_collections.py @@ -10,6 +10,7 @@ import itertools import weakref import operator from .compat import threading, itertools_filterfalse +from . import py2k EMPTY_SET = frozenset() @@ -55,7 +56,7 @@ class KeyedTuple(tuple): t = tuple.__new__(cls, vals) t._labels = [] if labels: - t.__dict__.update(list(zip(labels, vals))) + t.__dict__.update(zip(labels, vals)) t._labels = labels return t @@ -189,13 +190,13 @@ class Properties(object): return default def keys(self): - return list(self._data.keys()) + return self._data.keys() def values(self): - return list(self._data.values()) + return self._data.values() def items(self): - return list(self._data.items()) + return self._data.items() def has_key(self, key): return key in self._data @@ -260,23 +261,33 @@ class OrderedDict(dict): def __iter__(self): return iter(self._list) - def values(self): - return [self[key] for key in self._list] + if py2k: + def values(self): + return [self[key] for key in self._list] - def itervalues(self): - return iter([self[key] for key in self._list]) + def keys(self): + return self._list - def keys(self): - return list(self._list) + def itervalues(self): + return iter([self[key] for key in self._list]) - def iterkeys(self): - return iter(list(self.keys())) + def iterkeys(self): + return iter(self) - def items(self): - return [(key, self[key]) for key in self.keys()] + def iteritems(self): + return iter(self.items()) + + def items(self): + return [(key, self[key]) for key in self._list] + else: + def values(self): + return (self[key] for key in self._list) + + def keys(self): + return iter(self._list) - def iteritems(self): - return iter(list(self.items())) + def items(self): + return ((key, self[key]) for key in self._list) def __setitem__(self, key, object): if key not in self: