def _process(self): if not request.is_xhr: return WPCategoryCalendar.render_template( 'display/calendar.html', self.category, start_dt=request.args.get('start_dt')) tz = self.category.display_tzinfo start = tz.localize(dateutil.parser.parse( request.args['start'])).astimezone(utc) end = tz.localize(dateutil.parser.parse( request.args['end'])).astimezone(utc) query = (Event.query.filter(Event.starts_between(start, end), Event.is_visible_in(self.category.id), ~Event.is_deleted).options( load_only('id', 'title', 'start_dt', 'end_dt', 'category_id'))) events = self._get_event_data(query) ongoing_events = (Event.query.filter( Event.is_visible_in(self.category.id), Event.start_dt < start, Event.end_dt > end).options( load_only('id', 'title', 'start_dt', 'end_dt', 'timezone')).order_by(Event.title).all()) return jsonify_data( flash=False, events=events, ongoing_event_count=len(ongoing_events), ongoing_events_html=self._render_ongoing_events(ongoing_events))
def add_contrib_data(): has_contrib = (EventPerson.contribution_links.any( ContributionPersonLink.contribution.has(~Contribution.is_deleted))) has_subcontrib = EventPerson.subcontribution_links.any( SubContributionPersonLink.subcontribution.has(db.and_( ~SubContribution.is_deleted, SubContribution.contribution.has(~Contribution.is_deleted)))) query = (Event.query .options(load_only('id')) .options(noload('*')) .filter(~Event.is_deleted, Event.starts_between(from_dt, to_dt), Event.persons.any((EventPerson.user_id == user.id) & (has_contrib | has_subcontrib)))) for event in query: data[event.id].add('contributor')
def get_events_registered(user, from_dt=None, to_dt=None): """Gets the IDs of events where the user is registered. :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.registrations.options(load_only('event_id')).options( joinedload(Registration.registration_form).load_only('event_id')).join( Registration.registration_form).join( RegistrationForm.event_new).filter( Registration.is_active, ~RegistrationForm.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) return {registration.event_id for registration in query}
def add_contrib_data(): has_contrib = (EventPerson.contribution_links.any( ContributionPersonLink.contribution.has(~Contribution.is_deleted))) has_subcontrib = EventPerson.subcontribution_links.any( SubContributionPersonLink.subcontribution.has(db.and_( ~SubContribution.is_deleted, SubContribution.contribution.has(~Contribution.is_deleted)))) query = (Event.query .options(load_only('id')) .options(noload('*')) .filter(~Event.is_deleted, Event.starts_between(from_dt, to_dt), Event.persons.any((EventPerson.user_id == user.id) & (has_contrib | has_subcontrib)))) for event in query: data[event.id].add('contributor')
def add_acl_data(): query = (user.in_contribution_acls .options(load_only('contribution_id', 'roles', 'full_access', 'read_access')) .options(noload('*')) .options(contains_eager(ContributionPrincipal.contribution).load_only('event_id')) .join(Contribution) .join(Event, Event.id == Contribution.event_id) .filter(~Contribution.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) for principal in query: roles = data[principal.contribution.event_id] if 'submit' in principal.roles: roles.add('contribution_submission') if principal.full_access: roles.add('contribution_manager') if principal.read_access: roles.add('contribution_access')
def get_events_registered(user, from_dt=None, to_dt=None): """Gets the IDs of events where the user is registered. :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.registrations .options(load_only('event_id')) .options(joinedload(Registration.registration_form).load_only('event_id')) .join(Registration.registration_form) .join(RegistrationForm.event_new) .filter(Registration.is_active, ~RegistrationForm.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) return {registration.event_id for registration in query}
def add_acl_data(): query = (user.in_contribution_acls .options(load_only('contribution_id', 'roles', 'full_access', 'read_access')) .options(noload('*')) .options(contains_eager(ContributionPrincipal.contribution).load_only('event_id')) .join(Contribution) .join(Event, Event.id == Contribution.event_id) .filter(~Contribution.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt))) for principal in query: roles = data[principal.contribution.event_id] if 'submit' in principal.roles: roles.add('contribution_submission') if principal.full_access: roles.add('contribution_manager') if principal.read_access: roles.add('contribution_access')
def _process(self): query = (Event.query .filter(Event.starts_between(self.start_dt, self.end_dt), Event.is_visible_in(self.category.id), ~Event.is_deleted) .options(load_only('id', 'title', 'start_dt', 'end_dt', 'category_id'))) events = self._get_event_data(query) ongoing_events = (Event.query .filter(Event.is_visible_in(self.category.id), ~Event.is_deleted, Event.start_dt < self.start_dt, Event.end_dt > self.end_dt) .options(load_only('id', 'title', 'start_dt', 'end_dt', 'timezone')) .order_by(Event.title) .all()) return jsonify_data(flash=False, events=events, ongoing_event_count=len(ongoing_events), ongoing_events_html=self._render_ongoing_events(ongoing_events))
def _process(self): if not request.is_xhr: return WPCategory.render_template('display/calendar.html', self.category, start_dt=request.args.get('start_dt')) tz = self.category.display_tzinfo start = tz.localize(dateutil.parser.parse(request.args['start'])).astimezone(utc) end = tz.localize(dateutil.parser.parse(request.args['end'])).astimezone(utc) query = (Event.query .filter(Event.starts_between(start, end), Event.is_visible_in(self.category), ~Event.is_deleted) .options(load_only('id', 'title', 'start_dt', 'end_dt', 'category_id'))) events = self._get_event_data(query) ongoing_events = (Event.query .filter(Event.is_visible_in(self.category), Event.start_dt < start, Event.end_dt > end) .options(load_only('id', 'title', 'start_dt', 'end_dt', 'timezone')) .order_by(Event.title) .all()) return jsonify_data(flash=False, events=events, ongoing_event_count=len(ongoing_events), ongoing_events_html=self._render_ongoing_events(ongoing_events))