def test_at(self): now = Transmission.at( utc.localize(datetime.datetime(2015, 1, 6, 11, 59, 59))) self.assertListEqual( [(t.slug, t.start) for t in list(now)], [('the-best-wine', utc.localize(datetime.datetime(2015, 1, 6, 11, 0, 0)))]) now = Transmission.at( utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0))) self.assertListEqual( [(t.slug, t.start) for t in list(now)], [('local-gossips', utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0)))]) now = Transmission.at( utc.localize(datetime.datetime(2015, 1, 6, 12, 59, 59))) self.assertListEqual( [(t.slug, t.start) for t in list(now)], [('local-gossips', utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0)))]) now = Transmission.at( utc.localize(datetime.datetime(2015, 1, 6, 13, 0, 0))) self.assertListEqual(list(now), [])
def recording_schedules(request): podcast_config = PodcastConfiguration.get_global() default_tz = timezone.get_default_timezone() start = default_tz.localize(datetime.datetime.strptime(request.GET.get('start'), '%Y-%m-%d %H:%M:%S')) next_hours = int(request.GET.get("next_hours") or podcast_config.next_events) json_list = [] next_transmissions = Transmission.between( start, start + datetime.timedelta(hours=next_hours), schedules=Schedule.objects.filter(calendar__is_active=True, type='L') ) for transmission in next_transmissions: try: episode = Episode.objects.get(issue_date=transmission.start, programme=transmission.programme) except Episode.DoesNotExist: episode = Episode.objects.create_episode(transmission.start, transmission.programme) issue_date = transform_dt_to_default_tz(transmission.start) start_dt = issue_date + datetime.timedelta(seconds=podcast_config.start_delay) duration = transmission.schedule.runtime.seconds - podcast_config.start_delay - podcast_config.end_delay json_entry = { 'id': transmission.programme.id, 'issue_date': issue_date.strftime('%Y-%m-%d %H-%M-%S'), 'start': start_dt.strftime('%Y-%m-%d %H-%M-%S'), 'duration': str(duration), 'genre': transmission.programme.get_category_display(), 'programme_name': transmission.programme.slug, 'title': episode.title, 'author': transmission.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 list(self, request, *args, **kwargs): data = TransmissionForm(request.query_params) if not data.is_valid(): raise DRFValidationError(data.errors) requested_timezone = data.cleaned_data.get('timezone') after = data.cleaned_data['after'] before = data.cleaned_data['before'] tz = requested_timezone or pytz.utc after_date = tz.localize(datetime.datetime.combine(after, datetime.time())) before_date = tz.localize(datetime.datetime.combine(before, datetime.time(23, 59, 59))) # Apply filters to the queryset schedules = self.filter_queryset(self.get_queryset()) # Filter by active calendar if that filter was not provided if not data.cleaned_data.get('calendar'): schedules = schedules.filter(calendar__is_active=True) transmissions = Transmission.between( after_date, before_date, schedules=schedules ) serializer = self.get_serializer(transmissions, many=True) with override(timezone=tz): return Response(serializer.data)
def now(self, request): tz = None or pytz.utc # TODO check for a tz? now = utils.timezone.now() transmissions = Transmission.at(now) serializer = self.serializer_class(transmissions, many=True) with override(timezone=tz): return Response(serializer.data)
def list(self, request, *args, **kwargs): data = TransmissionForm(request.query_params) if not data.is_valid(): raise DRFValidationError(data.errors) requested_timezone = data.cleaned_data.get('timezone') after = data.cleaned_data['after'] before = data.cleaned_data['before'] tz = requested_timezone or pytz.utc after_date = tz.localize( datetime.datetime.combine(after, datetime.time())) before_date = tz.localize( datetime.datetime.combine(before, datetime.time(23, 59, 59))) # Apply filters to the queryset schedules = self.filter_queryset(self.get_queryset()) # Filter by active calendar if that filter was not provided if not data.cleaned_data.get('calendar'): schedules = schedules.filter(calendar__is_active=True) transmissions = Transmission.between(after_date, before_date, schedules=schedules) serializer = self.get_serializer(transmissions, many=True) with override(timezone=tz): return Response(serializer.data)
def test_between_by_queryset(self): between = Transmission.between( utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0)), utc.localize(datetime.datetime(2015, 1, 6, 17, 0, 0)), schedules=Schedule.objects.filter( calendar=self.another_calendar).all()) self.assertListEqual( [(t.slug, t.start) for t in list(between)], [('classic-hits', utc.localize(datetime.datetime(2015, 1, 6, 16, 30, 0)))])
def test_between(self): between = Transmission.between( utc.localize(datetime.datetime(2015, 1, 6, 11, 0, 0)), utc.localize(datetime.datetime(2015, 1, 6, 17, 0, 0))) self.assertListEqual( [(t.slug, t.start) for t in list(between)], [('the-best-wine', utc.localize(datetime.datetime(2015, 1, 6, 11, 0))), ('local-gossips', utc.localize(datetime.datetime(2015, 1, 6, 12, 0))), ('classic-hits', utc.localize(datetime.datetime(2015, 1, 6, 14, 0)))])
def test_at(self): now = Transmission.at(utc.localize(datetime.datetime(2015, 1, 6, 11, 59, 59))) self.assertListEqual( [(t.slug, t.start) for t in list(now)], [('the-best-wine', utc.localize(datetime.datetime(2015, 1, 6, 11, 0, 0)))]) now = Transmission.at(utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0))) self.assertListEqual( [(t.slug, t.start) for t in list(now)], [('local-gossips', utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0)))]) now = Transmission.at(utc.localize(datetime.datetime(2015, 1, 6, 12, 59, 59))) self.assertListEqual( [(t.slug, t.start) for t in list(now)], [('local-gossips', utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0)))]) now = Transmission.at(utc.localize(datetime.datetime(2015, 1, 6, 13, 0, 0))) self.assertListEqual(list(now), [])
def test_between_by_queryset(self): between = Transmission.between( utc.localize(datetime.datetime(2015, 1, 6, 12, 0, 0)), utc.localize(datetime.datetime(2015, 1, 6, 17, 0, 0)), schedules=Schedule.objects.filter( calendar=self.another_calendar).all()) self.assertListEqual( [(t.slug, t.start) for t in list(between)], [('classic-hits', utc.localize(datetime.datetime(2015, 1, 6, 16, 30, 0)))])
def test_between_includes_started_episode(self): between = Transmission.between( utc.localize(datetime.datetime(2014, 1, 2, 0, 0, 0)), utc.localize(datetime.datetime(2014, 1, 3, 23, 59, 59)) ) self.assertListEqual( [(t.slug, t.start) for t in list(between)], [('classic-hits', utc.localize(datetime.datetime(2014, 1, 1, 23, 30, 0))), # Not finished yet ('classic-hits', utc.localize(datetime.datetime(2014, 1, 2, 0, 30, 0))), ('classic-hits', utc.localize(datetime.datetime(2014, 1, 2, 23, 30, 0))), ('classic-hits', utc.localize(datetime.datetime(2014, 1, 3, 23, 30, 0)))])
def test_between(self): between = Transmission.between( utc.localize(datetime.datetime(2015, 1, 6, 11, 0, 0)), utc.localize(datetime.datetime(2015, 1, 6, 17, 0, 0))) self.assertListEqual([(t.slug, t.start) for t in list(between)], [ ('the-best-wine', utc.localize(datetime.datetime( 2015, 1, 6, 11, 0))), ('local-gossips', utc.localize(datetime.datetime( 2015, 1, 6, 12, 0))), ('classic-hits', utc.localize(datetime.datetime(2015, 1, 6, 14, 0))) ])
def now(self, request): data = TimezoneForm(request.query_params) if not data.is_valid(): raise DRFValidationError(data.errors) requested_timezone = data.cleaned_data.get('timezone') tz = requested_timezone or pytz.utc now = utils.timezone.now() transmissions = Transmission.at(now) try: transmission = transmissions.next() except StopIteration: return Response(None) else: serializer = self.get_serializer(transmission, many=False) with override(timezone=tz): return Response(serializer.data)
def now(self, request): data = TimezoneForm(request.query_params) if not data.is_valid(): raise DRFValidationError(data.errors) requested_timezone = data.cleaned_data.get('timezone') tz = requested_timezone or pytz.utc now = utils.timezone.now() transmissions = Transmission.at(now) try: transmission = next(transmissions) except StopIteration: return Response(None) else: serializer = self.get_serializer(transmission, many=False) with override(timezone=tz): return Response(serializer.data)
def test_between_includes_started_episode(self): between = Transmission.between( utc.localize(datetime.datetime(2014, 1, 2, 0, 0, 0)), utc.localize(datetime.datetime(2014, 1, 3, 23, 59, 59))) self.assertListEqual( [(t.slug, t.start) for t in list(between)], [ ('classic-hits', utc.localize(datetime.datetime(2014, 1, 1, 23, 30, 0))), # Not finished yet ('classic-hits', utc.localize(datetime.datetime(2014, 1, 2, 0, 30, 0))), ('classic-hits', utc.localize(datetime.datetime(2014, 1, 2, 23, 30, 0))), ('classic-hits', utc.localize(datetime.datetime(2014, 1, 3, 23, 30, 0))) ])
def index(request): now = timezone.now() transmissions_between = Transmission.between( now, now + datetime.timedelta(hours=+16)) next_transmissions = [] try: live_transmission = next(transmissions_between) if live_transmission.start <= now < live_transmission.end: percentage = int( round((now - live_transmission.start).total_seconds() / (live_transmission.end - live_transmission.start).total_seconds() * 100)) else: next_transmissions.append(live_transmission) live_transmission = None percentage = None except StopIteration: live_transmission = None percentage = None try: max_num_of_next_transmissions = 6 - len(next_transmissions) for num in range(max_num_of_next_transmissions): next_transmissions.append(next(transmissions_between)) except StopIteration: pass other_programmes = Programme.objects.filter( Q(end_date__gte=now) | Q(end_date__isnull=True)).order_by('?').all()[:10] latest_episodes = Episode.objects.filter( podcast__isnull=False).select_related('programme').order_by( '-issue_date')[:5] context = { 'now': now, 'percentage': percentage, 'transmission': live_transmission, 'next_transmissions': next_transmissions, 'other_programmes': other_programmes, 'latest_episodes': latest_episodes } return render(request, 'radioco/index.html', context)
def test_transmission(self): serializer = serializers.TransmissionSerializer( Transmission( self.schedule, pytz.utc.localize(datetime.datetime(2015, 1, 6, 14, 0, 0)))) schedule_id = self.schedule.id self.assertDictEqual( serializer.data, { 'id': schedule_id, 'schedule': schedule_id, 'source': None, 'type': u'L', 'start': '2015-01-06T14:00:00Z', 'end': '2015-01-06T15:00:00Z', 'name': u'Classic hits', 'slug': u'classic-hits', 'programme_url': u'/programmes/classic-hits/', 'episode_url': None, })
def test_transmission(self): serializer = serializers.TransmissionSerializer(Transmission( self.schedule, pytz.utc.localize(datetime.datetime(2015, 1, 6, 14, 0, 0))), context=MOCK_CONTEXT) self.assertDictEqual( serializer.data, { 'id': self.schedule.id, 'schedule': self.schedule.id, 'programme': self.schedule.programme.id, 'episode': None, 'source': None, 'type': 'L', 'start': '2015-01-06T14:00:00Z', 'end': '2015-01-06T15:00:00Z', 'name': 'Classic hits', 'slug': 'classic-hits', 'programme_url': 'http://testserver/programmes/classic-hits/', 'episode_url': None, })
def index(request): now = timezone.now() transmissions_between = Transmission.between(now, now + datetime.timedelta(hours=+16)) next_transmissions = [] try: live_transmission = next(transmissions_between) if live_transmission.start <= now < live_transmission.end: percentage = int(round( (now - live_transmission.start).total_seconds() / (live_transmission.end - live_transmission.start).total_seconds() * 100)) else: next_transmissions.append(live_transmission) live_transmission = None percentage = None except StopIteration: live_transmission = None percentage = None try: max_num_of_next_transmissions = 6 - len(next_transmissions) for num in range(max_num_of_next_transmissions): next_transmissions.append(next(transmissions_between)) except StopIteration: pass other_programmes = Programme.objects.filter(Q(end_date__gte=now) | Q(end_date__isnull=True)).order_by('?').all()[:10] latest_episodes = Episode.objects.filter(podcast__isnull=False).select_related('programme').order_by('-issue_date')[:5] context = { 'now': now, 'percentage': percentage, 'transmission': live_transmission, 'next_transmissions': next_transmissions, 'other_programmes': other_programmes, 'latest_episodes': latest_episodes } return render(request, 'radioco/index.html', context)
def setUp(self): dt = utc.localize(datetime.datetime(2015, 1, 6, 14, 0, 0)) self.episode_in_transmission = Episode.objects.create_episode( date=dt, programme=self.programme) self.transmission = Transmission(self.schedule, dt, self.episode_in_transmission)