Example #1
0
    def get_kbr_values(self, searchkey="", searchvalue="", searchtype='s'):
        """
        Return dicts of 'key' and 'value' from a knowledge base.

        :param kb_name the name of the knowledge base
        :param searchkey search using this key
        :param searchvalue search using this value
        :param searchtype s=substring, e=exact, sw=startswith
        :return a list of dictionaries [{'key'=>x, 'value'=>y},..]
        """
        import warnings
        warnings.warn("The function is deprecated. Please use the "
                      "`KnwKBRVAL.query_kb_mappings()` instead. "
                      "E.g. [(kval.m_value,) for kval in "
                      "KnwKBRVAL.query_kb_mappings(kb_id).all()]")
        # prepare filters
        if searchtype == 's':
            searchkey = '%'+searchkey+'%'
        if searchtype == 's' and searchvalue:
            searchvalue = '%'+searchvalue+'%'
        if searchtype == 'sw' and searchvalue:  # startswith
            searchvalue = searchvalue+'%'
        if not searchvalue:
            searchvalue = '%'
        # execute query
        return db.session.execute(
            db.select([KnwKBRVAL.m_value],
                      db.and_(KnwKBRVAL.id_knwKB.like(self.id),
                              KnwKBRVAL.m_value.like(searchvalue),
                              KnwKBRVAL.m_key.like(searchkey))))
Example #2
0
    def get_kbr_values(self, searchkey="", searchvalue="", searchtype='s'):
        """
        Return dicts of 'key' and 'value' from a knowledge base.

        :param kb_name the name of the knowledge base
        :param searchkey search using this key
        :param searchvalue search using this value
        :param searchtype s=substring, e=exact, sw=startswith
        :return a list of dictionaries [{'key'=>x, 'value'=>y},..]
        """
        import warnings
        warnings.warn("The function is deprecated. Please use the "
                      "`KnwKBRVAL.query_kb_mappings()` instead. "
                      "E.g. [(kval.m_value,) for kval in "
                      "KnwKBRVAL.query_kb_mappings(kb_id).all()]")
        # prepare filters
        if searchtype == 's':
            searchkey = '%' + searchkey + '%'
        if searchtype == 's' and searchvalue:
            searchvalue = '%' + searchvalue + '%'
        if searchtype == 'sw' and searchvalue:  # startswith
            searchvalue = searchvalue + '%'
        if not searchvalue:
            searchvalue = '%'
        # execute query
        return db.session.execute(
            db.select([KnwKBRVAL.m_value],
                      db.and_(KnwKBRVAL.id_knwKB.like(self.id),
                              KnwKBRVAL.m_value.like(searchvalue),
                              KnwKBRVAL.m_key.like(searchkey))))
Example #3
0
def get_groups_user_not_joined(id_user, group_name=None):
    """Return the list of group that user not joined."""
    query = Usergroup.query.outerjoin(Usergroup.users).filter(
        Usergroup.id.notin_(
            db.select([UserUsergroup.id_usergroup],
                      UserUsergroup.id_user == id_user)))
    if group_name:
        query = query.filter(Usergroup.name.like(group_name))
    return query
Example #4
0
def get_groups_user_not_joined(id_user, group_name=None):
    """Return the list of group that user not joined."""
    query = Usergroup.query.outerjoin(
        Usergroup.users).filter(
            Usergroup.id.notin_(
                db.select([UserUsergroup.id_usergroup],
                          UserUsergroup.id_user == id_user)))
    if group_name:
        query = query.filter(Usergroup.name.like(group_name))
    return query
Example #5
0
 def timestamp_verifier(cls, name):
     """Return last modification time for given sorting method."""
     min_date = datetime(1970, 1, 1)
     method_id = db.select([cls.id], cls.name == name)
     data_updated = db.session.query(
         db.func.max(BsrMETHODDATA.last_updated)
     ).filter(BsrMETHODDATA.id_bsrMETHOD.in_(method_id)).scalar()
     bucket_updated = db.session.query(
         db.func.max(BsrMETHODDATABUCKET.last_updated)
     ).filter(BsrMETHODDATABUCKET.id_bsrMETHOD.in_(method_id)).scalar()
     return max(data_updated, bucket_updated, min_date)
Example #6
0
 def get_users_not_in_this_group(self, nickname=None, email=None,
                                 limit=None):
     """Return users that not joined this group."""
     # base query
     query = User.query.outerjoin(User.usergroups).filter(
         User.id.notin_(db.select([UserUsergroup.id_user],
                        UserUsergroup.id_usergroup == self.id)))
     # additional optional filters
     if nickname:
         query = query.filter(User.nickname.like(nickname))
     if email:
         query = query.filter(User.email.like(email))
     if limit:
         query = query.limit(limit)
     # return results
     return query
Example #7
0
 def get_users_not_in_this_group(self, nickname=None, email=None,
                                 limit=None):
     """Return users that not joined this group."""
     # base query
     query = User.query.outerjoin(User.usergroups).filter(
         User.id.notin_(db.select([UserUsergroup.id_user],
                        UserUsergroup.id_usergroup == self.id)))
     # additional optional filters
     if nickname:
         query = query.filter(User.nickname.like(nickname))
     if email:
         query = query.filter(User.email.like(email))
     if limit:
         query = query.limit(limit)
     # return results
     return query
Example #8
0
def add_kb(kb_name=u"Untitled", kb_type=None, tries=10):
    """Add a new kb in database, return the id.

    Add a new kb in database, and returns its id
    The name of the kb will be 'Untitled#'
    such that it is unique.

    :param kb_name: the name of the kb
    :param kb_type: the type of the kb, incl 'taxonomy' and 'dynamic'.
                   None for typical (leftside-rightside).
    :param tries: exit after <n> retry
    :return: the id of the newly created kb
    """
    created = False
    name = kb_name
    i = 0
    while i < tries and created is False:
        try:
            kb = models.KnwKB(name=name, description="", kbtype=kb_type)
            created = True
            db.session.add(kb)
            db.session.commit()
        except IntegrityError:
            db.session.rollback()
            # get the highest id to calculate the new name
            result = db.session.execute(
                db.select([models.KnwKB.id]).order_by(db.desc(models.KnwKB.id)).limit(1)
            ).first()
            index = result[0] + 1 if result is not None else 1
            name = kb_name + " " + str(index)
            i = i + 1
            created = False
        except Exception:
            db.session.rollback()
            raise

    if created is False:
        # TODO raise the right exception
        raise Exception(
            _(
                'Can\'t create knowledge base "%(name)s".\n' "Probabily the server is busy! " "Try again later.",
                name=kb_name,
            )
        )

    return kb.id
Example #9
0
def add_kb(kb_name=u"Untitled", kb_type=None, tries=10):
    """Add a new kb in database, return the id.

    Add a new kb in database, and returns its id
    The name of the kb will be 'Untitled#'
    such that it is unique.

    :param kb_name: the name of the kb
    :param kb_type: the type of the kb, incl 'taxonomy' and 'dynamic'.
                   None for typical (leftside-rightside).
    :param tries: exit after <n> retry
    :return: the id of the newly created kb
    """
    created = False
    name = kb_name
    i = 0
    while (i < tries and created is False):
        try:
            kb = models.KnwKB(name=name, description="", kbtype=kb_type)
            created = True
            db.session.add(kb)
            db.session.commit()
        except IntegrityError:
            db.session.rollback()
            # get the highest id to calculate the new name
            result = db.session.execute(
                db.select([models.KnwKB.id]).order_by(db.desc(
                    models.KnwKB.id)).limit(1)).first()
            index = result[0] + 1 if result is not None else 1
            name = kb_name + " " + str(index)
            i = i + 1
            created = False
        except Exception:
            db.session.rollback()
            raise

    if created is False:
        # TODO raise the right exception
        raise Exception(
            _(
                "Can't create knowledge base \"%(name)s\".\n"
                "Probabily the server is busy! "
                "Try again later.",
                name=kb_name))

    return kb.id
Example #10
0
def update(dry_run=False):
    """Check if all records have an archive from their latest version."""
    from invenio.ext.sqlalchemy import db
    from invenio_records.models import Record
    from .api import get_archive_package, create_archive_package
    from .errors import ArchiverError
    records = db.select([Record.id, Record.modification_date])

    for (recid, modification_date) in db.session.execute(records):
        try:
            archive = get_archive_package(recid, version=-1)
        except ArchiverError:
            archive = None
        if archive is None or archive['creation_date'] < modification_date:
            if dry_run:
                print("Record {0} needs to be archived.".format(recid))
            else:
                create_archive_package(recid)
Example #11
0
def update(dry_run=False):
    """Check if all records have an archive from their latest version."""
    from invenio.ext.sqlalchemy import db
    from invenio.modules.records.models import Record
    from .api import get_archive_package, create_archive_package
    from .errors import ArchiverError
    records = db.select([Record.id, Record.modification_date])

    for (recid, modification_date) in db.session.execute(records):
        try:
            archive = get_archive_package(recid, version=-1)
        except ArchiverError:
            archive = None
        if archive is None or archive['creation_date'] < modification_date:
            if dry_run:
                print("Record {0} needs to be archived.".format(recid))
            else:
                create_archive_package(recid)
Example #12
0
        User.id == UserAccROLE.id_user,
        UserAccROLE.expiration >= db.func.now()
    )
)

User.has_admin_role = property(lambda self:
    self.has_super_admin_role or db.object_session(self).query(
        db.func.count(User.id)>0
    ).join(
        User.active_roles,
        UserAccROLE.role,
        AccROLE.authorizations
    ).filter(
        AccAuthorization.id_accACTION.in_(
            db.select([AccACTION.id]).where(
                AccACTION.name.in_(CFG_ACC_ACTIVITIES_URLS.keys())
            )
        ),
        User.id == self.id
    ).scalar()
)

User.has_super_admin_role = property(lambda self:
    db.object_session(self).query(db.func.count(User.id)>0).join(
        User.active_roles,
        UserAccROLE.role
    ).filter(
        AccROLE.name == SUPERADMINROLE,
        User.id == self.id
    ).scalar()
)
Example #13
0
        UserAccROLE.expiration >= db.func.now()
    )
)

User.has_admin_role = property(
    lambda self:
    self.has_super_admin_role or db.object_session(self).query(
        db.func.count(User.id) > 0
    ).join(
        User.active_roles,
        UserAccROLE.role,
        AccROLE.authorizations
    ).filter(
        AccAuthorization.id_accACTION.in_(
            db.select([AccACTION.id]).where(
                AccACTION.name.in_(CFG_ACC_ACTIVITIES_URLS.keys())
            )
        ),
        User.id == self.id
    ).scalar()
)

User.has_super_admin_role = property(
    lambda self:
    db.object_session(self).query(db.func.count(User.id) > 0).join(
        User.active_roles,
        UserAccROLE.role
    ).filter(
        AccROLE.name == SUPERADMINROLE,
        User.id == self.id
    ).scalar()
Example #14
0
 def record_count(cls):
     """TODO."""
     return db.select([db.func.count(WtgTAGRecord.id_bibrec)]) \
              .where(WtgTAGRecord.id_tag == cls.id) \
              .label('record_count')
Example #15
0
 def record_count(cls):
     """TODO."""
     return db.select([db.func.count(WtgTAGRecord.id_bibrec)]) \
              .where(WtgTAGRecord.id_tag == cls.id) \
              .label('record_count')