def save(self, *args, **kwargs): # rearrange episodes if self.pk is not None: orig = ScheduleBoard.objects.get(pk=self.pk) if orig.start_date != self.start_date or orig.end_date != self.end_date: # Field has changed super(ScheduleBoard, self).save(*args, **kwargs) Episode.rearrange_episodes(programme=None, after=datetime.datetime.now()) else: super(ScheduleBoard, self).save(*args, **kwargs) else: super(ScheduleBoard, self).save(*args, **kwargs)
def create_schedule(request): start = int(request.POST.get('start')) start = datetime.datetime.fromtimestamp(start / 1000.0) emission_type = request.POST.get('type') programme_id = int(request.POST.get('programmeId')) programme = get_object_or_404(Programme, id=programme_id) schedule_board_id = int(request.POST.get('scheduleBoardId')) scheduleBoard = get_object_or_404(ScheduleBoard, id=schedule_board_id) schedule = Schedule(programme=programme, schedule_board=scheduleBoard, day=start.weekday(), start_hour=start.time(), type=emission_type) schedule.clean() schedule.save() Episode.rearrange_episodes(programme, datetime.datetime.now()) return {'scheduleId': schedule.id, 'backgroundColor':background_colours[schedule.type], 'textColor':text_colours[schedule.type], 'type':schedule.type}
def save_model(self, request, obj, form, change): if not obj.pk: programme = obj.programme last_episode = Episode.get_last_episode(programme) now = datetime.datetime.now() if last_episode: after = last_episode.issue_date + programme.runtime if after < now: after = now else: after = now schedule, date = Schedule.get_next_date(programme=programme, after=after) Episode.create_episode(episode=obj, date=date, programme=programme, last_episode=last_episode) else: obj.save()
def submit_recorder(request): programme_id = int(request.GET.get('programme_id')) programme = get_object_or_404(Programme, id=programme_id) date = datetime.datetime.strptime(request.GET.get('date'), '%Y-%m-%d %H-%M-%S') file_name = request.GET.get('file_name') mime_type = request.GET.get('mime_type') length = int(request.GET.get('length')) url = PodcastConfiguration.objects.get().url_source + file_name try: episode = Episode.objects.select_related('programme').get(issue_date=date, programme=programme) except Episode.DoesNotExist: episode = Episode.create_episode(date, programme) duration = episode.programme._runtime try: # can exist but it should have same values # overwrite if episode exists podcast = Podcast.objects.get(episode=episode) podcast.url = url podcast.mime_type = mime_type podcast.length = length podcast.duration = duration podcast.save() except Podcast.DoesNotExist: Podcast.objects.create(episode=episode, url=url, mime_type=mime_type, length=length, duration=duration) return HttpResponse()
def submit_recorder(request): programme_id = int(request.GET.get('programme_id')) programme = get_object_or_404(Programme, id=programme_id) date = datetime.datetime.strptime(request.GET.get('date'), '%Y-%m-%d %H-%M-%S') file_name = request.GET.get('file_name') mime_type = request.GET.get('mime_type') length = int(request.GET.get('length')) url = PodcastConfiguration.objects.get().url_source + file_name try: episode = Episode.objects.select_related('programme').get(issue_date=date, programme=programme) except Episode.DoesNotExist: episode = Episode.create_episode(date, programme) duration = episode.programme._runtime try: # can exist but it should have same values # overwrite if episode exists podcast = Podcast.objects.get(episode=episode) podcast.url = url podcast.mime_type = mime_type podcast.length = length podcast.duration = duration podcast.save() except Podcast.DoesNotExist: Podcast.objects.create(episode=episode, url=url, mime_type=mime_type, length=length, duration=duration) return HttpResponse()
def test_save_episode(self): date_published = datetime.datetime(2014, 1, 31, 0, 0, 0, 0) programme = Programme.objects.create(name="Test programme", synopsis="This is a description", _runtime=60, start_date=datetime.date(2014, 1, 31), current_season=1) episode = Episode.create_episode(date=date_published, programme=programme) self.assertEqual(episode, Episode.objects.get(id=episode.id)) self.assertEqual(programme, Programme.objects.get(id=programme.id)) self.assertEqual(episode.programme, Programme.objects.get(id=episode.programme.id))
def save_model(self, request, obj, form, change): if not obj.pk: programme = obj.programme last_episode = Episode.get_last_episode(programme) now = datetime.datetime.now() if last_episode: after = last_episode.issue_date + programme.runtime if after < now: after = now else: after = now schedule, date = Schedule.get_next_date(programme=programme, after=after) Episode.create_episode(episode=obj, date=date, programme=programme, last_episode=last_episode) else: obj.save()
def change_event(request): start = int(request.POST.get('start')) start = datetime.datetime.fromtimestamp(start / 1000.0) schedule_id = int(request.POST.get('id')) schedule = get_object_or_404(Schedule.objects.select_related('programme'), id=schedule_id) ''' # next episodes from now or when the schedule board starts now = datetime.datetime.now() dt = datetime.datetime.combine(schedule.schedule_board.start_date, datetime.time(0, 0)) if now > dt: dt = now next_episodes = Episode.next_episodes(programme=schedule.programme, hour=schedule.start_hour, after=dt) ''' # change schedule schedule.start_hour = start.time() schedule.day = start.weekday() schedule.clean() schedule.save() Episode.rearrange_episodes(schedule.programme, datetime.datetime.now()) '''
def change_event(request): start = int(request.POST.get('start')) start = datetime.datetime.fromtimestamp(start / 1000.0) schedule_id = int(request.POST.get('id')) schedule = get_object_or_404(Schedule.objects.select_related('programme'), id=schedule_id) ''' # next episodes from now or when the schedule board starts now = datetime.datetime.now() dt = datetime.datetime.combine(schedule.schedule_board.start_date, datetime.time(0, 0)) if now > dt: dt = now next_episodes = Episode.next_episodes(programme=schedule.programme, hour=schedule.start_hour, after=dt) ''' # change schedule schedule.start_hour = start.time() schedule.day = start.weekday() schedule.clean() schedule.save() Episode.rearrange_episodes(schedule.programme, datetime.datetime.now()) '''
def test_save_episode(self): date_published = datetime.datetime(2014, 1, 31, 0, 0, 0, 0) programme = Programme.objects.create(name="Test programme", synopsis="This is a description", _runtime=60, start_date=datetime.date( 2014, 1, 31), current_season=1) episode = Episode.create_episode(date=date_published, programme=programme) self.assertEqual(episode, Episode.objects.get(id=episode.id)) self.assertEqual(programme, Programme.objects.get(id=programme.id)) self.assertEqual(episode.programme, Programme.objects.get(id=episode.programme.id))
def create_schedule(request): start = int(request.POST.get('start')) start = datetime.datetime.fromtimestamp(start / 1000.0) emission_type = request.POST.get('type') programme_id = int(request.POST.get('programmeId')) programme = get_object_or_404(Programme, id=programme_id) schedule_board_id = int(request.POST.get('scheduleBoardId')) scheduleBoard = get_object_or_404(ScheduleBoard, id=schedule_board_id) schedule = Schedule(programme=programme, schedule_board=scheduleBoard, day=start.weekday(), start_hour=start.time(), type=emission_type) schedule.clean() schedule.save() Episode.rearrange_episodes(programme, datetime.datetime.now()) return { 'scheduleId': schedule.id, 'backgroundColor': background_colours[schedule.type], 'textColor': text_colours[schedule.type], 'type': schedule.type }
def clean_programme(self): programme = self.cleaned_data['programme'] now = datetime.datetime.now() if not self.instance.pk: last_episode = Episode.get_last_episode(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 schedule, date = Schedule.get_next_date(programme=programme, after=after) if not date: raise forms.ValidationError(_('There are no available schedules.')) return programme
def recording_schedules(request): start = datetime.datetime.strptime(request.GET.get('start'), '%Y-%m-%d %H:%M:%S') next_hours = request.GET.get("next_hours", None) if not next_hours: next_hours = PodcastConfiguration.objects.get().next_events else: next_hours = int(next_hours) json_list = [] next_schedules, next_dates = Schedule.between(start, start + relativedelta(hours=next_hours), live=True) schedules = [] dates = [] for x in range(len(next_schedules)): for y in range(len(next_dates[x])): schedules.append(next_schedules[x]) dates.append(next_dates[x][y]) # sort if schedules: dates, schedules = (list(t) for t in zip(*sorted(zip(dates, schedules)))) for x in range(len(schedules)): schedule = schedules[x] date = dates[x] # Create the episode to retrieve season and episode number try: episode = Episode.objects.select_related('programme').get(issue_date=date, programme=schedule.programme) except Episode.DoesNotExist: episode = Episode.create_episode(date, schedule.programme) start_date = date + datetime.timedelta(seconds=PodcastConfiguration.objects.get().start_delay) duration = schedule.runtime().seconds - PodcastConfiguration.objects.get().start_delay - PodcastConfiguration.objects.get().end_delay # start = date.strftime("%Y-%m-%dT%H:%M:%S"+utc_str) json_entry = { 'id': schedule.programme.id, 'issue_date': date.strftime('%Y-%m-%d %H-%M-%S'), 'start': start_date.strftime('%Y-%m-%d %H-%M-%S'), 'duration': str(duration), 'genre': schedule.programme.get_category_display(), 'programme_name': schedule.programme.slug, 'title': episode.title, 'author': schedule.programme.name, 'album': _('Season') + ' ' + str(episode.season), 'track': episode.number_in_season } json_list.append(json_entry) return HttpResponse(json.dumps(json_list), content_type='application/json')
def clean_programme(self): programme = self.cleaned_data['programme'] now = datetime.datetime.now() if not self.instance.pk: last_episode = Episode.get_last_episode(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 schedule, date = Schedule.get_next_date(programme=programme, after=after) if not date: raise forms.ValidationError( _('There are no available schedules.')) return programme
def delete_schedule(request): schedule_id = int(request.POST.get('scheduleId')) schedule = get_object_or_404(Schedule.objects.select_related('programme'), id=schedule_id) schedule.delete() Episode.rearrange_episodes(schedule.programme, datetime.datetime.now())
def delete_schedule(request): schedule_id = int(request.POST.get('scheduleId')) schedule = get_object_or_404(Schedule.objects.select_related('programme'), id=schedule_id) schedule.delete() Episode.rearrange_episodes(schedule.programme, datetime.datetime.now())
def delete_ScheduleBoard_handler(sender, **kwargs): Episode.rearrange_episodes(programme=None, after=datetime.datetime.now())