[sqlalchemy] Re: SQLAlchemy and unit tests

2009-05-12 Thread Giovanni Marco Dall'Olio

On Tue, May 12, 2009 at 4:54 AM, James rent.lupin.r...@gmail.com wrote:
 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?

For elixir, there is a template that you can use for the test units:
- http://elixir.ematia.de/trac/ticket/80
- http://elixir.ematia.de/trac/wiki/Recipes/Testing

I did propose to do a similar thing for sqlalchemy, but since I mostly
use only elixir, I couldn't volonteer for that.
- http://www.sqlalchemy.org/trac/ticket/1250


-- 
Giovanni Dall'Olio, phd student
Department of Biologia Evolutiva at CEXS-UPF (Barcelona, Spain)

My blog on bioinformatics: http://bioinfoblog.it

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[sqlalchemy] Re: SQLAlchemy and unit tests

2009-05-11 Thread Michael Bayer


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
-~--~~~~--~~--~--~---



[sqlalchemy] Re: SQLAlchemy and unit tests

2009-05-11 Thread James Brady
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
-~--~~~~--~~--~--~---