def testGetPointsRecurUntil(self):
     start = datetime(2007, 12, 22, 9, 0, 0, 0, LOCAL)
     end = datetime(2007, 12, 22, 11, 0, 0, 0, LOCAL)
     event = eventcalendar.Event(
         'uid',
         start,
         end,
         'content',
         rrules=[
             "FREQ=DAILY;UNTIL=20071224T073000Z;WKST=MO",
         ])
     set = eventcalendar.EventSet('uid')
     set.addEvent(event)
     p = set.getPoints(start, end - start)
     self.assertEquals(p[0].dt, start)
     self.assertEquals(p[0].which, 'start')
     self.assertEquals(p[1].which, 'end')
     p = set.getPoints(start, end - start + timedelta(days=4))
     self.assertEquals(len(p), 4)
     self.assertEquals(p[0].dt, start)
     self.assertEquals(p[0].which, 'start')
     self.assertEquals(p[3].dt, end + timedelta(days=1))
     self.assertEquals(p[3].which, 'end')
     p = set.getPoints(start + timedelta(hours=1),
                       end - start + timedelta(hours=22))
     self.assertEquals(len(p), 4)
     self.assertEquals(p[0].dt, start + timedelta(hours=1))
     self.assertEquals(p[0].which, 'start')
     self.assertEquals(p[1].dt, start + timedelta(hours=2))
     self.assertEquals(p[1].which, 'end')
     self.assertEquals(p[3].dt,
                       end + timedelta(days=1) - timedelta(hours=1))
     self.assertEquals(p[3].which, 'end')
     p = set.getPoints(start + timedelta(days=3), end - start)
     self.assertEquals(len(p), 0)
    def testRecurrenceOverMidnight(self):
        """
        Test weekly recurrence rules that starts on one day and spawns to
        the day after, even though they were not planned for the next day.
        """
        def yesterdayDayOfTheWeek(now):
            yesterday = now - timedelta(days=1)
            day = calendar.weekday(yesterday.year, yesterday.month,
                                   yesterday.day)
            return _dayOfTheWeek[day]

        now = datetime.now().replace(microsecond=0)
        start = now - timedelta(days=1) - timedelta(weeks=1)
        end = now + timedelta(hours=1) - timedelta(weeks=1)
        rrules = [
            "FREQ=WEEKLY;BYDAY=" + yesterdayDayOfTheWeek(now) + ";WKST=MO",
        ]
        uid = 'uid'
        content = 'content'
        event = eventcalendar.Event(uid, start, end, content, rrules=rrules)
        eventSet = eventcalendar.EventSet(uid)
        eventSet.addEvent(event)
        p = eventSet.getPoints(event.start + timedelta(weeks=1),
                               event.end - event.start)
        self.assertEquals(p[0].dt, event.start + timedelta(weeks=1))
        self.assertEquals(p[0].which, 'start')
        self.assertEquals(p[1].dt, event.end + timedelta(weeks=1))
        self.assertEquals(p[1].which, 'end')
 def testExWithRecurrence(self):
     """
     Exception to a recurrence rule.
     """
     start = datetime(2007, 12, 22, 9, 0, 0, 0, LOCAL)
     end = datetime(2007, 12, 22, 11, 0, 0, 0, LOCAL)
     uid = 'uid'
     content = 'content'
     rrules = [
         "FREQ=DAILY;WKST=MO",
     ]
     exdate = datetime(2007, 12, 23, 9, 0, 0, 0, LOCAL)
     exdates = [exdate]
     event = eventcalendar.Event(uid,
                                 start,
                                 end,
                                 content,
                                 rrules=rrules,
                                 exdates=exdates)
     set = eventcalendar.EventSet(uid)
     set.addEvent(event)
     p = set.getPoints(start, end - start)
     self.assertEquals(p[0].dt, start)
     self.assertEquals(p[0].which, 'start')
     self.assertEquals(p[1].which, 'end')
     p = set.getPoints(exdate, timedelta(days=1))
     self.failIf(p)
 def testSimple(self):
     """
     Test that the object contains the data. Very simple test.
     """
     now = _now()
     start = now - timedelta(hours=1)
     end = now + timedelta(minutes=1)
     rrules = [
         "FREQ=HOURLY;INTERVAL=2;COUNT=5",
     ]
     exdates = [now + timedelta(hours=2)]
     uid = 'uid'
     e = eventcalendar.Event(uid,
                             start,
                             end,
                             'foo',
                             rrules=rrules,
                             exdates=exdates)
     self.assertEquals(e.start, start)
     self.assertEquals(e.end, end)
     self.assertEquals(e.content, 'foo')
     self.assertEquals(e.rrules, [
         "FREQ=HOURLY;INTERVAL=2;COUNT=5",
     ])
     self.assertEquals(e.exdates, exdates)
Ejemplo n.º 5
0
    def testScheduledNotACallbackWhenCancelled(self):
        now = _now()
        start = now
        end = now + timedelta(hours=1)

        calendar = eventcalendar.Calendar()
        calendar.addEvent(eventcalendar.Event('uid', start, end, 'content'))
        self._scheduler.setCalendar(calendar)
Ejemplo n.º 6
0
    def testScheduledEndCallbackWhenEndInWindowSize(self):
        now = _now()
        start = now - timedelta(hours=1)
        end = now + timedelta(hours=1)

        calendar = eventcalendar.Calendar()
        calendar.addEvent(eventcalendar.Event('uid', start, end, 'content'))
        self._scheduler.setCalendar(calendar)

        resultSeconds = self._scheduler._nextStart
        expectedSeconds = _toSeconds(end - now)
        self.assertEquals(round(resultSeconds / 10.0),
                          round(expectedSeconds / 10.0))
Ejemplo n.º 7
0
    def testDefaultScheduledCallbackWhenBeforeAndAfterTheWindowSize(self):
        now = _now()
        start = now - timedelta(days=1)
        end = now + timedelta(days=2)

        calendar = eventcalendar.Calendar()
        calendar.addEvent(eventcalendar.Event('uid', start, end, 'content'))
        self._scheduler.setCalendar(calendar)

        resultSeconds = self._scheduler._nextStart
        expectedSeconds = _toSeconds(self._scheduler.windowSize) / 2
        self.assertEquals(round(resultSeconds / 10.0),
                          round(expectedSeconds / 10.0))
 def testGetPoints(self):
     start = datetime(2007, 12, 22, 9, 0, 0, 0, LOCAL)
     end = datetime(2007, 12, 22, 11, 0, 0, 0, LOCAL)
     eventSet1 = eventcalendar.EventSet('uid1')
     eventSet2 = eventcalendar.EventSet('uid2')
     event1 = eventcalendar.Event('uid1', start, end, 'content')
     eventSet1.addEvent(event1)
     event2 = eventcalendar.Event('uid2', start, end, 'content')
     eventSet2.addEvent(event2)
     rid = self._events[0].get('RECURRENCE-ID')
     self.failUnless(rid)
     riddatetime = parser.parse(str(rid))
     self.failUnless(str(rid).endswith('Z'))
     start = self._events[1].decoded('dtstart')
     self.failUnless(start)
     if start.tzinfo is None:
         tzinfo = tz.gettz(self._events[1]['dtstart'].params['TZID'])
         start = datetime(start.year, start.month, start.day, start.hour,
                          start.minute, start.second, start.microsecond,
                          tzinfo)
     rrulestr = str(self._events[1].get('RRULE'))
     self.failUnless(rrulestr)
     r = rrule.rrulestr(rrulestr, dtstart=start)
     self.failUnless(riddatetime in r)
 def testGetPointSingle(self):
     start = datetime(2007, 12, 22, 9, 0, 0, 0, LOCAL)
     end = datetime(2007, 12, 22, 11, 0, 0, 0, LOCAL)
     uid = 'uid'
     content = 'content'
     event = eventcalendar.Event(uid, start, end, content)
     set = eventcalendar.EventSet(uid)
     set.addEvent(event)
     p = set.getPoints(start, end - start)
     self.assertEquals(p[0].dt, start)
     self.assertEquals(p[1].dt, end)
     p = set.getPoints(start - timedelta(hours=1), timedelta(hours=3))
     self.assertEquals(p[0].dt, start)
     self.assertEquals(p[1].dt, end)
     p = set.getPoints(start + timedelta(minutes=30), timedelta(minutes=60))
     self.assertEquals(p[0].dt, start + timedelta(minutes=30))
     self.assertEquals(p[1].dt, end - timedelta(minutes=30))
Ejemplo n.º 10
0
 def testTimeZones(self):
     """
     Test that when no timezone given to the init parameters,
     the LOCAL timezone is added to them.
     """
     now = datetime.now()
     hour = timedelta(hours=1)
     self.assertEquals(now.tzinfo, None)
     start = now
     end = now + hour
     exdates = [start]
     event = eventcalendar.Event('uid', start, end, 'foo', exdates=exdates)
     self.assertEquals(event.start.tzinfo, UTC)
     self.assertEquals(event.start, start.replace(tzinfo=UTC))
     self.assertEquals(event.end.tzinfo, UTC)
     self.assertEquals(event.end, end.replace(tzinfo=UTC))
     self.assertEquals(event.exdates[0].tzinfo, UTC)
     self.assertEquals(event.exdates[0], exdates[0].replace(tzinfo=UTC))
Ejemplo n.º 11
0
    def testComparison(self):
        """
        Test the operators: < > ==
        """
        now = _now()
        hour = timedelta(hours=1)

        self.failUnless(
            eventcalendar.Event('uid', now, now + hour, 'foo') <
            eventcalendar.Event('uid', now + hour, now + 2 * hour, 'foo'))
        self.failUnless(
            eventcalendar.Event('uid', now, now + hour, 'foo') ==
            eventcalendar.Event('uid', now, now + hour, 'foo'))
        self.failUnless(
            eventcalendar.Event('uid', now + hour, now + 2 * hour, 'foo') >
            eventcalendar.Event('uid', now, now + hour, 'foo'))
Ejemplo n.º 12
0
    def testUnsubscribe(self):
        # create a list to store subscription call results
        calls = []
        started = lambda c: calls.append(('started', c.content))
        ended = lambda c: calls.append(('ended', c.content))
        sid = self._scheduler.subscribe(started, ended)
        self._scheduler.unsubscribe(sid)

        now = _now()
        start = now - timedelta(hours=1)
        end = now + timedelta(minutes=1)

        calendar = eventcalendar.Calendar()
        self.assertEquals(calls, [])
        calendar.addEvent(eventcalendar.Event('uid', start, end, 'content'))

        self._scheduler.setCalendar(calendar)
        self.assertEquals(calls, [])

        eis = self._scheduler.getCalendar().getActiveEventInstances()
        self.failUnless(eis)
        self.assertEquals(eis[0].event.content, 'content')
Ejemplo n.º 13
0
 def testGetPointsRecur(self):
     start = datetime(2007, 12, 22, 9, 0, 0, 0, LOCAL)
     end = datetime(2007, 12, 22, 11, 0, 0, 0, LOCAL)
     uid = 'uid'
     content = 'content'
     rrules = [
         "FREQ=DAILY;WKST=MO",
     ]
     event = eventcalendar.Event(uid, start, end, content, rrules=rrules)
     set = eventcalendar.EventSet(uid)
     set.addEvent(event)
     p = set.getPoints(start, end - start)
     self.assertEquals(p[0].dt, start)
     self.assertEquals(p[0].which, 'start')
     self.assertEquals(p[1].which, 'end')
     p = set.getPoints(start + timedelta(days=2), end - start)
     self.assertEquals(p[0].dt, start + timedelta(days=2))
     self.assertEquals(p[0].which, 'start')
     self.assertEquals(p[1].which, 'end')
     p = set.getPoints(end, timedelta(days=1))
     self.assertEquals(len(p), 2)
     self.assertNotEquals(p[0].dt, end)
Ejemplo n.º 14
0
 def testExAsStartDateWithRecurrence(self):
     """
     Exception to a recurrence rule.
     """
     start = datetime(2007, 12, 22, 9, 0, 0, 0, LOCAL)
     end = datetime(2007, 12, 22, 11, 0, 0, 0, LOCAL)
     uid = 'uid'
     content = 'content'
     rrules = [
         "FREQ=DAILY;WKST=MO",
     ]
     exdate = start
     exdates = [exdate]
     event = eventcalendar.Event(uid,
                                 start,
                                 end,
                                 content,
                                 rrules=rrules,
                                 exdates=exdates)
     set = eventcalendar.EventSet(uid)
     set.addEvent(event)
     p = set.getPoints(start, end - start)
     self.failIf(p)
    def testSubscribe(self):
        # create a list to store subscription call results
        calls = []
        started = lambda ei: calls.append(('started', ei.event.content))
        ended = lambda ei: calls.append(('ended', ei.event.content))
        sid = self._scheduler.subscribe(started, ended)
        self.assertEquals(calls, [])

        # create a calendar and put a currently active event on it
        calendar = eventcalendar.Calendar()
        now = _now()
        start = now - timedelta(hours=1)
        end = now + timedelta(minutes=1)

        calendar.addEvent(eventcalendar.Event('uid', start, end, 'foo'))
        self._scheduler.setCalendar(calendar)

        # verify that we gat a start call for the active event instance
        self.assertEquals(calls, [('started', 'foo')])

        eis = self._scheduler.getCalendar().getActiveEventInstances()

        self.assertEventAttribsEqual(eis[0].event, start, end, 'foo',
                                     None, None)

        # now set a new empty calendar on the scheduler
        calendar = eventcalendar.Calendar()
        self._scheduler.setCalendar(calendar)

        # make sure we got an end call for the previously active event instance
        self.assertEquals(calls, [('started', 'foo'),
                                  ('ended', 'foo')])
        eis = self._scheduler.getCalendar().getActiveEventInstances()
        self.failIf(eis,
            'Empty calendar so should not have active event instances')

        self._scheduler.unsubscribe(sid)