Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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
        )