Base = declarative_base()
class Artifact_Relation(Base):
__tablename__ = 'artifact_relation'
master_artifact_id = Column(
Integer,
ForeignKey('artifact.id', name='artifact_relation_master_id_fk', ondelete="cascade", onupdate="cascade"), primary_key=True,
nullable=False
)
slave_artifact_id = Column(
Integer,
ForeignKey('artifact.id', name='artifact_relation_slave_id_fk', ondelete="cascade", onupdate="cascade"), primary_key=True,
nullable=False
)
relationship_type = Column(String(24), nullable=False)
slave = relationship("Artifact", back_populates="masters", foreign_keys=[slave_artifact_id])
master = relationship("Artifact", back_populates="slaves", foreign_keys=[master_artifact_id])
class Artifact(Base):
"Artifact"
__tablename__ = 'artifact'
id = Column('id', Integer, primary_key=True)
artifact_type = Column('artifact_type', String(16), nullable=False)
__mapper_args__ = {
'polymorphic_on': artifact_type
}
artifact_references = relationship(
'Artifact_Reference',
back_populates='artifact',
cascade="all, delete-orphan",
passive_deletes=True
)
slaves = relationship("Artifact_Relation", back_populates="master")
masters = relationship("Artifact_Relation", back_populates="slave")
class Artifact_Reference(Base):
"""Artifact_Reference"""
__tablename__ = 'artifact_reference'
id = Column('id', Integer, primary_key=True)
type = Column('type', String(24), nullable=False)
artifact_id = Column('artifact_id', Integer, ForeignKey(Artifact.id, name="artifact_reference_artifact_id_fk", ondelete="cascade", onupdate="cascade"), nullable=False)
reference = Column('reference', String(64), nullable=False)
artifact = relationship(
Artifact,
back_populates='artifact_references'
)
Index('reference_idx', reference, unique=False)