From 652a24f0303b9bb0e7a326b05709d7660793f90b Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 15 Aug 2014 15:13:13 -0400 Subject: [PATCH] - The :class:`.IdentityMap` exposed from :class:`.Session.identity` now returns lists for ``items()`` and ``values()`` in Py3K. Early porting to Py3K here had these returning iterators, when they technically should be "iterable views"..for now, lists are OK. --- doc/build/changelog/changelog_10.rst | 8 +++++++ lib/sqlalchemy/orm/identity.py | 34 +++++++--------------------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index 439d02c479..fb639ddf73 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -16,6 +16,14 @@ .. changelog:: :version: 1.0.0 + .. change:: + :tags: bug, orm, py3k + + The :class:`.IdentityMap` exposed from :class:`.Session.identity` + now returns lists for ``items()`` and ``values()`` in Py3K. + Early porting to Py3K here had these returning iterators, when + they technically should be "iterable views"..for now, lists are OK. + .. change:: :tags: orm, feature diff --git a/lib/sqlalchemy/orm/identity.py b/lib/sqlalchemy/orm/identity.py index d9cdd791f1..4425fc3a6e 100644 --- a/lib/sqlalchemy/orm/identity.py +++ b/lib/sqlalchemy/orm/identity.py @@ -150,7 +150,7 @@ class WeakInstanceDict(IdentityMap): return default return o - def _items(self): + def items(self): values = self.all_states() result = [] for state in values: @@ -159,7 +159,7 @@ class WeakInstanceDict(IdentityMap): result.append((state.key, value)) return result - def _values(self): + def values(self): values = self.all_states() result = [] for state in values: @@ -169,9 +169,10 @@ class WeakInstanceDict(IdentityMap): return result + def __iter__(self): + return iter(self.keys()) + if util.py2k: - items = _items - values = _values def iteritems(self): return iter(self.items()) @@ -179,24 +180,8 @@ class WeakInstanceDict(IdentityMap): def itervalues(self): return iter(self.values()) - def __iter__(self): - return iter(self.keys()) - - else: - def items(self): - return iter(self._items()) - - def values(self): - return iter(self._values()) - - def __iter__(self): - return self.keys() - def all_states(self): - if util.py2k: - return self._dict.values() - else: - return list(self._dict.values()) + return self._dict.values() def discard(self, state): if state.key in self._dict: @@ -217,11 +202,8 @@ class StrongInstanceDict(IdentityMap): def iteritems(self): return self._dict.iteritems() - def __iter__(self): - return iter(self.keys()) - else: - def __iter__(self): - return self.keys() + def __iter__(self): + return iter(self.dict_) def __getitem__(self, key): return self._dict[key] -- 2.47.3