Skip to content

Instantly share code, notes, and snippets.

@plq
Last active December 17, 2015 15:19
Show Gist options
  • Select an option

  • Save plq/5630698 to your computer and use it in GitHub Desktop.

Select an option

Save plq/5630698 to your computer and use it in GitHub Desktop.
patch
================================================================================== FAILURES ===================================================================================
_________________________________________________________________ TestSqlAlchemyNested.test_scalar_collection _________________________________________________________________
test_sqlalchemy.py:945: in test_scalar_collection
> session.commit()
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/session.py:721: in commit
> self.transaction.commit()
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/session.py:354: in commit
> self._prepare_impl()
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/session.py:334: in _prepare_impl
> self.session.flush()
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/session.py:1818: in flush
> self._flush(objects)
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/session.py:1936: in _flush
> transaction.rollback(_capture_exception=True)
/home/plq/src/sqlalchemy/lib/sqlalchemy/util/langhelpers.py:58: in __exit__
> compat.reraise(exc_type, exc_value, exc_tb)
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/session.py:1900: in _flush
> flush_context.execute()
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/unitofwork.py:372: in execute
> rec.execute(self)
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/unitofwork.py:525: in execute
> uow
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/persistence.py:44: in save_obj
> uowtransaction)
/home/plq/src/sqlalchemy/lib/sqlalchemy/orm/persistence.py:166: in _organize_states_for_save
> state_str(existing)))
E FlushError: New instance <_SomeClassValues at 0x2202750> with identity key (<class 'spyne.util.sqlalchemy._SomeClassValues'>, (1, u'b')) conflicts with persistent instance <_SomeClassValues at 0x1e0ae90>
------------------------------------------------------------------------------- Captured stdout -------------------------------------------------------------------------------
Table('some_class_values', MetaData(bind=Engine(sqlite:///:memory:)), Column('some_class_id', Integer(), ForeignKey('some_class.id'), table=<some_class_values>), Column('values', UnicodeText(), table=<some_class_values>), schema=None)
2013-05-22 23:35:35,259 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("some_class")
2013-05-22 23:35:35,260 INFO sqlalchemy.engine.base.Engine ()
2013-05-22 23:35:35,260 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("some_class_values")
2013-05-22 23:35:35,260 INFO sqlalchemy.engine.base.Engine ()
2013-05-22 23:35:35,260 INFO sqlalchemy.engine.base.Engine
CREATE TABLE some_class (
id INTEGER NOT NULL,
PRIMARY KEY (id)
)
2013-05-22 23:35:35,260 INFO sqlalchemy.engine.base.Engine ()
2013-05-22 23:35:35,260 INFO sqlalchemy.engine.base.Engine COMMIT
2013-05-22 23:35:35,261 INFO sqlalchemy.engine.base.Engine
CREATE TABLE some_class_values (
some_class_id INTEGER,
"values" TEXT,
FOREIGN KEY(some_class_id) REFERENCES some_class (id)
)
2013-05-22 23:35:35,261 INFO sqlalchemy.engine.base.Engine ()
2013-05-22 23:35:35,261 INFO sqlalchemy.engine.base.Engine COMMIT
1 <symbol 'NEVER_SET>
2013-05-22 23:35:35,265 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2013-05-22 23:35:35,266 INFO sqlalchemy.engine.base.Engine INSERT INTO some_class (id) VALUES (?)
2013-05-22 23:35:35,266 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,267 INFO sqlalchemy.engine.base.Engine INSERT INTO some_class_values (some_class_id, "values") VALUES (?, ?)
2013-05-22 23:35:35,267 INFO sqlalchemy.engine.base.Engine ((1, 'a'), (1, 'b'), (1, 'c'))
2013-05-22 23:35:35,268 INFO sqlalchemy.engine.base.Engine COMMIT
2013-05-22 23:35:35,269 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2013-05-22 23:35:35,269 INFO sqlalchemy.engine.base.Engine SELECT some_class.id AS some_class_id
FROM some_class
WHERE some_class.id = ?
2013-05-22 23:35:35,269 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,270 DEBUG sqlalchemy.engine.base.Engine Col ('some_class_id',)
2013-05-22 23:35:35,270 DEBUG sqlalchemy.engine.base.Engine Row (1,)
2013-05-22 23:35:35,270 INFO sqlalchemy.engine.base.Engine SELECT some_class_values.some_class_id AS some_class_values_some_class_id, some_class_values."values" AS some_class_values_values
FROM some_class_values
WHERE ? = some_class_values.some_class_id
2013-05-22 23:35:35,270 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,271 DEBUG sqlalchemy.engine.base.Engine Col ('some_class_values_some_class_id', 'some_class_values_values')
2013-05-22 23:35:35,271 DEBUG sqlalchemy.engine.base.Engine Row (1, u'a')
2013-05-22 23:35:35,271 DEBUG sqlalchemy.engine.base.Engine Row (1, u'b')
2013-05-22 23:35:35,271 DEBUG sqlalchemy.engine.base.Engine Row (1, u'c')
2013-05-22 23:35:35,272 INFO sqlalchemy.engine.base.Engine SELECT some_class.id AS some_class_id
FROM some_class
WHERE some_class.id = ?
2013-05-22 23:35:35,272 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,272 DEBUG sqlalchemy.engine.base.Engine Col ('some_class_id',)
2013-05-22 23:35:35,272 DEBUG sqlalchemy.engine.base.Engine Row (1,)
2013-05-22 23:35:35,272 INFO sqlalchemy.engine.base.Engine SELECT some_class_values.some_class_id AS some_class_values_some_class_id, some_class_values."values" AS some_class_values_values
FROM some_class_values
WHERE ? = some_class_values.some_class_id
2013-05-22 23:35:35,272 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,273 DEBUG sqlalchemy.engine.base.Engine Col ('some_class_values_some_class_id', 'some_class_values_values')
2013-05-22 23:35:35,273 DEBUG sqlalchemy.engine.base.Engine Row (1, u'a')
2013-05-22 23:35:35,273 DEBUG sqlalchemy.engine.base.Engine Row (1, u'b')
2013-05-22 23:35:35,273 DEBUG sqlalchemy.engine.base.Engine Row (1, u'c')
2013-05-22 23:35:35,274 INFO sqlalchemy.engine.base.Engine INSERT INTO some_class_values (some_class_id, "values") VALUES (?, ?)
2013-05-22 23:35:35,274 INFO sqlalchemy.engine.base.Engine (1, 'd')
2013-05-22 23:35:35,274 INFO sqlalchemy.engine.base.Engine COMMIT
2013-05-22 23:35:35,275 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2013-05-22 23:35:35,275 INFO sqlalchemy.engine.base.Engine SELECT some_class.id AS some_class_id
FROM some_class
WHERE some_class.id = ?
2013-05-22 23:35:35,275 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,275 DEBUG sqlalchemy.engine.base.Engine Col ('some_class_id',)
2013-05-22 23:35:35,275 DEBUG sqlalchemy.engine.base.Engine Row (1,)
2013-05-22 23:35:35,276 INFO sqlalchemy.engine.base.Engine SELECT some_class_values.some_class_id AS some_class_values_some_class_id, some_class_values."values" AS some_class_values_values
FROM some_class_values
WHERE ? = some_class_values.some_class_id
2013-05-22 23:35:35,276 INFO sqlalchemy.engine.base.Engine (1,)
2013-05-22 23:35:35,276 DEBUG sqlalchemy.engine.base.Engine Col ('some_class_values_some_class_id', 'some_class_values_values')
2013-05-22 23:35:35,276 DEBUG sqlalchemy.engine.base.Engine Row (1, u'a')
2013-05-22 23:35:35,276 DEBUG sqlalchemy.engine.base.Engine Row (1, u'b')
2013-05-22 23:35:35,276 DEBUG sqlalchemy.engine.base.Engine Row (1, u'c')
2013-05-22 23:35:35,277 DEBUG sqlalchemy.engine.base.Engine Row (1, u'd')
2013-05-22 23:35:35,278 INFO sqlalchemy.engine.base.Engine ROLLBACK
------------------------------------------------------------------------------- Captured stderr -------------------------------------------------------------------------------
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) _configure_property(some_class_id, Column)
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) _configure_property(values, Column)
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) Identified primary key columns: ColumnSet([Column('some_class_id', Integer(), ForeignKey('some_class.id'), table=<some_class_values>), Column('values', UnicodeText(), table=<some_class_values>)])
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) constructed
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) _configure_property(id, Column)
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) _configure_property(_values, RelationshipProperty)
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) Identified primary key columns: ColumnSet([Column('id', Integer(), table=<some_class>, primary_key=True, nullable=False)])
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) constructed
DEBUG:sqlalchemy.pool.SingletonThreadPool:Created new connection <sqlite3.Connection object at 0x1e04858>
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> checked out from pool
INFO:sqlalchemy.engine.base.Engine:PRAGMA table_info("some_class")
INFO:sqlalchemy.engine.base.Engine:()
INFO:sqlalchemy.engine.base.Engine:PRAGMA table_info("some_class_values")
INFO:sqlalchemy.engine.base.Engine:()
INFO:sqlalchemy.engine.base.Engine:
CREATE TABLE some_class (
id INTEGER NOT NULL,
PRIMARY KEY (id)
)
INFO:sqlalchemy.engine.base.Engine:()
INFO:sqlalchemy.engine.base.Engine:COMMIT
INFO:sqlalchemy.engine.base.Engine:
CREATE TABLE some_class_values (
some_class_id INTEGER,
"values" TEXT,
FOREIGN KEY(some_class_id) REFERENCES some_class (id)
)
INFO:sqlalchemy.engine.base.Engine:()
INFO:sqlalchemy.engine.base.Engine:COMMIT
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> being returned to pool
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) _post_configure_properties() started
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) initialize prop id
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) initialize prop _values
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values setup primary join some_class.id = some_class_values.some_class_id
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values setup secondary join None
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values synchronize pairs [(some_class.id => some_class_values.some_class_id)]
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values secondary synchronize pairs []
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values local/remote pairs [(some_class.id / some_class_values.some_class_id)]
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values remote columns [some_class_values.some_class_id]
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values local columns [some_class.id]
INFO:sqlalchemy.orm.properties.RelationshipProperty:SomeClass._values relationship direction <symbol 'ONETOMANY>
INFO:sqlalchemy.orm.strategies.LazyLoader:SomeClass._values lazy loading clause :param_1 = some_class_values.some_class_id
INFO:sqlalchemy.orm.mapper.Mapper:(SomeClass|some_class) _post_configure_properties() complete
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) _post_configure_properties() started
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) initialize prop some_class_id
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) initialize prop values
INFO:sqlalchemy.orm.mapper.Mapper:(_SomeClassValues|some_class_values) _post_configure_properties() complete
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> checked out from pool
INFO:sqlalchemy.engine.base.Engine:BEGIN (implicit)
INFO:sqlalchemy.engine.base.Engine:INSERT INTO some_class (id) VALUES (?)
INFO:sqlalchemy.engine.base.Engine:(1,)
INFO:sqlalchemy.engine.base.Engine:INSERT INTO some_class_values (some_class_id, "values") VALUES (?, ?)
INFO:sqlalchemy.engine.base.Engine:((1, 'a'), (1, 'b'), (1, 'c'))
INFO:sqlalchemy.engine.base.Engine:COMMIT
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> being returned to pool
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> checked out from pool
INFO:sqlalchemy.engine.base.Engine:BEGIN (implicit)
INFO:sqlalchemy.engine.base.Engine:SELECT some_class.id AS some_class_id
FROM some_class
WHERE some_class.id = ?
INFO:sqlalchemy.engine.base.Engine:(1,)
DEBUG:sqlalchemy.engine.base.Engine:Col ('some_class_id',)
DEBUG:sqlalchemy.engine.base.Engine:Row (1,)
INFO:sqlalchemy.engine.base.Engine:SELECT some_class_values.some_class_id AS some_class_values_some_class_id, some_class_values."values" AS some_class_values_values
FROM some_class_values
WHERE ? = some_class_values.some_class_id
INFO:sqlalchemy.engine.base.Engine:(1,)
DEBUG:sqlalchemy.engine.base.Engine:Col ('some_class_values_some_class_id', 'some_class_values_values')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'a')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'b')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'c')
INFO:sqlalchemy.engine.base.Engine:SELECT some_class.id AS some_class_id
FROM some_class
WHERE some_class.id = ?
INFO:sqlalchemy.engine.base.Engine:(1,)
DEBUG:sqlalchemy.engine.base.Engine:Col ('some_class_id',)
DEBUG:sqlalchemy.engine.base.Engine:Row (1,)
INFO:sqlalchemy.engine.base.Engine:SELECT some_class_values.some_class_id AS some_class_values_some_class_id, some_class_values."values" AS some_class_values_values
FROM some_class_values
WHERE ? = some_class_values.some_class_id
INFO:sqlalchemy.engine.base.Engine:(1,)
DEBUG:sqlalchemy.engine.base.Engine:Col ('some_class_values_some_class_id', 'some_class_values_values')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'a')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'b')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'c')
INFO:sqlalchemy.engine.base.Engine:INSERT INTO some_class_values (some_class_id, "values") VALUES (?, ?)
INFO:sqlalchemy.engine.base.Engine:(1, 'd')
INFO:sqlalchemy.engine.base.Engine:COMMIT
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> being returned to pool
DEBUG:sqlalchemy.pool.SingletonThreadPool:Connection <sqlite3.Connection object at 0x1e04858> checked out from pool
INFO:sqlalchemy.engine.base.Engine:BEGIN (implicit)
INFO:sqlalchemy.engine.base.Engine:SELECT some_class.id AS some_class_id
FROM some_class
WHERE some_class.id = ?
INFO:sqlalchemy.engine.base.Engine:(1,)
DEBUG:sqlalchemy.engine.base.Engine:Col ('some_class_id',)
DEBUG:sqlalchemy.engine.base.Engine:Row (1,)
INFO:sqlalchemy.engine.base.Engine:SELECT some_class_values.some_class_id AS some_class_values_some_class_id, some_class_values."values" AS some_class_values_values
FROM some_class_values
WHERE ? = some_class_values.some_class_id
INFO:sqlalchemy.engine.base.Engine:(1,)
DEBUG:sqlalchemy.engine.base.Engine:Col ('some_class_values_some_class_id', 'some_class_values_values')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'a')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'b')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'c')
DEBUG:sqlalchemy.engine.base.Engine:Row (1, u'd')
INFO:sqlalchemy.engine.base.Engine:ROLLBACK
diff --git a/spyne/util/sqlalchemy.py b/spyne/util/sqlalchemy.py
index ee4b8be..92382bf 100644
--- a/spyne/util/sqlalchemy.py
+++ b/spyne/util/sqlalchemy.py
@@ -601,18 +601,20 @@ def gen_sqla_info(cls, cls_bases=()):
col=child_left_col)
child_t = Table(child_table_name , metadata,
- Column('id', sqlalchemy.Integer, primary_key=True),
child_left_col, child_right_col)
print repr(child_t)
# generate temporary class for association proxy
- cls_name = ''.join(x.capitalize() or '_' for x in child_table_name.split('_'))
+ cls_name = ''.join(x.capitalize() or '_' for x in
+ child_table_name.split('_'))
+ # generates camelcase class name.
def _i(self, *args):
setattr(self, child_right_col_name, args[0])
cls_ = type("_" + cls_name, (object,), {'__init__': _i})
- mapper(cls_, child_t)
+ mapper(cls_, child_t, primary_key=(
+ child_left_col, child_right_col))
props["_" + k] = relationship(cls_)
# generate association proxy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment