89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
"""
|
|
Models for users.
|
|
|
|
:copyright: Copyright 2013-2017, Dorian Pula <dorian.pula@amber-penguin-software.ca>
|
|
:license: AGPL v3+
|
|
"""
|
|
|
|
import enum
|
|
from werkzeug import security
|
|
|
|
|
|
class UserRole(enum.Enum):
|
|
admin = 1
|
|
editor = 2
|
|
subscriber = 3
|
|
|
|
|
|
class User(object):
|
|
__tablename__ = 'user'
|
|
|
|
# id = db.Column(db.Integer, primary_key=True)
|
|
# username = db.Column(db.String(128), unique=True)
|
|
# password = db.Column(db.String, nullable=False)
|
|
# role = db.Column(db.Enum(UserRole))
|
|
# profile = db.relationship('UserProfile', uselist=False, back_populates='user')
|
|
|
|
def __init__(self, username, role=UserRole.subscriber):
|
|
self.username = username
|
|
self.role = role
|
|
|
|
def __repr__(self) -> str:
|
|
return f'<User {self.username}>'
|
|
|
|
@staticmethod
|
|
def from_json(json_dict: dict):
|
|
username = json_dict['username']
|
|
user = User(username=username)
|
|
|
|
password = json_dict['password']
|
|
user.password = security.generate_password_hash(password)
|
|
|
|
try:
|
|
user_role = UserRole[json_dict.get('role', UserRole.subscriber.name)]
|
|
except ValueError:
|
|
user_role = UserRole.subscriber
|
|
user.role = user_role
|
|
|
|
user_profile = UserProfile.from_json(json_dict.get('profile', {}))
|
|
user_profile.user = user
|
|
user.profile = user_profile
|
|
return user
|
|
|
|
def to_json(self) -> dict:
|
|
return {
|
|
'id': self.id,
|
|
'username': self.username,
|
|
'role': self.role.name,
|
|
'profile': self.profile.to_json(),
|
|
}
|
|
|
|
|
|
class UserProfile(object):
|
|
__tablename__ = 'user_profile'
|
|
|
|
# id = db.Column(db.Integer, primary_key=True)
|
|
# user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
|
|
# user = db.relationship('User')
|
|
# alias_name = db.Column(db.String)
|
|
# full_name = db.Column(db.String)
|
|
# email = db.Column(db_types.EmailType)
|
|
|
|
def __repr__(self) -> str:
|
|
return f'<UserProfile {self.user.username}>'
|
|
|
|
@staticmethod
|
|
def from_json(json_dict: dict):
|
|
user_profile = UserProfile()
|
|
user_profile.alias_name = json_dict.get('aliasName')
|
|
user_profile.full_name = json_dict.get('fullName')
|
|
user_profile.email = json_dict.get('email')
|
|
return user_profile
|
|
|
|
def to_json(self) -> dict:
|
|
return {
|
|
'fullName': self.full_name,
|
|
'aliasName': self.alias_name,
|
|
'email': self.email,
|
|
}
|