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
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