Esempio n. 1
0
 def occurrence_groups(self):
     dr = dates.DateRanges()
     start, end = dr.this_year[0], dr.next_year[1]
     result = grouped_occurrences(
         occurrences(self.context, start, end), self.request
     )
     return result
Esempio n. 2
0
    def spawn(self, realitems, start=None, end=None):
        if not all((start, end)):
            start, end = self.daterange_dates()

        for item in realitems:
            for occurrence in recurrence.occurrences(item, start, end):
                for split in recurrence.split_days(occurrence):
                    if dates.overlaps(start, end, split.start, split.end):
                        yield split
Esempio n. 3
0
    def spawn(self, realitems, start=None, end=None):
        if not all((start, end)):
            start, end = self.daterange_dates()

        for item in realitems:
            for occurrence in recurrence.occurrences(item, start, end):
                for split in recurrence.split_days(occurrence):
                    if dates.overlaps(start, end, split.start, split.end):
                        yield split
    def test_cornercases(self, default_now, default_timezone):

        default_timezone.return_value = 'Europe/Zurich'

        # create an event that repeats every sunday at 7 in the morning
        # over a period within which daylight savings time changes
        item = Item(
            datetime(2012, 10, 21, 7),
            datetime(2012, 11, 4, 7),
            "RRULE:FREQ=WEEKLY",
            timezone='Europe/Zurich'
        )

        occurrences = recurrence.occurrences(
            item, min_date=item.local_start, max_date=item.local_end
        )

        self.assertEqual(len(occurrences), 3)
        self.assertEqual([o.local_start.hour for o in occurrences], [7] * 3)
        self.assertEqual(
            [o.local_start.weekday() for o in occurrences], [6] * 3
        )

        # create an event that starts at 0:00 in a timezone other than
        # utc and ensure that the resulting human date shows the
        # correct weekday in the given timezone
        # to make it tricky, cross over daylight savings time

        default_now.return_value = datetime(
            2012, 10, 17, tzinfo=pytz.timezone('Europe/Zurich')
        )

        start = datetime(2012, 10, 30)
        item = Item(
            start, start + timedelta(seconds=60 * 60 * 2),
            timezone='Europe/Zurich'
        )

        # behold, the Swiss German language
        request = TestRequest()
        request.locale.dates.calendars['gregorian'].getDayNames = mock.Mock(
            return_value=[
                u'Mäntig', u'Zischtig', u'Mittwuch', u'Dunschtig', u'Fritig',
                u'Samschtig', u'Sunntig'
            ]
        )
        human = item.as_occurrence().human_date(request)

        self.assertTrue(u'Zischtig' in human)

        # while we're at it
        human = item.as_occurrence().human_daterange(request)
        self.assertEqual(human, '00:00 - 02:00')
    def test_cornercases(self, default_now, default_timezone):

        default_timezone.return_value = 'Europe/Zurich'

        # create an event that repeats every sunday at 7 in the morning
        # over a period within which daylight savings time changes
        item = Item(datetime(2012, 10, 21, 7),
                    datetime(2012, 11, 4, 7),
                    "RRULE:FREQ=WEEKLY",
                    timezone='Europe/Zurich')

        occurrences = recurrence.occurrences(item,
                                             min_date=item.local_start,
                                             max_date=item.local_end)

        self.assertEqual(len(occurrences), 3)
        self.assertEqual([o.local_start.hour for o in occurrences], [7] * 3)
        self.assertEqual([o.local_start.weekday() for o in occurrences],
                         [6] * 3)

        # create an event that starts at 0:00 in a timezone other than
        # utc and ensure that the resulting human date shows the
        # correct weekday in the given timezone
        # to make it tricky, cross over daylight savings time

        default_now.return_value = datetime(
            2012, 10, 17, tzinfo=pytz.timezone('Europe/Zurich'))

        start = datetime(2012, 10, 30)
        item = Item(start,
                    start + timedelta(seconds=60 * 60 * 2),
                    timezone='Europe/Zurich')

        # behold, the Swiss German language
        request = TestRequest()
        request.locale.dates.calendars['gregorian'].getDayNames = mock.Mock(
            return_value=[
                u'Mäntig', u'Zischtig', u'Mittwuch', u'Dunschtig', u'Fritig',
                u'Samschtig', u'Sunntig'
            ])
        human = item.as_occurrence().human_date(request)

        self.assertTrue(u'Zischtig' in human)

        # while we're at it
        human = item.as_occurrence().human_daterange(request)
        self.assertEqual(human, '00:00 - 02:00')
Esempio n. 6
0
    def occurrences(self):
        min_date, max_date = dates.eventrange()

        return recurrence.occurrences(self.context, min_date, max_date)
    def test_occurrences(self):

        item = Item(datetime(2012, 1, 1, 10, 0), datetime(2012, 1, 1, 12, 0),
                    "RRULE:FREQ=DAILY;COUNT=4")

        occurrences = recurrence.occurrences(item,
                                             min_date=datetime(2012,
                                                               1,
                                                               1,
                                                               0,
                                                               0,
                                                               tzinfo=item.tz),
                                             max_date=datetime(2012,
                                                               12,
                                                               31,
                                                               0,
                                                               0,
                                                               tzinfo=item.tz))

        self.assertEqual(len(occurrences), 4)

        for occurrence in occurrences:
            self.assertEqual(occurrence.recurrence, item.recurrence)

        days = [o.start.day for o in occurrences]
        self.assertEqual([1, 2, 3, 4], days)

        # test occurrences
        item = Item(datetime(2012, 1, 1, 10, 0), datetime(2012, 1, 1, 12, 0),
                    "RRULE:FREQ=DAILY;COUNT=4")

        occurrences = recurrence.occurrences(item,
                                             min_date=item.start,
                                             max_date=item.end)

        self.assertEqual(len(occurrences), 1)

        # see if the picking works correctly
        for i in range(1, 5):
            picked = recurrence.pick_occurrence(item, start=date(2012, 1, i))
            self.assertEqual(picked.start.day, i)
            self.assertEqual(picked.start.month, 1)
            self.assertEqual(picked.start.year, 2012)

        picked = recurrence.pick_occurrence(item, start=date(2011, 12, 31))
        self.assertEqual(picked, None)

        picked = recurrence.pick_occurrence(item, start=date(2012, 1, 5))
        self.assertEqual(picked, None)

        # occurrences should return an empty list in these cases
        occurrences = recurrence.occurrences(item,
                                             min_date=datetime(2011,
                                                               1,
                                                               1,
                                                               tzinfo=item.tz),
                                             max_date=datetime(2011,
                                                               1,
                                                               1,
                                                               tzinfo=item.tz))

        self.assertEqual(occurrences, [])

        non_recurrant = Item(datetime(2012, 1, 1, 10, 0),
                             datetime(2012, 1, 1, 12, 0))

        occurrences = recurrence.occurrences(non_recurrant,
                                             min_date=datetime(2011,
                                                               1,
                                                               1,
                                                               tzinfo=item.tz),
                                             max_date=datetime(2011,
                                                               1,
                                                               1,
                                                               tzinfo=item.tz))

        self.assertEqual(occurrences, [])

        # non-recurring items are packed into a list
        occurrences = recurrence.occurrences(
            non_recurrant, datetime(2012, 1, 1, 10, 0, tzinfo=item.tz),
            datetime(2012, 1, 1, 12, 0, tzinfo=item.tz))

        self.assertEqual(occurrences, [non_recurrant])
Esempio n. 8
0
    def occurrences(self):
        min_date, max_date = dates.eventrange()

        return recurrence.occurrences(self.context, min_date, max_date)
Esempio n. 9
0
 def occurrence_groups(self):
     dr = dates.DateRanges()
     start, end = dr.this_year[0], dr.next_year[1]
     result = grouped_occurrences(occurrences(self.context, start, end),
                                  self.request)
     return result
    def test_occurrences(self):

        item = Item(
            datetime(2012, 1, 1, 10, 0),
            datetime(2012, 1, 1, 12, 0),
            "RRULE:FREQ=DAILY;COUNT=4"
        )

        occurrences = recurrence.occurrences(
            item,
            min_date=datetime(2012, 1, 1, 0, 0, tzinfo=item.tz),
            max_date=datetime(2012, 12, 31, 0, 0, tzinfo=item.tz)
        )

        self.assertEqual(len(occurrences), 4)

        for occurrence in occurrences:
            self.assertEqual(occurrence.recurrence, item.recurrence)

        days = [o.start.day for o in occurrences]
        self.assertEqual([1, 2, 3, 4], days)

        # test occurrences
        item = Item(
            datetime(2012, 1, 1, 10, 0),
            datetime(2012, 1, 1, 12, 0),
            "RRULE:FREQ=DAILY;COUNT=4"
        )

        occurrences = recurrence.occurrences(
            item, min_date=item.start, max_date=item.end
        )

        self.assertEqual(len(occurrences), 1)

        # see if the picking works correctly
        for i in range(1, 5):
            picked = recurrence.pick_occurrence(item, start=date(2012, 1, i))
            self.assertEqual(picked.start.day, i)
            self.assertEqual(picked.start.month, 1)
            self.assertEqual(picked.start.year, 2012)

        picked = recurrence.pick_occurrence(item, start=date(2011, 12, 31))
        self.assertEqual(picked, None)

        picked = recurrence.pick_occurrence(item, start=date(2012, 1, 5))
        self.assertEqual(picked, None)

        # occurrences should return an empty list in these cases
        occurrences = recurrence.occurrences(
            item,
            min_date=datetime(2011, 1, 1, tzinfo=item.tz),
            max_date=datetime(2011, 1, 1, tzinfo=item.tz)
        )

        self.assertEqual(occurrences, [])

        non_recurrant = Item(
            datetime(2012, 1, 1, 10, 0),
            datetime(2012, 1, 1, 12, 0)
        )

        occurrences = recurrence.occurrences(
            non_recurrant,
            min_date=datetime(2011, 1, 1, tzinfo=item.tz),
            max_date=datetime(2011, 1, 1, tzinfo=item.tz)
        )

        self.assertEqual(occurrences, [])

        # non-recurring items are packed into a list
        occurrences = recurrence.occurrences(
            non_recurrant,
            datetime(2012, 1, 1, 10, 0, tzinfo=item.tz),
            datetime(2012, 1, 1, 12, 0, tzinfo=item.tz)
        )

        self.assertEqual(occurrences, [non_recurrant])