class User(UserMixin, db.Model): __table_args__ = (db.UniqueConstraint('login', name='unique_login_cnstr'), ) id = db.Column(db.Integer, primary_key=True) login = db.Column(db.String(150)) password = db.Column(db.String(150)) def __repr__(self): return self.login def set_password(self, password: str): self.password = generate_password_hash(password)
class UserDepartmentRole(db.Model): """ UserDepartmentRole model """ __tablename__ = "user_department_role" id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) department_id = db.Column(db.Integer, db.ForeignKey("department.id"), nullable=False) role_id = db.Column(db.Integer, db.ForeignKey("role.id"), nullable=False) __table_args__ = (db.UniqueConstraint(user_id, department_id, role_id), ) def __init__(self, user, department, role): self.user_id = user.id self.department_id = department.id self.role_id = role.id
class Prereq(db.Model): """ This class defines the course table """ __tablename__ = "prereq" cid = db.Column(db.Integer, db.ForeignKey("course.cid"), primary_key=True) req_id = db.Column(db.Integer, primary_key=True) req_group = db.Column(db.Integer, nullable=False) __table_args__ = (db.UniqueConstraint("cid", "req_id", "req_group", name="unique_prereq"), ) def __init__(self, cid, req_id, req_group): self.cid = cid self.req_id = req_id self.req_group = req_group def save(self): """ Save course to database :return: """ db.session.add(self) db.session.commit() def update(self, cid, req_id, req_group): self.cid = cid self.req_id = req_id self.req_group = req_group self.save() def delete(self): """ Delete a course from db :return: """ db.session.delete(self) db.session.commit()
class SmartMeter(db.Model, SmartMeterService): __tablename__ = 'smart_meters' __table_args__ = (db.UniqueConstraint('meter_name', 'home_id', name='unique_smart_meter'), ) id = db.Column(db.Integer, primary_key=True) meter_name = db.Column(db.String(50), nullable=False) uuid = db.Column(db.String(36), unique=True, index=True) home_id = db.Column(db.Integer, db.ForeignKey('homes.id'), nullable=False) meta_data = db.relationship('ApplianceMetaData', backref='smart_meters', lazy='subquery', cascade="all, delete-orphan") def __init__(self, meter_name): self.meter_name = meter_name self.uuid = str(uuid.uuid4()) def __repr__(self): return f'SmartMeter({self.meter_name}, {self.uuid}, {self.home_id})'
class Store(db.Model): __tablename__ = "stores" id = db.Column(db.Integer, primary_key=True, nullable=False) name = db.Column(db.Text(), nullable=False) postcode = db.Column(db.Text(), nullable=False) longitude = db.Column(db.Float) latitude = db.Column(db.Float) geo = db.Column(Geometry(geometry_type="POINT")) __table_args__ = (db.UniqueConstraint('name', 'postcode', name='_name_postcode_uc'), ) def __repr__(self): return "<City {name} ({lat}, {lon})>".format(name=self.name, lat=self.latitude, lon=self.longitude) def update_geometry(self): point = 'POINT({} {})'.format(self.longitude, self.latitude) self.geo = point
class Home(db.Model, HomeService): __tablename__ = 'homes' __table_args__ = (db.UniqueConstraint('home_name', 'user_id', name='unique_component_commit'), ) id = db.Column(db.Integer, primary_key=True) home_name = db.Column(db.String(50), nullable=False) address = db.Column(db.String(50), nullable=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) uuid = db.Column(db.String(36), unique=True, index=True) smart_meters = db.relationship('SmartMeter', backref='homes', lazy='select', cascade="all, delete-orphan") def __init__(self, home_name, address=None): self.uuid = str(uuid.uuid4()) self.home_name = home_name self.address = address def __repr__(self): return f'Home({self.home_name}, {self.address}, {self.uuid}, {self.user_id})'
def __table_args__(self): return (db.UniqueConstraint("cid", "user_id", name=f"unique_{self.__name__.lower()}"), )