Exemplo n.º 1
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), [])
Exemplo n.º 2
0
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')
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 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)))])
Exemplo n.º 7
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)))])
Exemplo n.º 8
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), [])
Exemplo n.º 9
0
 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)))])
Exemplo n.º 10
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)))])
Exemplo n.º 11
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)))
     ])
Exemplo n.º 12
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)
Exemplo n.º 13
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 = next(transmissions)
        except StopIteration:
            return Response(None)
        else:
            serializer = self.get_serializer(transmission, many=False)
            with override(timezone=tz):
                return Response(serializer.data)
Exemplo n.º 14
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)))
         ])
Exemplo n.º 15
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)
Exemplo n.º 16
0
 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,
         })
Exemplo n.º 17
0
 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,
         })
Exemplo n.º 18
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)
Exemplo n.º 19
0
 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)