class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) project_id = db.Column(db.Integer, index=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255), default=lambda: ''.join(random.choice(string.ascii_lowercase) for _ in range(20))) first_name = db.Column(db.String(255)) last_name = db.Column(db.String(255)) current_portal_user_yn = db.Column(db.Boolean) gv_end_del_log = db.Column(db.Date) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) last_login_at = db.Column(db.DateTime()) current_login_at = db.Column(db.DateTime()) last_login_ip = db.Column(db.String(50)) current_login_ip = db.Column(db.String(50)) login_count = db.Column(db.Integer()) is_imported = db.Column(db.Boolean(), default=False) roles = db.relationship( 'Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'), collection_class=set, ) practices = db.relationship( 'Practice', secondary=practices_users, backref=db.backref('users', lazy='dynamic'), collection_class=set, ) practice_groups = db.relationship( 'PracticeGroup', secondary=practice_groups_users, backref=db.backref('users', lazy='dynamic'), collection_class=set, ) last_update_timestamp = db.Column(db.Integer, nullable=True) def get_id(self): return self.email @property def is_super(self): return self.is_admin or len(self.practice_groups) > 0 @property def is_admin(self): return self.has_role(Role.ADMIN_ROLENAME) @property def is_system(self): return self.email == '*****@*****.**' @property def all_practices(self): return set(self.practices) | set(chain.from_iterable(pg.practices for pg in self.practice_groups)) @property def full_name(self): return '{} {}'.format(self.first_name or '', self.last_name or '').strip() or self.email
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(40), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) image_file = db.Column(db.String(20), nullable=False, default='default.jpg') firstname = db.Column(db.String(40)) lastname = db.Column(db.String(40)) country = db.Column(db.String(40)) designation = db.Column(db.String(40)) password = db.Column(db.String(60), nullable=False) last_seen = db.Column(db.DateTime, default=datetime.utcnow) is_admin = db.Column(db.Boolean, default=False) is_employer = db.Column(db.Boolean, default=False) is_candidate = db.Column(db.Boolean, default=False) is_active = db.Column(db.Boolean, default=False) posts = db.relationship('Post', backref='author', lazy=True) offer = db.relationship('jobs', backref='employer', lazy='dynamic') company = db.relationship('company', backref='company', lazy='dynamic') following = db.relationship('User', secondary=followers, primaryjoin=(followers.c.follower_id == id), secondaryjoin=(followers.c.followee_id == id), backref=db.backref('followers', lazy='dynamic'), lazy='dynamic') followed_by = db.relationship( 'User', secondary=followers, primaryjoin=(followers.c.followee_id == id), secondaryjoin=(followers.c.follower_id == id), backref=db.backref('followees', lazy='dynamic'), lazy='dynamic') def get_reset_token(self, expires_sec=1800): s = Serializer(app.config['SECRET_KEY'], expires_sec) return s.dumps({'user_id': self.id}).decode('utf-8') @staticmethod def verify_reset_token(token): s = Serializer(app.config['SECRET_KEY']) try: user_id = s.loads(token)['user_id'] except: return None return User.query.get(user_id) def __repr__(self): return f"User('{self.username}', '{self.email}', '{self.image_file}')"
class Recruit(db.Model): id = db.Column(db.String(50), primary_key=True) practice_registration_id = db.Column( db.Integer, db.ForeignKey(PracticeRegistration.id)) practice_registration = db.relationship( PracticeRegistration, backref=db.backref('recruits', cascade="all, delete-orphan")) user_id = db.Column(db.Integer, db.ForeignKey(User.id)) user = db.relationship( User, backref=db.backref('recruits', cascade="all, delete-orphan")) nhs_number = db.Column(db.String(20), nullable=False) date_of_birth = db.Column(db.Date, nullable=False) date_recruited = db.Column(db.Date, nullable=False) date_created = db.Column(db.DateTime, nullable=False) status = db.relationship( "RecruitStatus", uselist=False, back_populates="recruit") def __init__(self, *args, **kwargs): self.practice_registration_id = kwargs.get('practice_registration').id self.user_id = kwargs.get('user').id self.nhs_number = kwargs.get('nhs_number') self.date_of_birth = kwargs.get('date_of_birth') self.date_recruited = kwargs.get('date_recruited') self.date_created = datetime.datetime.now() self.id = uuid.uuid1() @property def date_of_birth_day(self): return self.date_of_birth.day @property def date_of_birth_month(self): return self.date_of_birth.month @property def date_of_birth_year(self): return self.date_of_birth.year
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) first_name = db.Column(db.String(255)) last_name = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) last_login_at = db.Column(db.DateTime()) current_login_at = db.Column(db.DateTime()) last_login_ip = db.Column(db.String(50)) current_login_ip = db.Column(db.String(50)) login_count = db.Column(db.Integer()) roles = db.relationship( 'Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) practices = db.relationship( 'PracticeRegistration', secondary=practice_registrations_users, backref=db.backref('users', lazy='dynamic')) def __init__(self, *args, **kwargs): self.email = kwargs.get('email') self.password = kwargs.get('password') self.first_name = kwargs.get('first_name') self.last_name = kwargs.get('last_name') self.active = 0 def is_admin(self): return self.has_role(Role.ADMIN_ROLENAME) def is_system(self): return self.email == '*****@*****.**' @property def full_name(self): return '{} {}'.format(self.first_name or '', self.last_name or '')
class Comments(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=False) email = db.Column(db.String(120)) website = db.Column(db.String(255)) comment = db.Column(db.Text, nullable=False) reply_id = db.Column(db.Integer, db.ForeignKey('comments.id')) date_comment = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) publish = db.Column(db.Boolean()) post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False) children = db.relationship('Comments', backref=db.backref('reply', remote_side=[id])) def avatar(self, size): digest = md5(self.email.lower().encode('utf-8')).hexdigest() return f'https://www.gravatar.com/avatar/{digest}?d=identicon&s={size}' def __repr__(self): return "Comments('{self.comment}', '{self.date_comment}')"
class StaffMember(db.Model): id = db.Column(db.Integer, primary_key=True) practice_registration_id = db.Column( db.Integer, db.ForeignKey(PracticeRegistration.id)) first_name = db.Column(db.String, nullable=False) last_name = db.Column(db.String, nullable=False) date_created = db.Column(db.DateTime, nullable=False) practice_registration = db.relationship( PracticeRegistration, backref=db.backref('staff', cascade="all, delete-orphan")) def __init__(self, *args, **kwargs): self.practice_registration_id = kwargs.get('practice_registration').id self.first_name = kwargs.get('first_name') self.last_name = kwargs.get('last_name') self.date_created = datetime.datetime.now() def full_name(self): return '{} {}'.format(self.first_name or '', self.last_name or '')
class PracticeGroup(db.Model): __tablename__ = 'etl_practice_group' project_id = db.Column(db.Integer, primary_key=True, nullable=False) identifier = db.Column(db.String, primary_key=True, nullable=False) type = db.Column(db.String, primary_key=True, nullable=False) name = db.Column(db.String, nullable=False) practices = db.relationship( 'Practice', secondary=practice_groups_practices, backref=db.backref('groups', lazy='dynamic'), collection_class=set, ) def __str__(self): return f"{self.type}: {self.name}" __mapper_args__ = { "polymorphic_identity": "PracticeGroup", "polymorphic_on": type, }