Example #1
0
    def add_item_elements(self, handler, item):
        """extra elements to the <item> tag"""
        super(ITunesElements, self).add_item_elements(handler, item)

        handler.addQuickElement('itunes:author', 'Air Mozilla')
        handler.addQuickElement('itunes:subtitle', item['subtitle'])
        handler.addQuickElement('itunes:summary', item['summary'])

        data = vidly.get_video_redirect_info(
            item['vidly_tag'],
            'mp4',
            hd=True,  # Maybe this should depend on VidlySubmission
        )
        handler.addQuickElement('enclosure',
                                attrs={
                                    'url': data['url'],
                                    'length': data['length'],
                                    'type': data['type'],
                                })
        handler.addQuickElement('guid',
                                data['url'],
                                attrs={'isPermaLink': 'false'})

        handler.addQuickElement('itunes:duration',
                                format_duration(item['duration']))
        if item['tags']:
            handler.addQuickElement('itunes:keywords', ','.join(item['tags']))
        handler.addQuickElement('itunes:explicit', 'clean')
Example #2
0
    def add_item_elements(self, handler, item):
        """extra elements to the <item> tag"""
        super(ITunesElements, self).add_item_elements(handler, item)

        handler.addQuickElement('itunes:author', 'Air Mozilla')
        handler.addQuickElement('itunes:subtitle', item['subtitle'])
        handler.addQuickElement('itunes:summary', item['summary'])

        data = vidly.get_video_redirect_info(
            item['vidly_tag'],
            'mp4',
            hd=True,  # Maybe this should depend on VidlySubmission
        )
        handler.addQuickElement('enclosure', attrs={
            'url': data['url'],
            'length': data['length'],
            'type': data['type'],
        })
        handler.addQuickElement('guid', data['url'], attrs={
            'isPermaLink': 'false'}
        )

        handler.addQuickElement(
            'itunes:duration',
            format_duration(item['duration'])
        )
        if item['tags']:
            handler.addQuickElement(
                'itunes:keywords',
                ','.join(item['tags'])
            )
        handler.addQuickElement('itunes:explicit', 'clean')
Example #3
0
    def test_get_video_redirect_info(self, rhead):

        head_requests = []

        def mocked_head(url):
            head_requests.append(url)
            if url == 'http://cdn.vidly/file.mp4':
                return Response('',
                                302,
                                headers={
                                    'Content-Type': 'video/mp5',
                                    'Content-Length': '1234567',
                                })
            else:
                return Response('',
                                302,
                                headers={
                                    'Location': 'http://cdn.vidly/file.mp4',
                                })

        rhead.side_effect = mocked_head

        data = vidly.get_video_redirect_info('abc123', 'mp4', hd=True)
        eq_(
            data, {
                'url': 'http://cdn.vidly/file.mp4',
                'length': '1234567',
                'type': 'video/mp5',
            })
Example #4
0
 def get_or_create(cls, tag, video_format, hd):
     qs = cls.objects.filter(tag=tag, video_format=video_format, hd=hd)
     for obj in qs.order_by('-modified'):
         return obj
     data = get_video_redirect_info(tag, video_format, hd)
     return cls.objects.create(tag=tag,
                               hd=hd,
                               video_format=video_format,
                               url=data['url'],
                               size=data['length'],
                               content_type=data['type'])
Example #5
0
    def items(self):
        channels = Channel.objects.filter(
            Q(id=self.channel.id) |
            Q(parent=self.channel.id)
        )
        qs = (
            Event.objects.archived()
            .approved()
            .filter(channels__in=channels)
            .filter(privacy=Event.PRIVACY_PUBLIC)
            .filter(template__name__icontains='vid.ly')
            .filter(template_environment__contains='tag')
            .exclude(duration__isnull=True)
            .order_by('-start_time')
        )[:self.channel.feed_size]

        all_tag_ids = set()
        self.all_tags = defaultdict(list)
        for x in Event.tags.through.objects.filter(event__in=qs):
            self.all_tags[x.event_id].append(x.tag_id)
            all_tag_ids.add(x.tag_id)
        # now `all_tags` is a dict like this:
        #  123: [45, 67]
        # where '123' is an event ID, and 45 and 67 are tag IDs
        # Convert it to something like this:
        #  123: ['tag1', 'tagX']
        tags_qs = (
            Tag.objects
            .filter(id__in=all_tag_ids)
            .values_list('id', 'name')
        )
        all_tag_names = dict(x for x in tags_qs)
        for event_id, tag_ids in self.all_tags.items():
            self.all_tags[event_id] = [
                all_tag_names[x] for x in tag_ids
            ]
        items = []
        for event in qs:
            try:
                vidly_redirect_info = vidly.get_video_redirect_info(
                    event.template_environment['tag'],
                    'mp4',
                    hd=True,
                    # We deliberately make the expiry date a bit random.
                    # This is to prevent the cache to expiry on all of them
                    # at the same time, but instead only some being expired.
                    expires=60 * 60 + 60 * random.randint(1, 10)
                )
            except vidly.VidlyNotFoundError:
                continue
            event._vidly_redirect_info = vidly_redirect_info
            items.append(event)
        return items
Example #6
0
    def test_get_video_redirect_info(self, rhead):

        head_requests = []

        def mocked_head(url):
            head_requests.append(url)
            if url == "http://cdn.vidly/file.mp4":
                return Response("", 302, headers={"Content-Type": "video/mp5", "Content-Length": "1234567"})
            else:
                return Response("", 302, headers={"Location": "http://cdn.vidly/file.mp4"})

        rhead.side_effect = mocked_head

        data = vidly.get_video_redirect_info("abc123", "mp4", hd=True)
        eq_(data, {"url": "http://cdn.vidly/file.mp4", "length": "1234567", "type": "video/mp5"})
Example #7
0
 def get_or_create(cls, tag, video_format, hd):
     qs = cls.objects.filter(
         tag=tag,
         video_format=video_format,
         hd=hd
     )
     for obj in qs.order_by('-modified'):
         return obj
     data = get_video_redirect_info(tag, video_format, hd)
     return cls.objects.create(
         tag=tag,
         hd=hd,
         video_format=video_format,
         url=data['url'],
         size=data['length'],
         content_type=data['type']
     )
Example #8
0
    def items(self):
        channels = Channel.objects.filter(
            Q(id=self.channel.id) | Q(parent=self.channel.id))
        qs = (Event.objects.archived().approved().filter(
            channels__in=channels).filter(privacy=Event.PRIVACY_PUBLIC).filter(
                template__name__icontains='vid.ly').filter(
                    template_environment__contains='tag').exclude(
                        duration__isnull=True).order_by('-start_time')
              )[:self.channel.feed_size]

        all_tag_ids = set()
        self.all_tags = defaultdict(list)
        for x in Event.tags.through.objects.filter(event__in=qs):
            self.all_tags[x.event_id].append(x.tag_id)
            all_tag_ids.add(x.tag_id)
        # now `all_tags` is a dict like this:
        #  123: [45, 67]
        # where '123' is an event ID, and 45 and 67 are tag IDs
        # Convert it to something like this:
        #  123: ['tag1', 'tagX']
        tags_qs = (Tag.objects.filter(id__in=all_tag_ids).values_list(
            'id', 'name'))
        all_tag_names = dict(x for x in tags_qs)
        for event_id, tag_ids in self.all_tags.items():
            self.all_tags[event_id] = [all_tag_names[x] for x in tag_ids]
        items = []
        for event in qs:
            try:
                vidly_redirect_info = vidly.get_video_redirect_info(
                    event.template_environment['tag'],
                    'mp4',
                    hd=True,
                    # We deliberately make the expiry date a bit random.
                    # This is to prevent the cache to expiry on all of them
                    # at the same time, but instead only some being expired.
                    expires=60 * 60 + 60 * random.randint(1, 10))
            except vidly.VidlyNotFoundError:
                continue
            event._vidly_redirect_info = vidly_redirect_info
            items.append(event)
        return items
Example #9
0
    def test_get_video_redirect_info(self, rhead):

        head_requests = []

        def mocked_head(url):
            head_requests.append(url)
            if url == 'http://cdn.vidly/file.mp4':
                return Response('', 302, headers={
                    'Content-Type': 'video/mp5',
                    'Content-Length': '1234567',
                })
            else:
                return Response('', 302, headers={
                    'Location': 'http://cdn.vidly/file.mp4',
                })

        rhead.side_effect = mocked_head

        data = vidly.get_video_redirect_info('abc123', 'mp4', hd=True)
        eq_(data, {
            'url': 'http://cdn.vidly/file.mp4',
            'length': 1234567L,
            'type': 'video/mp5',
        })