]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fix a dict while iterate mutation
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 27 May 2013 17:39:24 +0000 (13:39 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 27 May 2013 17:39:24 +0000 (13:39 -0400)
- illustrate how OrderedDict can catch these, but commented out
to save function overhead

lib/sqlalchemy/ext/declarative/base.py
lib/sqlalchemy/util/_collections.py

index 9187ed7f89c87611e385f0608d052734ef93e778..5a2b88db46e457e21a1b81e41da3cda8be9c0825 100644 (file)
@@ -173,7 +173,7 @@ def _as_declarative(cls, classname, dict_):
 
     # extract columns from the class dict
     declared_columns = set()
-    for key, c in our_stuff.items():
+    for key, c in list(our_stuff.items()):
         if isinstance(c, (ColumnProperty, CompositeProperty)):
             for col in c.columns:
                 if isinstance(col, Column) and \
index ed9ecfedc1002735a33d979918246b226786ca0d..5991fc8a446ddd37edae41a73fef2dee6db47288 100644 (file)
@@ -261,6 +261,14 @@ class OrderedDict(dict):
     def __iter__(self):
         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]
@@ -281,12 +289,15 @@ class OrderedDict(dict):
             return [(key, self[key]) for key in self._list]
     else:
         def values(self):
+            #return (self[key] for key in self)
             return (self[key] for key in self._list)
 
         def keys(self):
+            #return iter(self)
             return iter(self._list)
 
         def items(self):
+            #return ((key, self[key]) for key in self)
             return ((key, self[key]) for key in self._list)
 
     def __setitem__(self, key, object):