Пример #1
0
    def rearrange_episodes(self, after, calendar):
        """
        Update the issue_date of episodes from a given date
        """
        episodes = Episode.objects.unfinished(self, after)
        dates = next_dates(calendar, self, after)

        # Further dates and episodes available -> re-order
        while True:
            try:
                date = dates.next()
                episode = episodes.next()
            except StopIteration:
                break
            else:
                episode.issue_date = date
                episode.save()

        # No further dates available -> unschedule
        while True:
            try:
                episode = episodes.next()
            except StopIteration:
                break
            else:
                episode.issue_date = None
                episode.save()
Пример #2
0
    def rearrange_episodes(self, after, calendar):
        """
        Update the issue_date of episodes from a given date
        """
        episodes = Episode.objects.unfinished(self, after)
        dates = next_dates(calendar, self, after)

        # Further dates and episodes available -> re-order
        while True:
            try:
                date = next(dates)
                episode = next(episodes)
            except StopIteration:
                break
            else:
                episode.issue_date = date
                episode.save()

        # No further dates available -> unschedule
        while True:
            try:
                episode = next(episodes)
            except StopIteration:
                break
            else:
                episode.issue_date = None
                episode.save()
Пример #3
0
    def clean_programme(self):
        programme = self.cleaned_data['programme']
        now = timezone.now()
        if not self.instance.pk:
            last_episode = Episode.objects.last(programme)
            if last_episode:
                if last_episode.issue_date:
                    after = last_episode.issue_date + programme.runtime
                    if after < now:
                        after = now
                else:
                    raise forms.ValidationError(_('There are no available schedules.'))
            else:
                after = now

            try:
                next_dates(Calendar.get_active(), programme, after).next()
            except StopIteration:
                raise forms.ValidationError(_('There are no available schedules.'))
        return programme
Пример #4
0
    def test_available_dates_after(self):
        Schedule.objects.create(
            programme=self.programme,
            calendar=self.calendar,
            type="L",
            start_dt=utc.localize(datetime.datetime(2015, 1, 6, 16, 0, 0)),
            recurrences=recurrence.Recurrence(
                rrules=[recurrence.Rule(recurrence.WEEKLY)]))

        dates = next_dates(self.calendar, self.programme, utc.localize(datetime.datetime(2015, 1, 5)))
        self.assertEqual(next(dates), utc.localize(datetime.datetime(2015, 1, 5, 14, 0)))
        self.assertEqual(next(dates), utc.localize(datetime.datetime(2015, 1, 6, 14, 0)))
        self.assertEqual(next(dates), utc.localize(datetime.datetime(2015, 1, 6, 16, 0)))
Пример #5
0
 def save_model(self, request, obj, form, change):
     if not obj.pk:
         programme = obj.programme
         last_episode = Episode.objects.last(programme)
         now = timezone.now()
         if last_episode:
             after = last_episode.issue_date + programme.runtime
             if after < now:
                 after = now
         else:
             after = now
         date = next(next_dates(Calendar.get_active(), programme, after))
         Episode.objects.create_episode(
             episode=obj, last_episode=last_episode,
             date=date, programme=programme)
     else:
         obj.save()
Пример #6
0
 def save_model(self, request, obj, form, change):
     if not obj.pk:
         programme = obj.programme
         last_episode = Episode.objects.last(programme)
         now = timezone.now()
         if last_episode:
             after = last_episode.issue_date + programme.runtime
             if after < now:
                 after = now
         else:
             after = now
         date = next_dates(Calendar.get_active(), programme, after).next()
         Episode.objects.create_episode(
             episode=obj, last_episode=last_episode,
             date=date, programme=programme)
     else:
         obj.save()
Пример #7
0
    def test_available_dates_after(self):
        Schedule.objects.create(
            programme=self.programme,
            calendar=self.calendar,
            type="L",
            start_dt=utc.localize(datetime.datetime(2015, 1, 6, 16, 0, 0)),
            recurrences=recurrence.Recurrence(
                rrules=[recurrence.Rule(recurrence.WEEKLY)]))

        dates = next_dates(self.calendar, self.programme,
                           utc.localize(datetime.datetime(2015, 1, 5)))
        self.assertEqual(next(dates),
                         utc.localize(datetime.datetime(2015, 1, 5, 14, 0)))
        self.assertEqual(next(dates),
                         utc.localize(datetime.datetime(2015, 1, 6, 14, 0)))
        self.assertEqual(next(dates),
                         utc.localize(datetime.datetime(2015, 1, 6, 16, 0)))
Пример #8
0
    def clean_programme(self):
        programme = self.cleaned_data['programme']
        now = timezone.now()
        if not self.instance.pk:
            last_episode = Episode.objects.last(programme)
            if last_episode:
                if last_episode.issue_date:
                    after = last_episode.issue_date + programme.runtime
                    if after < now:
                        after = now
                else:
                    raise forms.ValidationError(_('There are no available schedules.'))
            else:
                after = now

            try:
                next(next_dates(Calendar.get_active(), programme, after))
            except StopIteration:
                raise forms.ValidationError(_('There are no available schedules.'))
        return programme
Пример #9
0
 def test_available_dates_none(self):
     dates = next_dates(self.calendar, Programme(), timezone.now())
     with self.assertRaises(StopIteration):
         next(dates)
Пример #10
0
 def test_available_dates_none(self):
     dates = next_dates(self.calendar, Programme(), timezone.now())
     with self.assertRaises(StopIteration):
         next(dates)