Example #1
0
            '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)
Example #2
0
@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)
Example #3
0
            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)
Example #4
0
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)
Example #5
0
        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)
Example #6
0
    #: 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)