def get_for_linked_object(cls, linked_object, preload_event=False): """Gets the attachments for the given object. This only returns attachments that haven't been deleted. :param linked_object: A category, event, session, contribution or subcontribution. :param preload_event: If all attachments for the same event should be pre-loaded and cached in the app context. This must not be used when ``linked_object`` is a category. """ from indico.modules.attachments.api.util import get_event event = get_event(linked_object) if event and event in g.get("event_attachments", {}): return g.event_attachments[event].get(linked_object, []) elif not preload_event or not event: return ( linked_object.attachment_folders.filter_by(is_deleted=False) .order_by(AttachmentFolder.is_default.desc(), db.func.lower(AttachmentFolder.title)) .options(joinedload(AttachmentFolder.attachments)) .all() ) else: if "event_attachments" not in g: g.event_attachments = {} g.event_attachments[event] = defaultdict(list) query = ( event.all_attachment_folders.filter_by(is_deleted=False) .order_by(AttachmentFolder.is_default.desc(), db.func.lower(AttachmentFolder.title)) .options( joinedload(AttachmentFolder.attachments), joinedload(AttachmentFolder.linked_event), joinedload(AttachmentFolder.session), joinedload(AttachmentFolder.contribution), joinedload(AttachmentFolder.subcontribution), ) ) # populate cache for obj in query: g.event_attachments[event][obj.object].append(obj) return g.event_attachments[event].get(linked_object, [])
def get_for_linked_object(cls, linked_object, preload_event=False): """Gets the attachments for the given object. This only returns attachments that haven't been deleted. :param linked_object: A category, event, session, contribution or subcontribution. :param preload_event: If all attachments for the same event should be pre-loaded and cached in the app context. This must not be used when ``linked_object`` is a category. """ from indico.modules.attachments.api.util import get_event event = get_event(linked_object) if event and event in g.get('event_attachments', {}): return g.event_attachments[event].get(linked_object, []) elif not preload_event or not event: return (linked_object.attachment_folders.filter_by( is_deleted=False).order_by( AttachmentFolder.is_default.desc(), db.func.lower(AttachmentFolder.title)).options( joinedload(AttachmentFolder.attachments)).all()) else: if 'event_attachments' not in g: g.event_attachments = {} g.event_attachments[event] = defaultdict(list) query = (event.all_attachment_folders.filter_by( is_deleted=False).order_by( AttachmentFolder.is_default.desc(), db.func.lower(AttachmentFolder.title)).options( joinedload(AttachmentFolder.attachments), joinedload(AttachmentFolder.linked_event), joinedload(AttachmentFolder.session), joinedload(AttachmentFolder.contribution), joinedload(AttachmentFolder.subcontribution))) # populate cache for obj in query: g.event_attachments[event][obj.object].append(obj) return g.event_attachments[event].get(linked_object, [])