the issue here is that your inheritance and your related table are both to the same table, i.e. 'foo'. the logic that is breaking is where it tries to determine "which property must be synchronized between parent and child object, or between parent, child, and association table", since honestly i never anticipated that the same table would be represented in two different but related mappers in quite that way.

i am sure i'll come up with a patch for this one but i wonder if people will still be coming up with these wacky scenarios a year from now....

On Feb 25, 2006, at 6:37 PM, Florian Boesch wrote:

I require that kind of thing, so I've assembled a little testcode to demonstrate
the problems.

Below is the vanilla many to many thing that doesn't error upon defintion (with
one minor glitch at the mapper, see #comments)

from sqlalchemy import *
from sqlalchemy.ext.proxy import ProxyEngine
engine = ProxyEngine()

foo = Table('foo', engine,
    Column('id', Integer, primary_key=True))

bar = Table('bar', engine,
    Column('id', Integer, primary_key=True))

foo_bar = Table('foo_bar', engine,
    Column('foo_id', Integer, ForeignKey('foo.id')),
    Column('bar_id', Integer, ForeignKey('bar.id')))

class Foo(object): pass
Foo.mapper = mapper(Foo, foo)
class Bar(object): pass
Bar.mapper = mapper(Bar, bar)

# Bar.mapper.add_property('foos', relation(Foo, foo_bar))
# ==> sqlalchemy.exceptions.ArgumentError: relation(class, table, **kwargs) is # deprecated. Please use relation(class, **kwargs) or relation (mapper,
**kwargs).

Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar))


Now when I throw in inheritance as in

bar = Table('bar', engine,
    Column('id', Integer, ForeignKey('foo.id'), primary_key=True))
Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper)

and then try to
Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar))

I get:
Traceback (most recent call last):
  File "testalchemy.py", line 23, in ?
    Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar))
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/mapping/mapper.py",
line 195, in add_property
    prop.init(key, self)
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/mapping/mapper.py",
line 777, in init
    self.do_init(key, parent)
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/mapping/properties.py",
line 191, in do_init
    self._compile_synchronizers()
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/mapping/properties.py",
line 583, in _compile_synchronizers
    self.primaryjoin.accept_visitor(processor)
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/sql.py",
line 749, in accept_visitor
    c.accept_visitor(visitor)
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/sql.py",
line 819, in accept_visitor
    visitor.visit_binary(self)
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/mapping/properties.py",
line 969, in visit_binary
    self.func(binary)
  File
"/usr/local/lib/python2.4/site-packages/SQLAlchemy-0.1.2-py2.4.egg/ sqlalchemy/mapping/properties.py",
line 575, in compile
    raise AssertionError("assert failed")
sqlalchemy.exceptions.AssertionError: assert failed

(a sidenote, assert failed isn't a very clever assert line :D)

----- End forwarded message -----




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel? cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users



-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to