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))))
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))))
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
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
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)
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
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
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
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)
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)
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() )
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()
def record_count(cls): """TODO.""" return db.select([db.func.count(WtgTAGRecord.id_bibrec)]) \ .where(WtgTAGRecord.id_tag == cls.id) \ .label('record_count')