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')
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')
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', })
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'])
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
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"})
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'] )
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
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', })