Last active
December 17, 2015 15:19
-
-
Save plq/5630698 to your computer and use it in GitHub Desktop.
patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ================================================================================== 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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