def _get_timetable(self): return get_category_timetable([self.category.id], self.start_dt, self.end_dt, detail_level=self.detail, tz=self.category.display_tzinfo, from_categ=self.category, grouped=False)
def _process(self): info = get_category_timetable([self.category.id], self.start_dt, self.end_dt, detail_level=self.detail, tz=self.category.display_tzinfo, from_categ=self.category, grouped=False) events = info['events'] # Only categories with icons are listed in the sidebar subcategories = {event.category for event in events if event.category.has_icon} # Events spanning multiple days must appear on all days events = _flat_map(partial(self._process_multiday_events, info), events) def _event_sort_key(event): # Ongoing events are shown after all other events on the same day and are sorted by start_date ongoing = getattr(event, 'ongoing', False) return (event.start_dt.date(), ongoing, -mktime(event.first_occurence_start_dt.timetuple()) if ongoing else event.start_dt.time()) events = sorted(events, key=_event_sort_key) params = { 'detail': self.detail, 'period': self.period, 'subcategories': subcategories, 'start_dt': self.start_dt, 'end_dt': self.end_dt - relativedelta(days=1), # Display a close-ended interval 'previous_day_url': self._other_day_url(self.start_dt - relativedelta(days=1)), 'next_day_url': self._other_day_url(self.start_dt + relativedelta(days=1)), 'previous_month_url': self._other_day_url(self.start_dt - relativedelta(months=1)), 'next_month_url': self._other_day_url(self.start_dt + relativedelta(months=1)), 'previous_year_url': self._other_day_url(self.start_dt - relativedelta(years=1)), 'next_year_url': self._other_day_url(self.start_dt + relativedelta(years=1)), 'mathjax': self.detail != 'event' } if self.period == 'day': return WPCategory.render_template('display/overview/day.html', self.category, events=events, **params) elif self.period == 'week': days = self._get_week_days() template = 'display/overview/week.html' params['previous_week_url'] = self._other_day_url(self.start_dt - relativedelta(days=7)) params['next_week_url'] = self._other_day_url(self.start_dt + relativedelta(days=7)) elif self.period == 'month': days = self._get_calendar_days() template = 'display/overview/month.html' events_by_day = [] for day in days: events_by_day.append((day, self._pop_head_while(lambda x: x.start_dt.date() <= day.date(), events))) # Check whether all weekends are empty hide_weekend = (not any(map(itemgetter(1), events_by_day[5::7])) and not any(map(itemgetter(1), events_by_day[6::7]))) if hide_weekend: events_by_day = [x for x in events_by_day if x[0].weekday() not in (5, 6)] return WPCategory.render_template(template, self.category, events_by_day=events_by_day, hide_weekend=hide_weekend, **params)
def getData(self): categ_ids = tuple(int(cat.id) for cat in self._categList) tz = timezone(DisplayTZ(session.user, None, useServerTZ=True).getDisplayTZ()) self._data = get_category_timetable(categ_ids, self.getStartDate(), self.getEndDate() + timedelta(days=1) - timedelta(seconds=1), detail_level=self.getDetailLevel(), tz=tz, from_categ=self._categList[0]) return self._data
def _process(self): info = get_category_timetable([self.category.id], self.start_dt, self.end_dt, detail_level=self.detail, tz=self.category.display_tzinfo, from_categ=self.category, grouped=False) events = info['events'] # Only categories with icons are listed in the sidebar subcategory_ids = { event.category.effective_icon_data['source_id'] for event in events if event.category.has_effective_icon } subcategories = Category.query.filter(Category.id.in_(subcategory_ids)) # Events spanning multiple days must appear on all days events = _flat_map(partial(self._process_multiday_events, info), events) def _event_sort_key(event): # Ongoing events are shown after all other events on the same day and are sorted by start_date ongoing = getattr(event, 'ongoing', False) return (event.start_dt.date(), ongoing, -mktime(event.first_occurence_start_dt.timetuple()) if ongoing else event.start_dt.time()) events = sorted(events, key=_event_sort_key) params = { 'detail': self.detail, 'period': self.period, 'subcategories': subcategories, 'start_dt': self.start_dt, 'end_dt': self.end_dt - relativedelta(days=1), # Display a close-ended interval 'previous_day_url': self._other_day_url(self.start_dt - relativedelta(days=1)), 'next_day_url': self._other_day_url(self.start_dt + relativedelta(days=1)), 'previous_month_url': self._other_day_url(self.start_dt - relativedelta(months=1)), 'next_month_url': self._other_day_url(self.start_dt + relativedelta(months=1)), 'previous_year_url': self._other_day_url(self.start_dt - relativedelta(years=1)), 'next_year_url': self._other_day_url(self.start_dt + relativedelta(years=1)), 'mathjax': True } if self.detail != 'event': cte = self.category.get_protection_parent_cte() params['accessible_categories'] = { cat_id for cat_id, prot_parent_id in db.session.query(cte) if prot_parent_id == self.category.id } if self.period == 'day': return WPCategory.render_template('display/overview/day.html', self.category, events=events, **params) elif self.period == 'week': days = self._get_week_days() template = 'display/overview/week.html' params['previous_week_url'] = self._other_day_url(self.start_dt - relativedelta( days=7)) params['next_week_url'] = self._other_day_url(self.start_dt + relativedelta( days=7)) elif self.period == 'month': days = self._get_calendar_days() template = 'display/overview/month.html' events_by_day = [] for day in days: events_by_day.append( (day, self._pop_head_while( lambda x: x.start_dt.date() <= day.date(), events))) # Check whether all weekends are empty hide_weekend = (not any(map(itemgetter(1), events_by_day[5::7])) and not any(map(itemgetter(1), events_by_day[6::7]))) if hide_weekend: events_by_day = [ x for x in events_by_day if x[0].weekday() not in (5, 6) ] return WPCategory.render_template(template, self.category, events_by_day=events_by_day, hide_weekend=hide_weekend, **params)
def _process(self): info = get_category_timetable( [self.category.id], self.start_dt, self.end_dt, detail_level=self.detail, tz=self.category.display_tzinfo, from_categ=self.category, grouped=False, ) events = info["events"] # Only categories with icons are listed in the sidebar subcategory_ids = { event.category.effective_icon_data["source_id"] for event in events if event.category.has_effective_icon } subcategories = Category.query.filter(Category.id.in_(subcategory_ids)) # Events spanning multiple days must appear on all days events = _flat_map(partial(self._process_multiday_events, info), events) def _event_sort_key(event): # Ongoing events are shown after all other events on the same day and are sorted by start_date ongoing = getattr(event, "ongoing", False) return ( event.start_dt.date(), ongoing, -mktime(event.first_occurence_start_dt.timetuple()) if ongoing else event.start_dt.time(), ) events = sorted(events, key=_event_sort_key) params = { "detail": self.detail, "period": self.period, "subcategories": subcategories, "start_dt": self.start_dt, "end_dt": self.end_dt - relativedelta(days=1), # Display a close-ended interval "previous_day_url": self._other_day_url(self.start_dt - relativedelta(days=1)), "next_day_url": self._other_day_url(self.start_dt + relativedelta(days=1)), "previous_month_url": self._other_day_url(self.start_dt - relativedelta(months=1)), "next_month_url": self._other_day_url(self.start_dt + relativedelta(months=1)), "previous_year_url": self._other_day_url(self.start_dt - relativedelta(years=1)), "next_year_url": self._other_day_url(self.start_dt + relativedelta(years=1)), "mathjax": True, } if self.detail != "event": cte = self.category.get_protection_parent_cte() params["accessible_categories"] = { cat_id for cat_id, prot_parent_id in db.session.query(cte) if prot_parent_id == self.category.id } if self.period == "day": return WPCategory.render_template("display/overview/day.html", self.category, events=events, **params) elif self.period == "week": days = self._get_week_days() template = "display/overview/week.html" params["previous_week_url"] = self._other_day_url(self.start_dt - relativedelta(days=7)) params["next_week_url"] = self._other_day_url(self.start_dt + relativedelta(days=7)) elif self.period == "month": days = self._get_calendar_days() template = "display/overview/month.html" events_by_day = [] for day in days: events_by_day.append((day, self._pop_head_while(lambda x: x.start_dt.date() <= day.date(), events))) # Check whether all weekends are empty hide_weekend = not any(map(itemgetter(1), events_by_day[5::7])) and not any( map(itemgetter(1), events_by_day[6::7]) ) if hide_weekend: events_by_day = [x for x in events_by_day if x[0].weekday() not in (5, 6)] return WPCategory.render_template( template, self.category, events_by_day=events_by_day, hide_weekend=hide_weekend, **params )