Beispiel #1
0
def calendar_events(request, calendar_slug):
    """
    JSON events feed class conforming to the JQuery FullCalendar and
    jquery-week-calendar CalEvent standard.

    [1]: http://code.google.com/p/jquery-week-calendar/
    [2]: http://arshaw.com/fullcalendar
    Corresponds to: http://arshaw.com/fullcalendar/docs/#calevent-objects
    """
    calendar = get_object_or_404(Calendar, slug=calendar_slug)

    start = request.GET.get('start', None)
    end = request.GET.get('end', None)
    if settings.USE_TZ:
        start = start and datetime.datetime.fromtimestamp(int(start), tzutc())
        end = end and datetime.datetime.fromtimestamp(int(end), tzutc())
    else:
        start = start and datetime.datetime.fromtimestamp(int(start))
        end = end and datetime.datetime.fromtimestamp(int(end))

    events = GET_EVENTS_FUNC(request, calendar)
    period = Period(events, start, end)
    cal_events = []
    for o in period.get_occurrences():
        audience_bits = [x for x in o.event.appropriate_for.get_set_bits() if x in VALID_AUDIENCES]
        audiences = [AUDIENCE_TYPES[x]['name'][0] for x in audience_bits]
        if o.event.all_day:
            start = o.start.date().isoformat()
            diff = o.end - o.start
            end = o.start.date() + datetime.timedelta(days=diff.days)
            end = end.isoformat()
        else:
            start = o.start.isoformat()
            end = o.end.isoformat()
        occurrence_id = encode_occurrence(o)
        cal_event = {
            'id': occurrence_id,
            'allDay': o.event.all_day,
            'event_id': o.event.pk,
            'start': start,
            'end': end,
            'title': "%s %s" % ("".join(audiences), o.title),
            'description': o.description,
            'delete_url': "%s?id=%s&action=cancel" % (reverse('ajax_edit_event', kwargs={'calendar_slug': calendar_slug}), o.event.pk),
            'delete_occurrence_url': "%s?id=%s&action=cancel" % (reverse('ajax_edit_event', kwargs={'calendar_slug': calendar_slug}), occurrence_id),
            'edit_url': reverse('admin:events_event_change', args=(o.event.pk, )),
            'update_url': reverse('ajax_edit_event', kwargs={'calendar_slug': calendar_slug}),
            'update_occurrence_url': "%s?id=%s" % (reverse('ajax_edit_event', kwargs={'calendar_slug': calendar_slug}), occurrence_id),
            'repeating_id': o.event.rule_id,
            'repeating_name': getattr(o.event.rule, "name", ""),
            'repeats': o.event.rule is not None,
            'audiences': audiences,
        }
        cal_events.append(cal_event)

    return JSONResponse(cal_events)
Beispiel #2
0
 def testPeriodFromPool(self):
     """
         Test that period initiated with occurrence_pool returns the same occurrences as "straigh" period
         in a corner case whereby a period's start date is equal to the occurrence's end date
     """
     start = datetime.datetime(2008, 1, 5, 9, 0)
     end = datetime.datetime(2008, 1, 5, 10, 0)
     parent_period = Period(Event.objects.all(), start, end)
     period = Period(parent_period.events, start, end, parent_period.get_persisted_occurrences(), parent_period.occurrences)
     self.assertEquals(parent_period.occurrences, period.occurrences)
Beispiel #3
0
 def testPeriodFromPool(self):
     """
         Test that period initiated with occurrence_pool returns the same occurrences as "straigh" period
         in a corner case whereby a period's start date is equal to the occurrence's end date
     """
     start = datetime.datetime(2008, 1, 5, 9, 0)
     end = datetime.datetime(2008, 1, 5, 10, 0)
     parent_period = Period(Event.objects.all(), start, end)
     period = Period(parent_period.events, start, end,
                     parent_period.get_persisted_occurrences(),
                     parent_period.occurrences)
     self.assertEquals(parent_period.occurrences, period.occurrences)
Beispiel #4
0
class TestPeriod(TestCase):

    def setUp(self):
        rule = Rule(frequency="WEEKLY")
        rule.save()
        cal = Calendar(name="MyCal")
        cal.save()
        data = {
                'title': 'Recent Event',
                'start': datetime.datetime(2008, 1, 5, 8, 0),
                'end': datetime.datetime(2008, 1, 5, 9, 0),
                'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0),
                'rule': rule,
                'calendar': cal
               }
        recurring_event = Event(**data)
        recurring_event.save()
        self.period = Period(events=Event.objects.all(),
                            start=datetime.datetime(2008, 1, 4, 7, 0),
                            end=datetime.datetime(2008, 1, 21, 7, 0))

    def test_get_occurrences(self):
        occurrence_list = self.period.occurrences
        self.assertEqual(["%s to %s" % (o.start, o.end) for o in occurrence_list],
            ['2008-01-05 08:00:00 to 2008-01-05 09:00:00',
             '2008-01-12 08:00:00 to 2008-01-12 09:00:00',
             '2008-01-19 08:00:00 to 2008-01-19 09:00:00'])

    def test_get_occurrence_partials(self):
        occurrence_dicts = self.period.get_occurrence_partials()
        self.assertEqual(
            [(occ_dict["class"],
            occ_dict["occurrence"].start,
            occ_dict["occurrence"].end)
            for occ_dict in occurrence_dicts],
            [
                (1,
                 datetime.datetime(2008, 1, 5, 8, 0),
                 datetime.datetime(2008, 1, 5, 9, 0)),
                (1,
                 datetime.datetime(2008, 1, 12, 8, 0),
                 datetime.datetime(2008, 1, 12, 9, 0)),
                (1,
                 datetime.datetime(2008, 1, 19, 8, 0),
                 datetime.datetime(2008, 1, 19, 9, 0))
            ])

    def test_has_occurrence(self):
        self.assert_(self.period.has_occurrences())
        slot = self.period.get_time_slot(datetime.datetime(2008, 1, 4, 7, 0),
                                         datetime.datetime(2008, 1, 4, 7, 12))
        self.failIf(slot.has_occurrences())
Beispiel #5
0
class TestPeriod(TestCase):
    def setUp(self):
        rule = Rule(frequency="WEEKLY")
        rule.save()
        cal = Calendar(name="MyCal")
        cal.save()
        data = {
            'title': 'Recent Event',
            'start': datetime.datetime(2008, 1, 5, 8, 0),
            'end': datetime.datetime(2008, 1, 5, 9, 0),
            'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0),
            'rule': rule,
            'calendar': cal
        }
        recurring_event = Event(**data)
        recurring_event.save()
        self.period = Period(events=Event.objects.all(),
                             start=datetime.datetime(2008, 1, 4, 7, 0),
                             end=datetime.datetime(2008, 1, 21, 7, 0))

    def test_get_occurrences(self):
        occurrence_list = self.period.occurrences
        self.assertEqual(
            ["%s to %s" % (o.start, o.end) for o in occurrence_list], [
                '2008-01-05 08:00:00 to 2008-01-05 09:00:00',
                '2008-01-12 08:00:00 to 2008-01-12 09:00:00',
                '2008-01-19 08:00:00 to 2008-01-19 09:00:00'
            ])

    def test_get_occurrence_partials(self):
        occurrence_dicts = self.period.get_occurrence_partials()
        self.assertEqual([(occ_dict["class"], occ_dict["occurrence"].start,
                           occ_dict["occurrence"].end)
                          for occ_dict in occurrence_dicts],
                         [(1, datetime.datetime(2008, 1, 5, 8, 0),
                           datetime.datetime(2008, 1, 5, 9, 0)),
                          (1, datetime.datetime(2008, 1, 12, 8, 0),
                           datetime.datetime(2008, 1, 12, 9, 0)),
                          (1, datetime.datetime(2008, 1, 19, 8, 0),
                           datetime.datetime(2008, 1, 19, 9, 0))])

    def test_has_occurrence(self):
        self.assert_(self.period.has_occurrences())
        slot = self.period.get_time_slot(datetime.datetime(2008, 1, 4, 7, 0),
                                         datetime.datetime(2008, 1, 4, 7, 12))
        self.failIf(slot.has_occurrences())
Beispiel #6
0
 def setUp(self):
     rule = Rule(frequency="WEEKLY")
     rule.save()
     cal = Calendar(name="MyCal")
     cal.save()
     data = {
         'title': 'Recent Event',
         'start': datetime.datetime(2008, 1, 5, 8, 0),
         'end': datetime.datetime(2008, 1, 5, 9, 0),
         'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0),
         'rule': rule,
         'calendar': cal
     }
     recurring_event = Event(**data)
     recurring_event.save()
     self.period = Period(events=Event.objects.all(),
                          start=datetime.datetime(2008, 1, 4, 7, 0),
                          end=datetime.datetime(2008, 1, 21, 7, 0))
Beispiel #7
0
 def next_occurrences(self):
     from events.periods import Period
     first = False
     last = False
     for gen in self.generators.all():
         if not first or gen.start < first:
             first = gen.start
         if gen.rule and not gen.end_day:
             last = False # at least one rule is infinite
             break
         if not gen.end_day:
             genend = gen.start
         else:
             genend = gen.end_recurring_period
         if not last or genend > last:
             last = genend
     if last:
         period = Period(self.generators.all(), first, last)
     else:
         period = Period(self.generators.all(), datetime.datetime.now(), datetime.datetime.now() + datetime.timedelta(days=28))		
     return period.get_occurrences()
Beispiel #8
0
 def setUp(self):
     rule = Rule(frequency="WEEKLY")
     rule.save()
     cal = Calendar(name="MyCal")
     cal.save()
     data = {
             'title': 'Recent Event',
             'start': datetime.datetime(2008, 1, 5, 8, 0),
             'end': datetime.datetime(2008, 1, 5, 9, 0),
             'end_recurring_period': datetime.datetime(2008, 5, 5, 0, 0),
             'rule': rule,
             'calendar': cal
            }
     recurring_event = Event(**data)
     recurring_event.save()
     self.period = Period(events=Event.objects.all(),
                         start=datetime.datetime(2008, 1, 4, 7, 0),
                         end=datetime.datetime(2008, 1, 21, 7, 0))
Beispiel #9
0
def calendar_events(request, calendar_slug):
    """
    JSON events feed class conforming to the JQuery FullCalendar and
    jquery-week-calendar CalEvent standard.

    [1]: http://code.google.com/p/jquery-week-calendar/
    [2]: http://arshaw.com/fullcalendar
    Corresponds to: http://arshaw.com/fullcalendar/docs/#calevent-objects
    """
    calendar = get_object_or_404(Calendar, slug=calendar_slug)

    start = request.GET.get('start', None)
    end = request.GET.get('end', None)
    if settings.USE_TZ:
        start = start and datetime.datetime.fromtimestamp(int(start), tzutc())
        end = end and datetime.datetime.fromtimestamp(int(end), tzutc())
    else:
        start = start and datetime.datetime.fromtimestamp(int(start))
        end = end and datetime.datetime.fromtimestamp(int(end))

    events = GET_EVENTS_FUNC(request, calendar)
    period = Period(events, start, end)
    cal_events = []
    for o in period.get_occurrences():
        audience_bits = [
            x for x in o.event.appropriate_for.get_set_bits()
            if x in VALID_AUDIENCES
        ]
        audiences = [AUDIENCE_TYPES[x]['name'][0] for x in audience_bits]
        if o.event.all_day:
            start = o.start.date().isoformat()
            diff = o.end - o.start
            end = o.start.date() + datetime.timedelta(days=diff.days)
            end = end.isoformat()
        else:
            start = o.start.isoformat()
            end = o.end.isoformat()
        occurrence_id = encode_occurrence(o)
        cal_event = {
            'id':
            occurrence_id,
            'allDay':
            o.event.all_day,
            'event_id':
            o.event.pk,
            'start':
            start,
            'end':
            end,
            'title':
            "%s %s" % ("".join(audiences), o.title),
            'description':
            o.description,
            'delete_url':
            "%s?id=%s&amp;action=cancel" %
            (reverse('ajax_edit_event',
                     kwargs={'calendar_slug': calendar_slug}), o.event.pk),
            'delete_occurrence_url':
            "%s?id=%s&amp;action=cancel" %
            (reverse('ajax_edit_event',
                     kwargs={'calendar_slug': calendar_slug}), occurrence_id),
            'edit_url':
            reverse('admin:events_event_change', args=(o.event.pk, )),
            'update_url':
            reverse('ajax_edit_event', kwargs={'calendar_slug':
                                               calendar_slug}),
            'update_occurrence_url':
            "%s?id=%s" %
            (reverse('ajax_edit_event',
                     kwargs={'calendar_slug': calendar_slug}), occurrence_id),
            'repeating_id':
            o.event.rule_id,
            'repeating_name':
            getattr(o.event.rule, "name", ""),
            'repeats':
            o.event.rule is not None,
            'audiences':
            audiences,
        }
        cal_events.append(cal_event)

    return JSONResponse(cal_events)
Beispiel #10
0
 def test_moved_occurrences(self):
     occurrences = self.recurring_event.get_occurrences(start=self.start,
                                 end=self.end)
     moved_occurrence = occurrences[1]
     span_pre = (moved_occurrence.start, moved_occurrence.end)
     span_post = [x + datetime.timedelta(hours=2) for x in span_pre]
     # check has_occurrence on both periods
     period_pre = Period([self.recurring_event], span_pre[0], span_pre[1])
     period_post = Period([self.recurring_event], span_post[0], span_post[1])
     self.assertTrue(period_pre.has_occurrences())
     self.assertFalse(period_post.has_occurrences())
     # move occurrence
     moved_occurrence.move(moved_occurrence.start + datetime.timedelta(hours=2),
                           moved_occurrence.end + datetime.timedelta(hours=2))
     occurrences = self.recurring_event.get_occurrences(start=self.start,
                                 end=self.end)
     self.assertTrue(occurrences[1].moved)
     # check has_occurrence on both periods (the result should be reversed)
     period_pre = Period([self.recurring_event], span_pre[0], span_pre[1])
     period_post = Period([self.recurring_event], span_post[0], span_post[1])
     self.assertFalse(period_pre.has_occurrences())
     self.assertTrue(period_post.has_occurrences())