Hi, I am having a problem with declarative and inheritance from a class which has the same name, but different namespace (module):
=======================================> names.py <==
# Fails with Python-2.7.1 and SQLAlchemy-0.7.1
#
import sqlalchemy
import sqlalchemy.ext.declarative
Base = sqlalchemy.ext.declarative.declarative_base()
engine = sqlalchemy.create_engine('sqlite:///:memory:', echo = False)
session = sqlalchemy.orm.scoped_session(
sqlalchemy.orm.sessionmaker(
bind = engine,
autocommit = False
)
)
Base.metadata.bind = engine
class SomeObj(Base):
__tablename__ = "someobj"
Id = sqlalchemy.Column( sqlalchemy.types.Integer, primary_key=True,
autoincrement=True)
objType = sqlalchemy.Column(sqlalchemy.types.String(128), index =
True, nullable = False)
__mapper_args__ = {
'polymorphic_identity': __tablename__,
'polymorphic_on': objType
}
import bar
=======================================> foo.py <==
import sqlalchemy
import names
class Foo(names.SomeObj):
__tablename__ = 'foo_foo'
Id = sqlalchemy.Column(
sqlalchemy.types.Integer(),
sqlalchemy.schema.ForeignKey(names.SomeObj.Id),
primary_key = True
)
mapper_args = {
'inherit_condition': Id == names.SomeObj.Id,
'polymorphic_identity': __tablename__,
}
=======================================> bar.py <==
import sqlalchemy
import foo
class Foo(foo.Foo):
__tablename__ = 'bar_foo'
Id = sqlalchemy.Column(
sqlalchemy.types.Integer(),
sqlalchemy.schema.ForeignKey(foo.Foo.Id),
primary_key = True
)
mapper_args = {
'inherit_condition': Id == foo.Foo.Id,
'polymorphic_identity': __tablename__,
}
=====================================
After running names.py I get:
=====================================
/home/filip/tefnet/teferp/workspace/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/ext/declarative.py:1129:
SAWarning: The classname 'Foo' is already in the registry of this declarative
base, mapped to <class 'foo.Foo'>
_as_declarative(cls, classname, cls.__dict__)
Traceback (most recent call last):
File "names.py", line 29, in <module>
import bar
File "/home/filip/tefnet/teferp/bugs/names/bar.py", line 4, in
<module>
class Foo(foo.Foo):
File
"/home/filip/tefnet/teferp/workspace/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/ext/declarative.py",
line 1129, in __init__
_as_declarative(cls, classname, cls.__dict__)
File
"/home/filip/tefnet/teferp/workspace/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/ext/declarative.py",
line 1059, in _as_declarative
compile=False)
File
"/home/filip/tefnet/teferp/workspace/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/orm/util.py",
line 546, in class_mapper
raise exc.UnmappedClassError(class_)
sqlalchemy.orm.exc.UnmappedClassError: Class 'bar.Foo' is not mapped
=====================================
despite separate namespaces.
Is there some way I could make the mapper aware of namespaces?
PS. Zzzeek - thanks for sorting out the count() thing before :).
regards,
Filip Zyzniewski
Tefnet
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" 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/sqlalchemy?hl=en.
names.tbz2
Description: application/bzip-compressed-tar
