class Pin(SurrogatePK, Model): """A pin in the map, a reference address to be used when calculating distances.""" __tablename__ = 'pin' name = Column(db.String()) address = Column(db.String()) def __repr__(self): """Represent the object as a unique string.""" return '<Pin({}, {})>'.format(self.name, self.address)
class Apartment(SurrogatePK, Model): """A home (apartment, flat, etc.).""" __tablename__ = 'apartment' url = Column(db.String(), unique=True, nullable=False) active = Column(db.Boolean, default=True, nullable=False) title = Column(db.String()) address = Column(db.String()) neighborhood = Column(db.String()) rooms = Column(db.Numeric(3, 1)) size = Column(db.Numeric(7, 2)) # Prices cold_rent_price = Column(db.Numeric(10, 2)) warm_rent_price = Column(db.Numeric(10, 2)) additional_price = Column(db.Numeric(10, 2)) heating_price = Column(db.Numeric(10, 2)) opinion_id = reference_column('opinion', True) opinion = relationship('Opinion') description = Column(db.String()) equipment = Column(db.String()) location = Column(db.String()) other = Column(db.String()) availability = Column(db.Date) comments = Column(db.String()) json = db.Column(postgresql.JSONB(none_as_null=True), nullable=False) errors = db.Column(postgresql.JSONB(none_as_null=True)) created_at = Column(db.DateTime, default=func.now()) updated_at = Column(db.DateTime, onupdate=func.now(), default=func.now()) distances = relationship('Distance') def __repr__(self): """Represent the object as a unique string.""" return '<Apartment({}: {} {})>'.format( self.id, self.url, self.opinion.title if self.opinion else '') @classmethod def get_or_create(cls, url: str): """Get an apartment by its URL (which should be unique). :return: An existing apartment or a new empty instance. :rtype: Apartment """ return cls.query.filter_by(url=url).first() or Apartment()
class Opinion(SurrogatePK, Model): """An opinion about an apartment.""" __tablename__ = 'opinion' title = Column(db.String())