The problem is that in your second test, you have instances left over
in memory from the first test. Even though the tables themselves were
dropped/recreated, the session was not.
You should add:
objectstore.clear()
to your teardown method.
PS: do not copy too much on our unit tests, they are often broken.
They test what they are meant to test but are not side-effect free (ie
they don't leave the system as it was before the test). This should be
corrected but well...
On 4/5/07, André Felipe Dias <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I was testing and this error came up: FlushError: New instance
> [EMAIL PROTECTED] with identity key (<class 'test_error.Telephone'>,
> (6666, 2), None) conflicts with persistent instance [EMAIL PROTECTED]
>
> It wasn't supposed to occur since the setup and teardown methods are
> quite similar to
> http://elixir.ematia.de/svn/elixir/trunk/tests/test_order_by.py
>
> I reduced the script as much as I could:
>
> # -*- coding: utf-8 -*-
>
> from elixir import *
> from sqlalchemy import *
>
> class Person(Entity):
> has_field('name', Unicode(80), nullable = False, unique = True)
> using_options(tablename = 'Person')
> has_many('Telephones', of_kind = 'Telephone', inverse =
> 'responsable')
>
> class Telephone(Entity):
> has_field('number', Numeric(12, 0), primary_key = True)
> using_options(tablename = 'Telephone')
> belongs_to('responsable', of_kind = 'Person',
> inverse = 'Telephones', colname = 'id_person_resp',
> column_kwargs = dict(primary_key = True))
>
> class Test_Model(object):
> def setup(self):
> engine = create_engine('sqlite:///')
> metadata.connect(engine)
> #metadata.engine.echo = True
> create_all()
>
> p1 = Person(name = 'André')
> p2 = Person(name = 'Marcos')
>
> Telephone(number = 1234, responsable = p1)
> Telephone(number = 4321, responsable = p1)
> Telephone(number = 6666, responsable = p2)
>
> objectstore.flush()
> objectstore.clear()
>
> def teardown(self):
> drop_all()
>
> def test_responsable(self):
> p1 = Person.get_by(name = 'André')
>
> t = Telephone.get_by(number = 1234)
> assert t.responsable is p1
>
> t = Telephone.get_by(number = 4321)
> assert t.responsable is p1
>
> t = Telephone.get_by(number = 6666)
> assert not t.responsable is p1
>
> def test_x(self):
> assert True
>
>
> The nosetests result is as following:
>
> $ nosetests test_error.py
> .E
> ======================================================================
> ERROR: test_error.Test_Model.test_x
> ----------------------------------------------------------------------
> Traceback (most recent call last):
> File
> "/usr/lib/python2.4/site-packages/nose-0.9.0-py2.4.egg/nose/case.py",
> line 126, in setUp
> try_run(self.testInstance, names)
> File
> "/usr/lib/python2.4/site-packages/nose-0.9.0-py2.4.egg/nose/util.py",
> line 168, in try_run
> return func()
> File "/home/andref/projetos/jeronimo/test_error.py", line 32, in setup
> objectstore.flush()
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line 294,
> in flush
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 213, in flush
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 368, in execute
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 535, in execute
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 941, in execute
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 963, in execute_save_steps
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 989, in execute_childtasks
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 941, in execute
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 958, in execute_save_steps
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 946, in save_objects
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
> 523, in _save_objects
> File "build/bdist.linux-i686/egg/sqlalchemy/orm/mapper.py", line 1054,
> in save_obj
> FlushError: New instance [EMAIL PROTECTED] with identity key (<class
> 'test_error.Telephone'>, (6666, 2), None) conflicts with persistent
> instance [EMAIL PROTECTED]
>
> ----------------------------------------------------------------------
> Ran 2 tests in 0.367s
>
> FAILED (errors=1)
>
>
> Any help?
>
> >
>
--
Gaëtan de Menten
http://openhex.org
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"SQLElixir" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlelixir?hl=en
-~----------~----~----~----~------~----~------~--~---