def _process(self): # Current events, which are always shown by default are events of this month and of the previous month. # If there are no events in this range, it will include the last and next month containing events. past_threshold = self.now - relativedelta(months=1, day=1, hour=0, minute=0) future_threshold = self.now + relativedelta(months=1, day=1, hour=0, minute=0) next_event_start_dt = (db.session.query(Event.start_dt) .filter(Event.start_dt >= self.now, Event.category_id == self.category.id) .order_by(Event.start_dt.asc()) .first() or (None,))[0] previous_event_start_dt = (db.session.query(Event.start_dt) .filter(Event.start_dt < self.now, Event.category_id == self.category.id) .order_by(Event.start_dt.desc()) .first() or (None,))[0] if next_event_start_dt is not None and next_event_start_dt > future_threshold: future_threshold = next_event_start_dt + relativedelta(months=1, day=1, hour=0, minute=0) if previous_event_start_dt is not None and previous_event_start_dt < past_threshold: past_threshold = previous_event_start_dt.replace(day=1, hour=0, minute=0) event_query = (Event.query.with_parent(self.category) .options(*self._event_query_options) .order_by(Event.start_dt.desc())) past_event_query = event_query.filter(Event.start_dt < past_threshold) future_event_query = event_query.filter(Event.start_dt >= future_threshold) current_event_query = event_query.filter(Event.start_dt >= past_threshold, Event.start_dt < future_threshold) events = current_event_query.filter(Event.start_dt < future_threshold).all() events_by_month = self.group_by_month(events) future_event_count = future_event_query.count() past_event_count = past_event_query.count() show_past_events = bool(self.category.id in session.get('fetch_past_events_in', set()) or (session.user and session.user.settings.get('show_past_events', False))) managers = sorted(self.category.get_manager_list(), key=attrgetter('principal_type.name', 'name')) threshold_format = '%Y-%m' params = {'event_count': len(events), 'events_by_month': events_by_month, 'format_event_date': self.format_event_date, 'future_event_count': future_event_count, 'future_threshold': future_threshold.strftime(threshold_format), 'happening_now': self.happening_now, 'is_recent': self.is_recent, 'managers': managers, 'past_event_count': past_event_count, 'show_past_events': show_past_events, 'past_threshold': past_threshold.strftime(threshold_format), 'atom_feed_url': url_for('.export_atom', self.category), 'atom_feed_title': _('Events of "{}"').format(self.category.title)} params.update(get_base_ical_parameters(session.user, 'category', '/export/categ/{0}.ics'.format(self.category.id), {'from': '-31d'})) if not self.category.is_root: return WPCategory.render_template('display/category.html', self.category, **params) news = get_recent_news() upcoming_events = get_upcoming_events() return WPCategory.render_template('display/root_category.html', self.category, news=news, upcoming_events=upcoming_events, **params)
def _process(self): params = get_category_view_params(self.category, self.now) if not self.category.is_root: return WPCategory.render_template('display/category.html', self.category, **params) news = get_recent_news() upcoming_events = get_upcoming_events() return WPCategory.render_template('display/root_category.html', self.category, news=news, upcoming_events=upcoming_events, **params)
def _process(self): # Current events, which are always shown by default are events of this month and of the previous month. # If there are no events in this range, it will include the last and next month containing events. past_threshold = self.now - relativedelta(months=1, day=1, hour=0, minute=0) future_threshold = self.now + relativedelta(months=1, day=1, hour=0, minute=0) next_event_start_dt = ( db.session.query(Event.start_dt) .filter(Event.start_dt >= self.now, Event.category_id == self.category.id) .order_by(Event.start_dt.asc()) .first() or (None,) )[0] previous_event_start_dt = ( db.session.query(Event.start_dt) .filter(Event.start_dt < self.now, Event.category_id == self.category.id) .order_by(Event.start_dt.desc()) .first() or (None,) )[0] if next_event_start_dt is not None and next_event_start_dt > future_threshold: future_threshold = next_event_start_dt + relativedelta(months=1, day=1, hour=0, minute=0) if previous_event_start_dt is not None and previous_event_start_dt < past_threshold: past_threshold = previous_event_start_dt.replace(day=1, hour=0, minute=0) event_query = ( Event.query.with_parent(self.category).options(*self._event_query_options).order_by(Event.start_dt.desc()) ) past_event_query = event_query.filter(Event.start_dt < past_threshold) future_event_query = event_query.filter(Event.start_dt >= future_threshold) current_event_query = event_query.filter(Event.start_dt >= past_threshold, Event.start_dt < future_threshold) events = current_event_query.filter(Event.start_dt < future_threshold).all() events_by_month = self.group_by_month(events) future_event_count = future_event_query.count() past_event_count = past_event_query.count() show_past_events = bool( self.category.id in session.get("fetch_past_events_in", set()) or (session.user and session.user.settings.get("show_past_events", False)) ) managers = sorted(self.category.get_manager_list(), key=attrgetter("principal_type.name", "name")) threshold_format = "%Y-%m" params = { "event_count": len(events), "events_by_month": events_by_month, "format_event_date": self.format_event_date, "future_event_count": future_event_count, "future_threshold": future_threshold.strftime(threshold_format), "happening_now": self.happening_now, "is_recent": self.is_recent, "managers": managers, "past_event_count": past_event_count, "show_past_events": show_past_events, "past_threshold": past_threshold.strftime(threshold_format), "atom_feed_url": url_for(".export_atom", self.category), "atom_feed_title": _('Events of "{}"').format(self.category.title), } params.update( get_base_ical_parameters( session.user, "category", "/export/categ/{0}.ics".format(self.category.id), {"from": "-31d"} ) ) if not self.category.is_root: return WPCategory.render_template("display/category.html", self.category, **params) news = get_recent_news() upcoming_events = get_upcoming_events() return WPCategory.render_template( "display/root_category.html", self.category, news=news, upcoming_events=upcoming_events, **params )