class Party(db.Model): __tablename__ = 'party' # Fields id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String) type = db.Column(db.String) # Relationships rights = db.relationship("Right", back_populates="party") restrictions = db.relationship("Restriction", back_populates="party") responsibilities = db.relationship("Responsibility", back_populates="party") def __init__(self, id, name, type): self.id = id self.name = name self.type = type def __repr__(self): return json.dumps(self.as_dict(), sort_keys=True, seperators=(',', ':')) def as_dict(self): return {"party_id": self.id, "name": self.name, "type": self.type}
class Restriction(db.Model): __tablename__ = 'restriction' # Fields id = db.Column(db.Integer, primary_key=True, autoincrement=True) description = db.Column(db.String) type = db.Column(db.String) ba_unit_id = db.Column(db.Integer, db.ForeignKey('ba_unit.id'), nullable=False) party_id = db.Column(db.Integer, db.ForeignKey('party.id'), nullable=True) start_date = db.Column(db.DateTime, nullable=True) end_date = db.Column(db.DateTime, nullable=True) # Relationships ba_unit = db.relationship("BAUnit", backref=db.backref('restrictions', lazy='dynamic'), uselist=False) party = db.relationship("Party", back_populates="restrictions") def __init__(self, id, ba_unit, description, type, party=None, start_date=None, end_date=None): self.id = id self.ba_unit = ba_unit self.description = description self.type = type self.party = party self.start_date = start_date self.end_date = end_date def __repr__(self): return json.dumps(self.as_dict(), sort_keys=True, seperators=(',', ':')) def as_dict(self): return { "restriction_id": self.id, "description": self.description, "type": self.type, "party": self.party.as_dict() if self.party else None, "start_date": self.start_date.strftime("%d/%m/%Y") if self.start_date else None, "end_date": self.end_date.strftime("%d/%m/%Y") if self.end_date else None }
class PricePaid(db.Model): __tablename__ = 'price_paid' # Fields id = db.Column(db.Integer, primary_key=True, autoincrement=True) spatial_unit_id = db.Column(db.Integer, db.ForeignKey('spatial_unit.id')) amount = db.Column(db.Integer) date = db.Column(db.DateTime) # Relationships spatial_unit = db.relationship("SpatialUnit", backref=db.backref('prices_paid', lazy='dynamic'), uselist=False) def __init__(self, id, spatial_unit, amount, date): self.id = id self.spatial_unit = spatial_unit self.amount = amount self.date = date def __repr__(self): return json.dumps(self.as_dict(), sort_keys=True, seperators=(',', ':')) def as_dict(self): return { "price_paid_id": self.id, "amount": "£{:0,}".format(self.amount), "date": self.date.strftime("%d/%m/%Y") }
class SpatialUnit(db.Model): __tablename__ = 'spatial_unit' # Fields id = db.Column(db.Integer, primary_key=True) address = db.Column(db.String) # Relationships ba_units = db.relationship("BAUnit", secondary="spatial_unit_ba_unit_association", lazy="subquery", backref=db.backref( 'spatial_unit_ba_unit_association', lazy=True)) def __init__(self, id, address): self.id = id self.address = address def __repr__(self): return json.dumps(self.as_dict(), sort_keys=True, seperators=(',', ':')) def as_dict(self, embed=[]): result = { "id": self.id, "address": self.address, "price_paid": [price_paid.as_dict() for price_paid in self.prices_paid], } embeddable_objects = ['ba_units'] for object_name in embeddable_objects: if object_name in embed: result[object_name] = [ item.as_dict(embed=embed) for item in getattr(self, object_name) ] return result