'user_id', unique=True, postgresql_where=db.text('is_primary AND NOT is_user_deleted')), { 'schema': 'users' }) #: the unique id of the email address id = db.Column(db.Integer, primary_key=True) #: the id of the associated user user_id = db.Column(db.Integer, db.ForeignKey('users.users.id'), nullable=False, index=True) #: the email address email = db.Column(db.String, nullable=False, index=True) #: if the email is the user's primary email is_primary = db.Column(db.Boolean, nullable=False, default=False) #: if the user is marked as deleted (e.g. due to a merge). DO NOT use this flag when actually deleting an email is_user_deleted = db.Column(db.Boolean, nullable=False, default=False) # relationship backrefs: # - user (User._all_emails) @return_ascii def __repr__(self): return '<UserEmail({}, {}, {})>'.format(self.id, self.email, self.is_primary, self.user) define_unaccented_lowercase_index(UserEmail.email)
@listens_for(User._secondary_emails, 'append') def _user_email_added(target, value, *unused): # Make sure that a newly added email has the same deletion state as the user itself value.is_user_deleted = target.is_deleted @listens_for(User._primary_email, 'set') @listens_for(User._secondary_emails, 'append') @listens_for(User._secondary_emails, 'remove') def _user_email_changed(target, value, *unused): # all_emails is out of sync when changing the emails sess = object_session(target) if sess is not None: sess.expire(target, ['_all_emails']) @listens_for(User.is_deleted, 'set') def _user_deleted(target, value, *unused): # Reflect the user deletion state in the email table. # Not using _all_emails here since it only contains newly added emails after an expire/commit if target._primary_email: target._primary_email.is_user_deleted = value for email in target._secondary_emails: email.is_user_deleted = value define_unaccented_lowercase_index(User.first_name) define_unaccented_lowercase_index(User.last_name) define_unaccented_lowercase_index(User.phone) define_unaccented_lowercase_index(User.address)
try: identity_info = sync_provider.refresh_identity(identity.identifier, identity.multipass_data) except IdentityRetrievalFailed: identity_info = None if identity_info: identity.data = identity_info.data return identity @listens_for(User._primary_email, 'set') @listens_for(User._secondary_emails, 'append') def _user_email_added(target, value, *unused): # Make sure that a newly added email has the same deletion state as the user itself value.is_user_deleted = target.is_deleted @listens_for(User.is_deleted, 'set') def _user_deleted(target, value, *unused): # Reflect the user deletion state in the email table. # Not using _all_emails here since it only contains newly added emails after an expire/commit if target._primary_email: target._primary_email.is_user_deleted = value for email in target._secondary_emails: email.is_user_deleted = value define_unaccented_lowercase_index(User.first_name) define_unaccented_lowercase_index(User.last_name) define_unaccented_lowercase_index(User.phone) define_unaccented_lowercase_index(User.address)
from indico.core.db import db from indico.core.db.sqlalchemy.custom.unaccent import define_unaccented_lowercase_index from indico.util.string import return_ascii class UserAffiliation(db.Model): __tablename__ = 'affiliations' __table_args__ = {'schema': 'users'} #: the unique id of the affiliations id = db.Column(db.Integer, primary_key=True) #: the id of the associated user user_id = db.Column(db.Integer, db.ForeignKey('users.users.id'), nullable=False, index=True) #: the affiliation name = db.Column(db.String, nullable=False, index=True) # relationship backrefs: # - user (User._affiliation) @return_ascii def __repr__(self): return '<UserAffiliation({}, {}, {})>'.format(self.id, self.name, self.user) define_unaccented_lowercase_index(UserAffiliation.name)
index=True ) #: the email address email = db.Column( db.String, nullable=False, index=True ) #: if the email is the user's primary email is_primary = db.Column( db.Boolean, nullable=False, default=False ) #: if the user is marked as deleted (e.g. due to a merge). DO NOT use this flag when actually deleting an email is_user_deleted = db.Column( db.Boolean, nullable=False, default=False ) # relationship backrefs: # - user (User._all_emails) @return_ascii def __repr__(self): return '<UserEmail({}, {}, {})>'.format(self.id, self.email, self.is_primary, self.user) define_unaccented_lowercase_index(UserEmail.email)
#: the unique id of the affiliations id = db.Column( db.Integer, primary_key=True ) #: the id of the associated user user_id = db.Column( db.Integer, db.ForeignKey('users.users.id'), nullable=False, index=True ) #: the affiliation name = db.Column( db.String, nullable=False, index=True ) # relationship backrefs: # - user (User._affiliation) @return_ascii def __repr__(self): return '<UserAffiliation({}, {}, {})>'.format(self.id, self.name, self.user) define_unaccented_lowercase_index(UserAffiliation.name)