Exemple #1
0
    def test_filtering(self):
        self.assertTrue(Video.objects.count())
        for video in Video.objects.all():
            video_changed_tasks.delay(video.pk)

        reset_solr()

        rpc = SearchApiClass()

        rdata = RpcMultiValueDict(dict(q=u' ', video_lang='en'))
        result = rpc.search(rdata, self.user, testing=True)['sqs']

        self.assertTrue(len(result))
        for video in VideoIndex.public():
            if video.video_language == 'en':
                self.assertTrue(
                    video.object in [item.object for item in result])

        rdata = RpcMultiValueDict(dict(q=u' ', langs='en'))
        result = rpc.search(rdata, self.user, testing=True)['sqs']

        self.assertTrue(len(result))
        for video in VideoIndex.public():
            if video.languages and 'en' in video.languages:
                self.assertTrue(
                    video.object in [item.object for item in result])
Exemple #2
0
def index(request):
    context = {
        'popular_videos': VideoIndex.get_popular_videos("-today_views")[:VideoIndex.IN_ROW],
        'featured_videos': VideoIndex.get_featured_videos()[:VideoIndex.IN_ROW],
    }
    return render_to_response('index.html', context,
                              context_instance=RequestContext(request))
Exemple #3
0
def index(request):
    context = widget.add_onsite_js_files({})
    context['all_videos'] = Video.objects.count()
    context['popular_videos'] = VideoIndex.get_popular_videos("-today_views")[:VideoIndex.IN_ROW]
    context['featured_videos'] = VideoIndex.get_featured_videos()[:VideoIndex.IN_ROW]
    return render_to_response('index.html', context,
                              context_instance=RequestContext(request))
Exemple #4
0
 def queryset_from_query(self):
     q = self.data.get('q', '').strip()
     if q:
         qs = VideoIndex.public()
         return (qs
                 .auto_query(q)
                 .filter_or(title=qs.query.clean(q)))
     else:
         return VideoIndex.public()
Exemple #5
0
def watch_page(request):

    context = {
        'featured_videos': VideoIndex.get_featured_videos()[:VideoIndex.IN_ROW],
        'popular_videos': VideoIndex.get_popular_videos()[:VideoIndex.IN_ROW],
        'latest_videos': VideoIndex.get_latest_videos()[:VideoIndex.IN_ROW*3],
        'popular_display_views': 'week'
    }
    return render_to_response('videos/watch.html', context,
                              context_instance=RequestContext(request)) 
Exemple #6
0
def index(request):
    context = widget.add_onsite_js_files({})
    context['all_videos'] = Video.objects.count()
    context['popular_videos'] = VideoIndex.get_popular_videos(
        "-today_views")[:VideoIndex.IN_ROW]
    context['featured_videos'] = VideoIndex.get_featured_videos()[:VideoIndex.
                                                                  IN_ROW]
    return render_to_response('index.html',
                              context,
                              context_instance=RequestContext(request))
Exemple #7
0
def watch_page(request):

    context = {
        'featured_videos':
        VideoIndex.get_featured_videos()[:VideoIndex.IN_ROW],
        'popular_videos': VideoIndex.get_popular_videos()[:VideoIndex.IN_ROW],
        'latest_videos':
        VideoIndex.get_latest_videos()[:VideoIndex.IN_ROW * 3],
        'popular_display_views': 'week'
    }
    return render_to_response('videos/watch.html',
                              context,
                              context_instance=RequestContext(request))
Exemple #8
0
def index(request):
    site = current_site(request)
    if request.GET:
        return HttpResponseRedirect(
            site['BASE_URL'] + '%s#/?%s' %
            (reverse('search:index'), urlencode(request.GET)))
    return {'form': SearchForm(sqs=VideoIndex.public())}
Exemple #9
0
def volunteer_page(request):
    # Get the user comfort languages list
    user_langs = get_user_languages_from_request(request)

    relevant = VideoIndex.public().filter(video_language_exact__in=user_langs) \
        .filter_or(languages_exact__in=user_langs) \
        .order_by('-requests_count')

    featured_videos =  relevant.filter(
        featured__gt=datetime.datetime(datetime.MINYEAR, 1, 1)) \
        .order_by('-featured')[:5]

    popular_videos = relevant.order_by('-week_views')[:5]

    latest_videos = relevant.order_by('-edited')[:15]

    requested_videos = relevant.filter(requests_exact__in=user_langs)[:5]

    context = {
        'featured_videos': featured_videos,
        'popular_videos': popular_videos,
        'latest_videos': latest_videos,
        'requested_videos': requested_videos,
        'user_langs': user_langs,
    }

    return render_to_response('videos/volunteer.html',
                              context,
                              context_instance=RequestContext(request))
Exemple #10
0
    def load_popular_videos(self, sort, request, user):
        sort_types = {
            'today': 'today_views',
            'week': 'week_views', 
            'month': 'month_views', 
            'year': 'year_views', 
            'total': 'total_views'
        }
        
        if sort in sort_types:
            display_views = sort
            sort_field = sort_types[sort]
        else:
            display_views = 'week'
            sort_field = 'week_views'            

        popular_videos = VideoIndex.get_popular_videos('-%s' % sort_field)[:VideoIndex.IN_ROW]

        context = {
            'display_views': display_views,
            'video_list': popular_videos
        }
        
        content = render_to_string('videos/_watch_page.html', context, RequestContext(request))
        
        return {
            'content': content
        }
Exemple #11
0
    def load_popular_videos(self, sort, request, user):
        sort_types = {
            'today': 'today_views',
            'week': 'week_views',
            'month': 'month_views',
            'year': 'year_views',
            'total': 'total_views'
        }

        if sort in sort_types:
            display_views = sort
            sort_field = sort_types[sort]
        else:
            display_views = 'week'
            sort_field = 'week_views'

        popular_videos = VideoIndex.get_popular_videos(
            '-%s' % sort_field)[:VideoIndex.IN_ROW]

        context = {
            'display_views': display_views,
            'video_list': popular_videos
        }

        content = render_to_string('videos/_watch_page.html', context,
                                   RequestContext(request))

        return {'content': content}
Exemple #12
0
    def search(self, rdata, user, testing=False):
        sqs = VideoIndex.public()

        rdata['q'] = rdata['q'] or u' '
        q = rdata.get('q')

        if q:
            sqs = SearchForm.apply_query(q, sqs)
            form = SearchForm(rdata, sqs=sqs)
        else:
            form = SearchForm(rdata)

        if form.is_valid():
            qs = form.search_qs(sqs)
        else:
            qs = VideoIndex.public().none()

        #result = [item.object for item in qs]
        #qs1 = Video.objects.filter(title__contains=rdata['q'])
        #for o in qs1:
        #    if not o in result:
        #        print o.title

        display_views = form.get_display_views()
        output = render_page(rdata.get('page', 1),
                             qs,
                             20,
                             display_views=display_views)
        output['sidebar'] = render_to_string('search/_sidebar.html',
                                             dict(form=form, rdata=rdata))

        # Assume we're currently indexing if the number of public
        # indexed vids differs from the count of video objects by
        # more than 1000
        is_indexing = cache.get('is_indexing')
        if is_indexing is None:
            is_indexing = Video.objects.all().count() - VideoIndex.public(
            ).count() > 1000
            cache.set('is_indexing', is_indexing, 300)

        output['is_indexing'] = is_indexing

        if testing:
            output['sqs'] = qs

        return output
Exemple #13
0
def watch_page(request):

    # Assume we're currently indexing if the number of public
    # indexed vids differs from the count of video objects by
    # more than 1000
    is_indexing = cache.get('is_indexing')
    if is_indexing is None:
        is_indexing = Video.objects.all().count() - VideoIndex.public().count() > 1000
        cache.set('is_indexing', is_indexing, 300)

    context = {
        'featured_videos': VideoIndex.get_featured_videos()[:VideoIndex.IN_ROW],
        'latest_videos': VideoIndex.get_latest_videos()[:VideoIndex.IN_ROW*3],
        'is_indexing': is_indexing
    }
    return render_to_response('videos/watch.html', context,
                              context_instance=RequestContext(request))
Exemple #14
0
    def test_search(self):
        reset_solr()
        sqs = VideoIndex.public()
        qs = Video.objects.exclude(title='')
        self.assertTrue(qs.count())

        for video in qs:
            result = SearchForm.apply_query(video.title, sqs)
            self.assertTrue(video in [item.object for item in result])
Exemple #15
0
 def test_metadata_searchable(self):
     version = pipeline.add_subtitles(self.video, 'en', None,
                                      metadata={
                                          'speaker-name': 'Santa',
                                          'location': 'North Pole',
                                      })
     update_search_index.apply(args=(Video, self.video.pk))
     test_utils.update_search_index.run_original()
     qs = VideoIndex.public().filter(text='santa')
     self.assertEquals([v.video_id for v in qs], [self.video.video_id])
Exemple #16
0
    def test_video_lang_filter(self):
        # set up fake faceting info so that we can select english as the
        # filter
        test_utils.get_language_facet_counts.return_value = (
            [('en', 10)], []
        )

        sqs = self.get_search_qs('foo', video_lang='en')
        assert_search_querysets_equal(sqs,
                                      VideoIndex.public()
                                      .auto_query('foo')
                                      .filter_or(title='foo')
                                      .filter(video_language_exact='en'))
Exemple #17
0
 def load_popular_page(self, page, sort, request, user):
     sort_types = {
         'today': 'today_views',
         'week' : 'week_views', 
         'month': 'month_views', 
         'year' : 'year_views', 
         'total': 'total_views'
     }
     
     sort_field = sort_types.get(sort, 'week_views')
     
     sqs = VideoIndex.get_popular_videos('-%s' % sort_field)
     
     return render_page(page, sqs, request=request, display_views=sort)
Exemple #18
0
    def load_popular_page(self, page, sort, request, user):
        sort_types = {
            'today': 'today_views',
            'week': 'week_views',
            'month': 'month_views',
            'year': 'year_views',
            'total': 'total_views'
        }

        sort_field = sort_types.get(sort, 'week_views')

        sqs = VideoIndex.get_popular_videos('-%s' % sort_field)

        return render_page(page, sqs, request=request, display_views=sort)
Exemple #19
0
    def test_search1(self):
        for title in self.titles:
            video = Video.objects.all()[0]
            sqs = VideoIndex.public()
            video.title = title
            video.save()
            reset_solr()

            result = SearchForm.apply_query(video.title, sqs)
            self.assertTrue(video in [item.object for item in result],
                            u"Failed to find video by title: %s" % title)

            result = SearchForm.apply_query(u'BBC', sqs)
            self.assertTrue(
                video in [item.object for item in result],
                u"Failed to find video by 'BBC' with title: %s" % title)
Exemple #20
0
    def save(self, *args, **kwargs):
        obj = super(EditTeamVideoForm, self).save(*args, **kwargs)

        video = obj.video

        author = self.cleaned_data['author'].strip()
        creation_date = VideoMetadata.date_to_string(
            self.cleaned_data['creation_date'])

        self._save_metadata(video, 'Author', author)
        self._save_metadata(video, 'Creation Date', creation_date)
        # store the uploaded thumb on the video itself
        # TODO: simply remove the teamvideo.thumbnail image
        if obj.thumbnail:
            content = ContentFile(obj.thumbnail.read())
            name = obj.thumbnail.url.split('/')[-1]
            video.s3_thumbnail.save(name, content)
            VideoIndex(Video).update_object(video)
Exemple #21
0
    def _search(self, rdata, user):
        form = SearchForm(rdata)

        output = render_page(rdata.get('page', 1), form.queryset(), 20)
        output['sidebar'] = render_to_string('search/_sidebar.html', {
            'form': form,
            'rdata': rdata,
        })

        # Assume we're currently indexing if the number of public
        # indexed vids differs from the count of video objects by
        # more than 1000
        is_indexing = cache.get('is_indexing')
        if is_indexing is None:
            is_indexing = Video.objects.all().count() - VideoIndex.public(
            ).count() > 1000
            cache.set('is_indexing', is_indexing, 300)

        output['is_indexing'] = is_indexing

        return output
Exemple #22
0
 def test_facet_choices(self):
     video_lang_facet_info = [
         ('en', 10),
         ('fr', 20),
     ]
     language_facet_info = [
         ('en', 10),
         ('es', 7),
     ]
     test_utils.get_language_facet_counts.return_value = (
         video_lang_facet_info, language_facet_info
     )
     form = SearchForm(RpcMultiValueDict(dict(q='foo')))
     # we should always list the blank choice first, then the languages
     # with facet info, in descending order
     self.check_choices(form.fields['video_lang'], ['', 'fr', 'en'])
     self.check_choices(form.fields['langs'], ['', 'en', 'es'])
     # check that get_language_facet_counts() was presented with the
     # correct query
     self.check_get_language_facet_counts_query(VideoIndex.public()
                                                .auto_query('foo')
                                                .filter_or(title='foo'))
Exemple #23
0
 def test_facet_choices_empty_query(self):
     form = SearchForm(RpcMultiValueDict(dict(q='')))
     # If we don't have a query, we should use the all videos
     self.check_get_language_facet_counts_query(VideoIndex.public())
Exemple #24
0
 def test_language_only(self):
     assert_search_querysets_equal(self.get_search_qs('', video_lang='en'),
                                   VideoIndex.public()
                                   .filter(video_language_exact='en'))
Exemple #25
0
 def test_simple_query(self):
     assert_search_querysets_equal(self.get_search_qs('foo'),
                                   VideoIndex.public()
                                   .auto_query('foo')
                                   .filter_or(title='foo'))
Exemple #26
0
    def load_latest_page(self, page, request, user):
        sqs = VideoIndex.public().order_by('-created')

        return render_page(page, sqs, request=request)
Exemple #27
0
    def load_featured_page(self, page, request, user):
        sqs = VideoIndex.get_featured_videos()

        return render_page(page, sqs, request=request)
Exemple #28
0
 def _in_solr(self, video):
     return video.video_id in [x.video_id for x in VideoIndex.public()]
Exemple #29
0
 def test_empty_query(self):
     assert_search_querysets_equal(self.get_search_qs(''),
                                   VideoIndex.public().none())
Exemple #30
0
 def empty_queryset(self):
     return VideoIndex.public().none()
Exemple #31
0
 def load_featured_page(self, page, request, user):
     sqs = VideoIndex.get_featured_videos()
     
     return render_page(page, sqs, request=request)    
Exemple #32
0
 def test_clean_input(self):
     assert_search_querysets_equal(self.get_search_qs('foo?'),
                                   VideoIndex.public()
                                   .auto_query('foo?')
                                   .filter_or(title='foo\\?'))