Exemple #1
0
    def query_find_by_hash(cls, hash_type, hash_value, tags, session,
                           distinct_name=True):
        if distinct_name:
            last_ids = session.query(cls.id_file,
                                     cls.name,
                                     func.max(cls.id).label('last_id')) \
                .group_by(cls.id_file, cls.name).subquery()

            query = session.query(cls) \
                .join((last_ids, and_(cls.id_file == last_ids.c.id_file,
                                      cls.name == last_ids.c.name,
                                      cls.id == last_ids.c.last_id)))
        else:
            query = session.query(cls)

        query = query.join(File, File.id == cls.id_file)

        query = query.filter(getattr(File, hash_type) == hash_value) \
            .order_by(cls.name)
        # Update the query with tags if user asked for it
        if tags is not None:
            query = query.join(File.tags)
            for tagid in tags:
                # check if tag exists
                Tag.find_by_id(tagid, session)
                query = query.filter(File.tags.any(Tag.id == tagid))

        return query
Exemple #2
0
    def query_find_by_name(cls, name, tags, session):
        last_ids = session.query(cls.id_file,
                                 cls.name,
                                 func.max(cls.id).label('last_id')) \
            .group_by(cls.id_file, cls.name).subquery()

        query = session.query(cls) \
            .join((last_ids, and_(cls.id_file == last_ids.c.id_file,
                                  cls.name == last_ids.c.name,
                                  cls.id == last_ids.c.last_id))) \
            .join(File, File.id == cls.id_file) \
            .filter(cls.name.like("%{0}%".format(name))) \
            .order_by(cls.name)

        # Update the query with tags if user asked for it
        if tags is not None:
            query = query.join(File.tags)
            for tagid in tags:
                # check if tag exists
                Tag.find_by_id(tagid, session)
                query = query.filter(File.tags.any(Tag.id == tagid))

        return query