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 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 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 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')