class Active(Base, db.Model): __table_args__ = (db.UniqueConstraint('assessment_id', 'name'), ) __serialization__ = [ AttributeConfiguration(name='name', csv_sequence=1, **supported_serialization), AttributeConfiguration(name='uris', **supported_serialization), ] id = db.Column(db.Integer, primary_key=True) assessment_id = db.Column(db.Integer, db.ForeignKey('assessment.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False) assessment = db.relationship(Assessment, uselist=False) name = db.Column(db.String(128)) active_resources = db.relationship('AffectedResource', back_populates='active') @property def uris(self): for resource in self.active_resources: yield resource.uri
class AffectedResource(Base, db.Model): __table_args__ = (db.UniqueConstraint('active_id', 'route'), ) __serialization__ = [ AttributeConfiguration(name='uri', csv_sequence=1, **supported_serialization), ] id = db.Column(db.Integer, primary_key=True) active_id = db.Column(db.Integer, db.ForeignKey('active.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False) active = db.relationship(Active, uselist=False, back_populates='active_resources') route = db.Column(db.String(256)) findings = db.relationship('Finding', secondary=finding_affected_resource) @property def uri(self): return "{}{}".format(self.active.name, self.route or '') def delete_last_reference(self): if len(self.findings) == 1: if len(self.active.active_resources ) == 1 and self.active.active_resources[0] is self: self.active.delete() else: self.delete()
class AffectedResource(Base, db.Model): __table_args__ = (db.UniqueConstraint('active_id', 'route'), ) id = db.Column(db.Integer, primary_key=True) active_id = db.Column(db.Integer, db.ForeignKey('active.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=False) active = db.relationship(Active, uselist=False, back_populates='active_resources') route = db.Column(db.String(256)) findings = db.relationship('Finding', secondary=finding_affected_resource) @property def uri(self): return "{}{}".format(self.active.name, self.route or '')