illegal sorting in python 3

Issue #2228 resolved
Mike Bayer repo owner created an issue
from sqlalchemy import *
from sqlalchemy.orm import Session

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class A(Base):
    __tablename__ = 'a'

    id = Column(String, primary_key=True)
    data = Column(Integer)

e = create_engine('sqlite://', echo=True)
Base.metadata.create_all(e)

s = Session(e)

a1 = A(id='a')
s.add(a1)
s.commit()

a2 = A(id='b')
s.add(a2)
a1.data = 5
s.commit()

patch:

diff -r c1295ce57ba7d906821b3ddd5b97aa9659700d52 lib/sqlalchemy/orm/mapper.py
--- a/lib/sqlalchemy/orm/mapper.py  Thu Jul 21 11:44:31 2011 -0400
+++ b/lib/sqlalchemy/orm/mapper.py  Fri Jul 22 10:11:14 2011 -0400
@@ -2819,9 +2819,13 @@


 def _sort_states(states):
-    return sorted(states, key=operator.attrgetter('sort_key'))
-
-
+    ret = [   for haskey, g in groupby(states, key=lambda s:s.key is not None):
+        if haskey:
+            ret = sorted(g, key=lambda st: st.key[1](]
+)) + ret
+        else:
+            ret.extend(sorted(g, key=operator.attrgetter("insert_order")))
+    return ret

 class _ColumnMapping(util.py25_dict):
     """Error reporting helper for mapper._columntoproperty."""
diff -r c1295ce57ba7d906821b3ddd5b97aa9659700d52 lib/sqlalchemy/orm/state.py
--- a/lib/sqlalchemy/orm/state.py   Thu Jul 21 11:44:31 2011 -0400
+++ b/lib/sqlalchemy/orm/state.py   Fri Jul 22 10:11:14 2011 -0400
@@ -85,10 +85,6 @@
         else:
             return {}

-    @property
-    def sort_key(self):
-        return self.key and self.key[1](1) or (self.insert_order, )
-
     def initialize_instance(*mixed, **kwargs):
         self, instance, args = mixed[0](0), mixed[1](1), mixed[2:](2:)
         manager = self.manager

Comments (2)

  1. Log in to comment