""" Project: PARTS Website Author: Edward Middleton-Smith Precision And Research Technology Systems Limited Technology: Business Objects Feature: User Business Object """ # internal from business_objects.base import Base from business_objects.db_base import SQLAlchemy_ABC import lib.argument_validation as av from forms.forms import Form_Contact from extensions import db from helpers.helper_app import Helper_App # external from dataclasses import dataclass from typing import ClassVar class User(SQLAlchemy_ABC, Base): NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.ATTR_ID_USER NAME_ATTR_OPTION_TEXT: ClassVar[str] = 'email' __tablename__ = 'PH_User' __table_args__ = { 'extend_existing': True } id_user = db.Column(db.Integer, primary_key=True) id_user_auth0 = db.Column(db.String(255)) firstname = db.Column(db.String(255)) surname = db.Column(db.String(255)) email = db.Column(db.String(255)) is_email_verified = db.Column(db.Boolean) is_super_user = db.Column(db.Boolean) is_new = db.Column(db.Boolean) def __init__(self): self.id_user = 0 self.is_new = False super().__init__() def from_DB_user(query_row): _m = 'User.from_DB_user' user = User() user.id_user = query_row[0] user.id_user_auth0 = query_row[1] user.firstname = query_row[2] user.surname = query_row[3] user.email = query_row[4] user.is_email_verified = av.input_bool(query_row[5], 'is_email_verified', _m) user.is_super_user = av.input_bool(query_row[9], 'is_super_user', _m) user.is_new = av.input_bool(query_row[12], 'is_new', _m) return user @staticmethod def from_json(json): _m = 'User.from_json' user = User() if json is None: return user Helper_App.console_log(f'{_m}\njson: {json}') user.id_user = json['id_user'] user.id_user_auth0 = json['id_user_auth0'] user.firstname = json['firstname'] user.surname = json['surname'] user.email = json['email'] user.is_email_verified = av.input_bool(json['is_email_verified'], 'is_email_verified', _m) user.is_super_user = av.input_bool(json['is_super_user'], 'is_super_user', _m) Helper_App.console_log(f'user: {user}') return user @staticmethod def from_json_auth0(json): _m = 'User.from_json_auth0' user = User() if json is None: return user Helper_App.console_log(f'{_m}\njson: {json}') user_info = json['userinfo'] user.id_user = None user.id_user_auth0 = user_info['sub'] user.firstname = None user.surname = None user.email = user_info['email'] user.is_email_verified = av.input_bool(user_info['email_verified'], 'is_email_verified', _m) user.is_super_user = None Helper_App.console_log(f'user: {user}') return user def to_json(self): as_json = { 'id_user': self.id_user, 'id_user_auth0': self.id_user_auth0, 'firstname': self.firstname, 'surname': self.surname, 'email': self.email, 'is_email_verified': self.is_email_verified, 'is_super_user': self.is_super_user } Helper_App.console_log(f'as_json: {as_json}') return as_json def __repr__(self): return f''' id_user: {self.id_user} id_user_auth0: {self.id_user_auth0} firstname: {self.firstname} surname: {self.surname} email: {self.email} is_email_verified: {self.is_email_verified} is_super_user: {self.is_super_user} ''' def get_is_logged_in(self): return (self.id_user > 0 and self.id_user != Base.ID_USER_GUEST) class User_Temp(db.Model, Base): __tablename__ = 'Shop_User_Temp' __table_args__ = { 'extend_existing': True } id_user = db.Column(db.Integer, primary_key=True) id_user_auth0 = db.Column(db.String(255)) firstname = db.Column(db.String(255)) surname = db.Column(db.String(255)) email = db.Column(db.String(255)) is_email_verified = db.Column(db.Boolean) is_super_user = db.Column(db.Boolean) id_currency_default = db.Column(db.Integer) id_region_default = db.Column(db.Integer) is_included_VAT_default = db.Column(db.Boolean) # is_logged_in: bool def __init__(self): self.id_user = 0 super().__init__()