Hi, Allen!
You can use something like this (yeah, I know that it isn't
declarative in any way):
class Node(Base):
__tablename__ = 'node'
id = Column(Integer, primary_key=True)
parent_id = Column(ForeignKey('
node.id'))
parent = relation("Node", remote_side=[id])
mp_path = Column(sqlamp.PathField())
mp_depth = Column(sqlamp.DepthField())
mp_tree_id = Column(sqlamp.TreeIdField())
Node.mp = sqlamp.MPManager(
Node.__table__,
pk_field='id',
parent_id_field='parent_id',
path_field_name='mp_path',
depth_field_name='mp_depth',
tree_id_field_name='mp_tree_id'
)
Node.__mapper__.extension.append(Node.mp.mapper_extension)
Note that you need to define mp_* colums. You doesn't need it if you
create MPManager *before* creating mapper.
On the other hand you can use this hack (but I wouldn't recomend it):
class Node(Base):
__tablename__ = 'node'
id = Column(Integer, primary_key=True)
parent_id = Column(ForeignKey('
node.id'))
parent = relation("Node", remote_side=[id])
Node.mp = sqlamp.MPManager(
Node.__table__,
pk_field='id',
parent_id_field='parent_id'
)
Node.__mapper__.extension.append(Node.mp.mapper_extension)
Node.__mapper__._configure_properties()
allen.fowler: