diff options
-rw-r--r-- | lib/sqlalchemy/util/_collections.py | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/lib/sqlalchemy/util/_collections.py b/lib/sqlalchemy/util/_collections.py index 5991fc8a4..689a6756b 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: |