from hashlib import md5 from flask_sqlalchemy import SQLAlchemy from flask_login import UserMixin from werkzeug.security import generate_password_hash, check_password_hash db = SQLAlchemy() class User(UserMixin, db.Model): __tablename__ = "user" id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True) admin = db.Column(db.Boolean, default=False) password_hash = db.Column(db.String(128)) benchmark_id = db.Column(db.Integer, db.ForeignKey("benchmark.id")) benchmark = db.relationship("Benchmark") def __repr__(self): return "".format(self.username, self.email) def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) def avatar(self, size): digest = md5(self.email.lower().encode("utf-8")).hexdigest() return "https://www.gravatar.com/avatar/{}?d=identicon&s={}".format( digest, size ) class Benchmark(db.Model): __tablename__ = "benchmark" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), index=True, unique=True) description = db.Column(db.String(120), index=False, unique=False) folder = db.Column(db.String(128), index=False, unique=True)