class UserSurveyModel(db.Model):
    __tablename__ = 'user_survey'

    id = db.Column(db.Integer, primary_key=True)
    created_at = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True), onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    user = db.relationship('UserModel')

    survey_id = db.Column(db.Integer, db.ForeignKey('survey.id'), nullable=False)
    survey = db.relationship('SurveyModel')

    user_scores = db.relationship('UserScoreModel', lazy='dynamic')

    user_answers = db.relationship('UserAnswerModel', lazy='dynamic')


    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_all(cls) -> List["UserSurveyModel"]:
        return cls.query.all()
Exemple #2
0
class UserModel(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)
    person_id = db.Column(db.String(80), nullable=False, unique=True)
    created_at = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True),
                           onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    user_surveys = db.relationship('UserSurveyModel', lazy='dynamic')

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_by_person_id(cls, person_id):
        return cls.query.filter_by(person_id=person_id).first()

    @classmethod
    def find_all(cls) -> List["UserModel"]:
        return cls.query.all()
Exemple #3
0
class Freigabe(db.Model, ModelSupport):
    __tablename__ = 'freigabe'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(250), nullable=False, unique=True)
    Auflagen = db.Column(db.Boolean, default=False, nullable=False)
    Freigabeart = db.Column(db.String(250))
    Auslaufdatum = db.Column(db.DateTime, nullable=False)
    Freigabe_gültig_für_n_Ansätze = db.Column(db.Integer)
    Bemerkung = db.Column(db.String(1000))
    Fertigungsaufträge = db.Column(db.String(500))
    date_created = db.Column(db.DateTime(timezone=True),
                             server_default=func.now())
    last_updated = db.Column(db.DateTime(timezone=True),
                             server_default=func.now(),
                             server_onupdate=func.now())
    last_updated_by = db.Column(db.String(50), nullable=True)

    def __repr__(self):
        return '<Freigabe id:{} text:{}>'.format(self.id, self.Freigabe)

    @staticmethod
    def find_by_id(freigabe_id):
        assert (freigabe_id is not None), "Freigabe id shouldn't be null"
        freigabe = Freigabe.query.get(freigabe_id)
        return freigabe

    @staticmethod
    def delete_by_id(id):
        Freigabe.query.get(id).delete()
        db.session.commit()

    @staticmethod
    def create(freigabe_dict=None, freigabe_obj=None):
        if freigabe_dict:
            try:
                return Freigabe(**freigabe_dict).insert()
            except IntegrityError as e:
                if e.orig.__class__.__name__ == "UniqueViolation":
                    abort(400, message='error.create_user.already_exist')
                else:
                    raise e
        else:
            return freigabe_obj.insert()

    @staticmethod
    def upsert(freigabe_dict):
        freigabe = Freigabe.find_by_id(freigabe_dict['id'])
        if freigabe is not None:
            freigabe.update(freigabe_dict)
            return "update"
        else:
            freigabe_clean_dict = {}
            for key, value in freigabe_dict.items():
                if hasattr(Freigabe, key):
                    freigabe_clean_dict[key] = value
            Freigabe(**freigabe_clean_dict).insert()
            return "insert"
Exemple #4
0
class SurveyModel(db.Model):
    __tablename__ = 'survey'

    id = db.Column(db.Integer, primary_key=True)
    survey_id = db.Column(db.String(80), nullable=False, unique=True)
    title = db.Column(JSON, nullable=False)
    created_at = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True),
                           onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    questions = db.relationship('QuestionModel', lazy='dynamic')

    # user_surveys = db.relationship('UserSurveyModel', lazy='dynamic')

    def surveyjs_json(self):
        return {
            'title':
            self.title,
            'pages': [{
                "name": item.question_id,
                "elements": [item.question],
                "visibleIf": item.visible_if,
                "title": item.page_title
            } for item in self.questions.order_by(QuestionModel.id).all()],
            "showProgressBar":
            "top"
        }

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def find_by_survey_id(cls, survey_id):
        return cls.query.filter_by(survey_id=survey_id).first()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_all(cls) -> List["SurveyModel"]:
        return cls.query.all()
Exemple #5
0
class QuestionModel(db.Model):
    __tablename__ = 'question'

    id = db.Column(db.Integer, primary_key=True)
    question_id = db.Column(db.String(80), nullable=False)
    question = db.Column(JSON, nullable=False)
    page_title = db.Column(JSON)
    visible_if = db.Column(db.String(80))
    reverse_score = db.Column(db.Boolean, default=False)
    scoring_rule_id = db.Column(db.Integer, default=1)
    created_at = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True),
                           onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    survey_id = db.Column(db.Integer,
                          db.ForeignKey('survey.id'),
                          nullable=False)
    survey = db.relationship('SurveyModel')

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def save_to_db_all(self) -> None:
        db.session.bulk_save_objects(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def find_by_question_id(cls, question_id):
        return cls.query.filter_by(question_id=question_id).first()

    @classmethod
    def find_by_question_and_survey(cls, question_id, survey_id):
        return cls.query.filter_by(question_id=question_id).filter_by(
            survey_id=survey_id).first()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_all(cls) -> List["QuestionModel"]:
        return cls.query.all()
class Coupon(db.Model, Base):
    """Model for Udemy course coupon db table."""

    __tablename__ = "coupons"

    id = db.Column(db.Integer, primary_key=True)
    courseId = db.Column(db.Integer, db.ForeignKey("courses.id"))
    code = db.Column(db.String, nullable=False)
    link = db.Column(db.String, nullable=False)
    price = db.Column(db.Numeric(4, 2), nullable=False)
    utcExpirationISO = db.Column(db.DateTime(timezone=True), nullable=False)

    def __init__(
        self,
        code: str,
        link: str,
        utcExpirationISO: str,
        price: float,
        courseId: int = None,
        update_db: bool = True,
    ):
        """Create record and add to db, translating the expiration date to utc."""

        self.courseId = courseId
        self.code = code
        self.utcExpirationISO = dateutil.parser.parse(utcExpirationISO)
        self.price = price
        self.link = link

        if update_db:
            self.update_db()

    def to_dict(self):
        """Return the called upon resource to dictionary format."""
        return {
            "id": self.id,
            "courseId": self.courseId,
            "code": self.code,
            "link": self.link,
            "price": float(self.price),
            "utcExpirationISO": datetime.isoformat(self.utcExpirationISO),
        }

    def is_valid(self) -> bool:
        """Return boolean representing whether the coupon is valid."""

        return self.utcExpirationISO > datetime.now(utc)

    def update(self, updated_data):
        """Update with new data."""

        for key, value in updated_data.items():
            if key == "id":
                continue
            setattr(self, key, value)

    def __repr__(self):
        """Return a pretty print version of the retrieved resource."""
        return f""" < CourseCoupon(id={self.id},
class ScoreTypeModel(db.Model):
    __tablename__ = 'score_type'

    id = db.Column(db.Integer, primary_key=True)
    score_type_id = db.Column(db.String(80), nullable=False, unique=True)
    title = db.Column(db.String(80), nullable=False)
    items = db.Column(db.ARRAY(db.String), nullable=False)
    calculation_rule_id = db.Column(db.Integer, default=1)
    created_at = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True), onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    survey_id = db.Column(db.Integer, db.ForeignKey('survey.id'), nullable=False)
    survey = db.relationship('SurveyModel')

    # score_type = db.relationship('UserScoreModel', lazy='dynamic')


    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def save_to_db_all(self) -> None:
        db.session.bulk_save_objects(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def find_by_score_type_id(cls, score_type_id):
        return cls.query.filter_by(score_type_id=score_type_id).first()

    @classmethod
    def find_by_survey_id(cls, survey_id) -> List["ScoreTypeModel"]:
        return cls.query.filter_by(survey_id=survey_id).all()


    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_all(cls) -> List["ScoreTypeModel"]:
        return cls.query.all()
Exemple #8
0
class Order(db.Model):
    __tablename__ = 'orders'

    id = db.Column(db.Integer, primary_key=True)
    customer_firstname = db.Column(db.String(80))
    customer_lastname = db.Column(db.String(80))
    customer_address = db.Column(db.String(80))
    date = db.Column(db.DateTime(timezone=True), server_default=func.now())
    total = db.Column(db.Float(precision=2))

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    user = db.relationship('User')

    products_ordered = db.relationship('ProductOrdered', lazy='dynamic')

    order_status_id = db.Column(db.Integer, db.ForeignKey('order_status.id'))
    order_status = db.relationship('OrderStatus')

    def __init__(self, customer_firstname, customer_lastname, customer_address,
                 user_id):
        self.customer_firstname = customer_firstname
        self.customer_lastname = customer_lastname
        self.customer_address = customer_address
        self.total = 0
        self.user_id = user_id
        self.order_status_id = 1  # the first state

    @classmethod
    def find_by_id(cls, id):
        return cls.query.filter_by(id=id).first()

    @classmethod
    def get_all(cls):
        return cls.query.order_by(cls.date.desc()).all()

    @classmethod
    def find_by_user_id(cls, user_id):
        return cls.query.filter_by(user_id=user_id).order_by(cls.date.desc())

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self):
        db.session.delete(self)
        db.session.commit()

    def add_product(self, product_id, product_quantity):
        if (self.id == None):
            self.save_to_db()
        self.total += Product.find_by_id(product_id).price * product_quantity
        self.save_to_db()
        ProductOrdered(self.id, product_id, product_quantity).save_to_db()

    def promote_status(self):
        if self.order_status_id < 3:
            self.order_status_id += 1
            self.save_to_db()
Exemple #9
0
class Matstamm(db.Model, ModelSupport):
    __tablename__ = 'materialstamm'
    id = db.Column(db.Integer, primary_key=True)
    turbine_new = db.Column(db.String(250), nullable=False)
    turbine_alt = db.Column(db.String(250), nullable=False)
    stufe = db.Column(db.String(100), nullable=False)
    prozessmatstamm = db.Column(db.String(100), nullable=False, unique=True)
    technologie = db.Column(db.String(250), nullable=False)
    beschichtung = db.Column(db.String(250), nullable=False)
    werkstoff = db.Column(db.String(250), nullable=False)
    date_created = db.Column(db.DateTime(timezone=True),
                             server_default=func.now())
    last_updated = db.Column(db.DateTime(timezone=True),
                             server_default=func.now(),
                             server_onupdate=func.now())

    def __repr__(self):
        return '<Alias id:{} text:{}>'.format(self.id, self.text)

    @staticmethod
    def find_by_aid(mts_id):
        assert (mts_id is not None), "Matstamm id shouldn't be null"
        mts = Matstamm.query.get(mts_id)
        return mts

    @staticmethod
    def create(mts_dict=None, mts_obj=None):
        if mts_dict:
            try:
                return Matstamm(**mts_dict).insert()
            except IntegrityError as e:
                if e.orig.__class__.__name__ == "UniqueViolation":
                    abort(400, message='error.create_alias.already_exist')
                else:
                    raise e
        else:
            return mts_obj.insert()

    @staticmethod
    def delete_by_prozessmatstamm(id):
        Matstamm.query.get(id).delete()
        db.session.commit()
Exemple #10
0
class ShortURL(db.Model):
    __tablename__ = 'urls'
    id = db.Column(db.Integer, primary_key=True)
    origin_url = db.Column(db.String(256), index=True)
    shorten_url = db.Column(db.String(32), unique=True) # 务必建立唯一索引
    created_at = db.Column(db.DateTime())  # start_at_desc
    created_by = db.Column(db.Integer)  # owner
    is_public = db.Column(db.Integer, default=False)  # 是否是公开的网址

    def __repr__(self):
        return "URL origin %s, shorten %s" % (self.origin_url[:16], self.shorten_url)
class UserScoreModel(db.Model):
    __tablename__ = 'user_score'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), default="Unknown Name")
    score = db.Column(db.Float)
    created_at = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True),
                           onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    user_survey_id = db.Column(db.Integer,
                               db.ForeignKey('user_survey.id'),
                               nullable=False)
    user_survey = db.relationship('UserSurveyModel')

    score_type_id = db.Column(db.Integer,
                              db.ForeignKey('score_type.id'),
                              nullable=False)

    # score_type = db.relationship('ScoreTypeModel')

    def save_to_db(self) -> None:
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self) -> None:
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()

    @classmethod
    def find_all(cls) -> List["UserScoreModel"]:
        return cls.query.all()
Exemple #12
0
class AnswerScoreModel(db.Model):
    __tablename__ = 'answer_score'

    id = db.Column(db.Integer, primary_key=True)
    score = db.Column(db.Integer)
    created_at = db.Column(db.DateTime(timezone=True),
                           default=datetime.datetime.utcnow)
    updated_at = db.Column(db.DateTime(timezone=True),
                           onupdate=datetime.datetime.utcnow)
    deleted = db.Column(db.Boolean, default=False)

    user_answer = db.relationship('UserAnswerModel', lazy='dynamic')

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    @classmethod
    def find_by_score(cls, score):
        return cls.query.filter_by(score=score).first()

    @classmethod
    def find_by_id(cls, _id):
        return cls.query.filter_by(id=_id).first()
Exemple #13
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

    def __str__(self):
        return self.email

    def set_password(self, password):
        self.password = encrypt_password(password)
Exemple #14
0
class Users(UserMixin, db.Model):
    """Admin Model
    model for user admin models, user is allowed to add a question to poll
    """

    __tablename__ = "users"
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(30), unique=True, nullable=False)
    admin = db.Column(db.Boolean, nullable=False, default=False)
    mail = db.Column(db.String(40), unique=True, nullable = False)
    password = db.Column(db.String(), nullable=False)
    confirmed = db.Column(db.Boolean(), nullable = False, default=False)
    confimed_on = db.Column(db.DateTime(), default = datetime.now())

    def __repr__(self):
        return f'{self.id}, {self.username}, {self.mail}, {self.password}'
Exemple #15
0
class TftStreamModel(Base):
    """
    Модель таблицы tft_stream.
    Здесь записывается информации о начале стрима.
    """
    __tablename__ = 'tft_stream'
    id = db.Column(db.Integer, primary_key=True)
    start_datetime = db.Column(db.DateTime())
    match_id = db.Column(db.VARCHAR(25))
    user_id = db.Column(db.Integer, db.ForeignKey('tft_user.id'))
    user = db.orm.relationship('TftUserModel', backref='streams')

    @property
    def nickname(self):
        return

    @nickname.setter
    def nickname(self, value):
        user = TftUserModel.query.filter_by(nickname=value).first()
        print(user)
        if user:
            self.user_id = user.id
        else:
            raise DbRecordNotExist
Exemple #16
0
class Case(db.Model, json.Serialisable):
    __tablename__ = 'case'

    id = db.Column(db.Integer, primary_key=True)
    deed_id = db.Column(db.Integer)
    conveyancer_id = db.Column(db.Integer)
    status = db.Column(db.String())
    last_updated = db.Column(db.DateTime())
    created_on = db.Column(db.DateTime())
    case_ref = db.Column(db.String())

    def __init__(self,
                 conveyancer_id,
                 deed_id=None,
                 status='Case created',
                 last_updated=None,
                 created_on=None,
                 case_ref=''):

        if deed_id is not None:
            self.deed_id = deed_id

        self.conveyancer_id = conveyancer_id
        self.status = status
        self.case_ref = case_ref

        if last_updated is not None:
            self.last_updated = last_updated
        else:
            self.last_updated = datetime.now()

        if created_on is not None:
            self.created_on = created_on
        else:
            self.created_on = datetime.now()

    def save(self):
        db.session.add(self)
        db.session.commit()

    @staticmethod
    def all():
        return Case.query.all()

    @staticmethod
    def all_with_borrowers():
        return db.session.query(Case, Borrower).outerjoin(Borrower).all()

    @staticmethod
    def get(id_):
        return Case.query.filter_by(id=id_).first()

    @staticmethod
    def get_by_deed_id(deed_id):
        return Case.query.filter_by(deed_id=deed_id).first()

    @staticmethod
    def delete(id_):
        case = Case.query.filter_by(id=id_).first()

        if case is None:
            return case

        db.session.delete(case)
        db.session.commit()

        return case
Exemple #17
0
class TestModel(db.Model):
    __tablename__ = 'test'
    attr1 = db.Column(db.String(32))
    attr2 = db.Column(db.Integer())
    attr3 = db.Column(db.DateTime()) # 必须DT都大写
Exemple #18
0
class Coupon(db.Model, Base):
    """Model for Udemy course coupon db table."""

    __tablename__ = "coupons"

    id = db.Column(db.Integer, primary_key=True)
    courseId = db.Column(db.Integer, db.ForeignKey("courses.id"))
    link = db.Column(db.String, nullable=False)
    price = db.Column(db.Numeric(4, 2), nullable=False)
    utcExpirationISO = db.Column(db.DateTime(timezone=True), nullable=False)

    def __init__(
        self,
        link: str,
        utcExpirationISO: str,
        price: float,
        courseId: int = None,
        update_db: bool = True,
    ):
        """Create record and add to db, translating the expiration date to utc."""

        self.courseId = courseId
        self.utcExpirationISO = dateutil.parser.parse(utcExpirationISO)
        self.price = price
        self.link = link

        if update_db:
            self.update_db()

    def to_dict(self):
        """Return the called upon resource to dictionary format."""
        return {
            "id": self.id,
            "courseId": self.courseId,
            "link": self.link,
            "price": float(self.price),
            "utcExpirationISO": datetime.isoformat(self.utcExpirationISO),
        }

    def is_valid(self) -> bool:
        """Return boolean representing whether the coupon is valid."""

        return self.utcExpirationISO > datetime.now(utc)

    def update_from_patch(self, json_patch: Dict):
        """Update based on JsonPatch."""

        current_data = self.to_dict()

        # Apply patch to existing dict
        updated_data = jsonpatch.apply_patch(current_data, json_patch)

        # Apply the patched dictionary back to the model
        for key, value in updated_data.items():
            setattr(self, key, value)

        self.update_db()

    def __repr__(self):
        """Return a pretty print version of the retrieved resource."""
        return f""" < CourseCoupon(id={self.id},
Exemple #19
0
class User(db.Model,UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(256), index=True)
    password_hash = db.Column(db.String(256))
    user_type = db.Column(db.Integer) # 用户类型,1表示超级管理员,2表示普通用户
    email = db.Column(db.String(64), unique=True, index=True)
    member_since = db.Column(db.DateTime(), default=datetime.now)
    last_seen = db.Column(db.DateTime(), default=datetime.now)
    confirmed = db.Column(db.Boolean, default=True) # TODO some problems with the sendmail lib or config

    def ping(self):
        self.last_seen = datetime.now()
        db.session.add(self)

    @property
    def password(self):
        raise AttributeError("No password attr")

    @password.setter
    def password(self, pwd):
        self.password_hash = generate_password_hash(pwd)

    def check_password(self,pwd):
        return check_password_hash(self.password_hash, pwd)

    ###
    def generate_confirmation_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'confirm': self.id})

    def confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True

    def generate_reset_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'reset': self.id})

    def reset_password(self, token, new_password):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('reset') != self.id:
            return False
        self.password = new_password
        db.session.add(self)
        return True

    def generate_email_change_token(self, new_email, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'change_email': self.id, 'new_email': new_email})

    def change_email(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return False
        if data.get('change_email') != self.id:
            return False
        new_email = data.get('new_email')
        if new_email is None:
            return False
        if self.query.filter_by(email=new_email).first() is not None:
            return False
        self.email = new_email
        db.session.add(self)
        return True
    ###


    def generate_auth_token(self, expiration):
        s = Serializer(current_app.config['SECRET_KEY'],
                       expires_in=expiration)
        return s.dumps({'id': self.id}).decode('ascii')

    @staticmethod
    def verify_auth_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return None
        return User.query.get(data['id'])