Perfect, thanks Michael - I'll pass this on to the TG list

2009/5/11 Michael Bayer <mike...@zzzcomputing.com>

>
>
> clear out the session (or make a new one) between tests.   while the
> session attempts to weak reference its contents, it usually ends up
> holding onto a lot of stuff due to a particular reference cycle
> created by backrefs (I'm thinking of ways to eliminate that behavior).
>
>
> On May 11, 2009, at 10:54 PM, James wrote:
>
> >
> > Hi all,
> > I'm trying to track down an error where running a full TurboGears unit
> > test suite fails with a SQLAlchemy error, while running the single
> > (failing) unit test passes OK.
> >
> > The SA error is of the form:
> > FlushError: New instance terms...@0x2b15590 with identity key (<class
> > 'yel.model.select_source.TermSite'>, (1, 1), None) conflicts with
> > persistent instance terms...@0x2b8ad50
> >
> > TermSite is an association table for a many-to-many relationship,
> > which has a multi-column primary key:
> > term_site_table = Table('term_site', metadata,
> >    Column('term_id', Integer, ForeignKey("term.id",
> > ondelete="CASCADE"), primary_key=True),
> >    Column('site_id', Integer, ForeignKey("site.id",
> > ondelete="CASCADE"), primary_key=True),
> >    Column('weight', Integer, default=1, nullable=False),
> > )
> >
> > The error seems to signify that SA thinks there is already an object
> > waiting to be flushed with the same term_id and site_id. The fact that
> > the test only fails when a full test suite is run implies that there
> > is some state left over in between unit test executions.
> >
> > Abbreviated setUp and tearDown methods:
> >    def setUp(self):
> >        cherrypy.root = root.Root()
> >        turbogears.startup.startTurboGears()
> >        metadata.create_all()
> >    def tearDown(self):
> >        metadata.drop_all()
> >        turbogears.startup.stopTurboGears()
> >
> > TurboGears provides a sqlalchemy_cleanup method (here:
> > http://svn.turbogears.org/branches/1.0/turbogears/testutil.py), but
> > that seemed to be too aggressive, producing errors of the form:
> > InvalidRequestError: Class 'Visit' entity name 'None' has no mapper
> > associated with it
> >
> > So:
> > - what is the recommended database initialisation / cleanup strategy
> > for unit tests involving SA?
> > - can anyone suggest how ORM state could be hanging around between
> > unit tests (I'm using an in-memory DB)?
> > - is there a convenient way to check on objects in the ORM, waiting to
> > be flushed?
> >
> > This is SA 0.4.3 and TG 1.0.8 running against an in-memory sqlite DB
> >
> > Thanks!
> > James
> >
> > (Cross-posted to TG list)
> > >
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to