def get_events_with_linked_sessions(user, from_dt=None, to_dt=None): """Returns a dict with keys representing event_id and the values containing data about the user rights for sessions within the event :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for """ query = (user.in_session_acls .options(load_only('session_id', 'roles', 'full_access', 'read_access')) .options(noload('*')) .options(contains_eager(SessionPrincipal.session).load_only('event_id')) .join(Session) .join(Event, Event.id == Session.event_id) .filter(~Session.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) data = defaultdict(set) for principal in query: roles = data[principal.session.event_id] if 'coordinate' in principal.roles: roles.add('session_coordinator') if 'submit' in principal.roles: roles.add('session_submission') if principal.full_access: roles.add('session_manager') if principal.read_access: roles.add('session_access') return data
def get_events_with_linked_sessions(user, from_dt=None, to_dt=None): """Returns a dict with keys representing event_id and the values containing data about the user rights for sessions within the event :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for """ query = (user.in_session_acls.options( load_only('session_id', 'roles', 'full_access', 'read_access')).options(noload('*')).options( contains_eager(SessionPrincipal.session).load_only( 'event_id')).join(Session).join( Event, Event.id == Session.event_id).filter( ~Session.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) data = defaultdict(set) for principal in query: roles = data[principal.session.event_id] if 'coordinate' in principal.roles: roles.add('session_coordinator') if 'submit' in principal.roles: roles.add('session_submission') if principal.full_access: roles.add('session_manager') if principal.read_access: roles.add('session_access') return data
def get_events_created_by(user, from_dt=None, to_dt=None): """Gets the IDs of events created by the user :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for :return: A set of event ids """ query = user.created_events.filter(~Event.is_deleted, Event.starts_between(from_dt, to_dt)) return {event.id for event in query}
def get_events_with_linked_event_persons(user, from_dt=None, to_dt=None): """Returns a list of all events for which the user is an EventPerson :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for """ query = (user.event_persons.options(load_only('event_id')).options( noload('*')).join(Event, Event.id == EventPerson.event_id).filter( EventPerson.event_links.any()).filter( ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) return {ep.event_id for ep in query}
def get_events_managed_by(user, from_dt=None, to_dt=None): """Gets the IDs of events where the user has management privs. :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for :return: A set of event ids """ query = (user.in_event_acls.join(Event).options( noload('user'), noload('local_group'), load_only('event_id')).filter( ~Event.is_deleted, Event.starts_between(from_dt, to_dt)).filter( EventPrincipal.has_management_role('ANY'))) return {principal.event_id for principal in query}
def get_events_managed_by(user, from_dt=None, to_dt=None): """Gets the IDs of events where the user has management privs. :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for :return: A set of event ids """ query = (user.in_event_acls .join(Event) .options(noload('user'), noload('local_group'), load_only('event_id')) .filter(~Event.is_deleted, Event.starts_between(from_dt, to_dt)) .filter(EventPrincipal.has_management_role('ANY'))) return {principal.event_id for principal in query}
def get_events_with_linked_event_persons(user, from_dt=None, to_dt=None): """Returns a list of all events for which the user is an EventPerson :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for """ query = (user.event_persons .options(load_only('event_id')) .options(noload('*')) .join(Event, Event.id == EventPerson.event_id) .filter(EventPerson.event_links.any()) .filter(~Event.is_deleted, Event.starts_between(from_dt, to_dt))) return {ep.event_id for ep in query}
def get_events_with_submitted_surveys(user, from_dt=None, to_dt=None): """Gets the IDs of events where the user submitted a survey. :param user: A `User` :param from_dt: The earliest event start time to look for :param to_dt: The latest event start time to look for :return: A set of event ids """ # Survey submissions are not stored in links anymore, so we need to get them directly query = (user.survey_submissions .options(load_only('survey_id')) .options(joinedload(SurveySubmission.survey).load_only('event_id')) .join(Survey) .join(Event) .filter(~Survey.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) return {submission.survey.event_id for submission in query}