2018-04-27 17:16:43 +00:00
|
|
|
from uuid import uuid4
|
|
|
|
|
2018-08-03 16:15:08 +00:00
|
|
|
from flask import current_app as app
|
|
|
|
from sqlalchemy import Column
|
2018-04-27 17:16:43 +00:00
|
|
|
from sqlalchemy.dialects.postgresql import UUID
|
2018-08-03 16:15:08 +00:00
|
|
|
from sqlalchemy_utils import EmailType, PasswordType
|
2018-04-27 17:16:43 +00:00
|
|
|
|
2018-08-03 16:15:08 +00:00
|
|
|
from ereuse_devicehub.resources.models import STR_SIZE, Thing
|
2018-04-27 17:16:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
class User(Thing):
|
|
|
|
__table_args__ = {'schema': 'common'}
|
|
|
|
id = Column(UUID(as_uuid=True), default=uuid4, primary_key=True)
|
|
|
|
email = Column(EmailType, nullable=False, unique=True)
|
|
|
|
password = Column(PasswordType(max_length=STR_SIZE,
|
|
|
|
onload=lambda **kwargs: dict(
|
2018-05-30 10:49:40 +00:00
|
|
|
schemes=app.config['PASSWORD_SCHEMES'],
|
2018-04-27 17:16:43 +00:00
|
|
|
**kwargs
|
|
|
|
)))
|
|
|
|
"""
|
|
|
|
Password field.
|
|
|
|
From `here <https://sqlalchemy-utils.readthedocs.io/en/latest/
|
|
|
|
data_types.html#module-sqlalchemy_utils.types.password>`_
|
|
|
|
"""
|
|
|
|
token = Column(UUID(as_uuid=True), default=uuid4, unique=True)
|
2018-05-13 13:13:12 +00:00
|
|
|
|
|
|
|
def __repr__(self) -> str:
|
2018-08-03 16:15:08 +00:00
|
|
|
return '<User {0.email}>'.format(self)
|
2018-05-30 10:49:40 +00:00
|
|
|
|
2018-08-03 16:15:08 +00:00
|
|
|
@property
|
|
|
|
def individual(self):
|
|
|
|
"""The individual associated for this database, or None."""
|
|
|
|
return next(iter(self.individuals), None)
|