From 73404e36836a0f53be9ffe28006b8492be7b0190 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 27 May 2013 17:15:30 -0400 Subject: [PATCH] - run the whole test suite with the "debugging" ordered dict on, find some more failures --- lib/sqlalchemy/util/_collections.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/sqlalchemy/util/_collections.py b/lib/sqlalchemy/util/_collections.py index 5991fc8a44..689a6756b2 100644 --- a/lib/sqlalchemy/util/_collections.py +++ b/lib/sqlalchemy/util/_collections.py @@ -143,7 +143,7 @@ class Properties(object): return len(self._data) def __iter__(self): - return iter(self._data.values()) + return iter(list(self._data.values())) def __add__(self, other): return list(self) + list(other) @@ -262,13 +262,6 @@ class OrderedDict(dict): return iter(self._list) - #def __iter__(self): - # len_ = len(self._list) - # for item in self._list: - # yield item - # assert len_ == len(self._list), \ - # "Dictionary changed size during iteration" - if py2k: def values(self): return [self[key] for key in self._list] @@ -300,6 +293,24 @@ class OrderedDict(dict): #return ((key, self[key]) for key in self) return ((key, self[key]) for key in self._list) + _debug_iter = False + if _debug_iter: + # normally disabled to reduce function call + # overhead + def __iter__(self): + len_ = len(self._list) + for item in self._list: + yield item + assert len_ == len(self._list), \ + "Dictionary changed size during iteration" + def values(self): + return (self[key] for key in self) + def keys(self): + return iter(self) + def items(self): + return ((key, self[key]) for key in self) + + def __setitem__(self, key, object): if key not in self: try: -- 2.47.3