1 from __future__
import unicode_literals
4 from sqlalchemy.ext.declarative
import declared_attr
5 from sqlalchemy.orm
import relationship, synonym
6 from sqlalchemy.schema
import Column, ForeignKey
7 from sqlalchemy.types
import CHAR, DateTime, Integer
14 id = Column(Integer(unsigned=
True), primary_key=
True)
15 token = Column(CHAR(36), nullable=
False, unique=
True, default=
lambda: str(uuid.uuid4()))
16 created_at = Column(DateTime, nullable=
False, default=current_timestamp)
17 expires_at = Column(DateTime, nullable=
False)
22 Integer(unsigned=
True), ForeignKey(
'users.id', ondelete=
'cascade'),
27 return relationship(
'User', lazy=
'joined')
38 return super(Token, cls).
create(user=user, lifetime=lifetime)
42 return cls.query.filter(cls.token==token).first()
58 __tablename__ =
'login_tokens'
59 _user_agent = Column(
'user_agent', CHAR(32), nullable=
False)
72 return self.
user_agent == hashlib.md5(user_agent).hexdigest()
74 user_agent = synonym(
'_user_agent', descriptor=property(_get_user_agent, _set_user_agent))
76 def __init__(self, user, lifetime, user_agent):
77 super(LoginToken, self).
__init__(user, lifetime)
81 def create(cls, user, lifetime, user_agent):
82 return super(Token, cls).
create(user=user, lifetime=lifetime, user_agent=user_agent)
94 __tablename__ =
'password_tokens'
106 __tablename__ =
'invite_tokens'
108 Integer(unsigned=
True), ForeignKey(
'users.id', ondelete=
'cascade'),