示例#1
0
 def test_unicode_in_and_out(self):
     # load the srt file
     fixtures_dir = os.path.join(settings.PROJECT_ROOT,
                                 'apps/subtitles/fixtures')
     rst_data = open(os.path.join(fixtures_dir, 'unicode.srt'), 'r')
     # upload it
     form = SubtitlesUploadForm(self.user,
                                self.video,
                                True,
                                data={
                                    'language_code': 'en',
                                },
                                files={
                                    'draft':
                                    SimpleUploadedFile(
                                        rst_data.name, rst_data.read())
                                })
     self.assertTrue(form.is_valid())
     version = form.save()
     # get what's stored to make sure we didn't screw up unicode chars
     storage = version.get_subtitles()
     subs = [x for x in storage.subtitle_items()]
     expected_text = u"Ciò che voglio fare oggi"
     # it's there represented on the dfxp
     self.assertEqual(subs[0].text, expected_text)
     generated = unicode(SRTGenerator(storage))
     # when outputting it, we're getting the same thing back
     self.assertIn(expected_text, generated)
示例#2
0
def upload_subtitles(request):
    if not check_upload_subtitles_permissions(request):
        path = request.get_full_path()
        return redirect_to_login(path)

    output = {'success': False}
    video = Video.objects.get(id=request.POST['video'])
    form = SubtitlesUploadForm(request.user,
                               video,
                               True,
                               request.POST,
                               request.FILES,
                               initial={
                                   'primary_audio_language_code':
                                   video.primary_audio_language_code
                               },
                               allow_all_languages=True)

    try:
        if form.is_valid():
            version = form.save()
            output['success'] = True
            output['next'] = version.subtitle_language.get_absolute_url()
            output['msg'] = ugettext(
                u'Thank you for uploading. '
                u'It may take a minute or so for your subtitles to appear.')
        else:
            output['errors'] = form.get_errors()
    except AlreadyEditingException, e:
        output['errors'] = {'__all__': [force_unicode(e.msg)]}
示例#3
0
文件: views.py 项目: thi517/unisubs
    def get(self, request, video_id, language_code):
        self.video = get_object_or_404(Video, video_id=video_id)
        self.team_video = self.video.get_team_video()
        self.language_code = language_code
        self.user = request.user
        self.calc_base_language()
        self.calc_editing_language()
        self.workflow = get_workflow(self.video)

        if (not self.check_can_edit() or not self.check_can_writelock()
                or not self.assign_task_for_editor()):
            if 'team' in self.request.GET:
                qs = '?{}'.format(urlencode({'team':
                                             self.request.GET['team']}))
                return redirect(self.video.get_absolute_url() + qs)
            return redirect(self.video)

        self.editing_language.writelock(self.user, save=True)
        self.editing_version = self.editing_language.get_tip(public=False)
        # we ignore forking because even if it *is* a fork, we still want to
        # show the user the rererence languages:
        self.translated_from_version = self.editing_language.\
            get_translation_source_version(ignore_forking=True)
        self.languages = self.video.newsubtitlelanguage_set.annotate(
            num_versions=Count('subtitleversion'))
        editor_data = self.get_editor_data()
        self.experimental = 'experimental' in request.GET

        context = {
            'title':
            self.get_title(),
            'video':
            self.video,
            'DEBUG':
            settings.DEBUG,
            'language':
            self.editing_language,
            'other_languages':
            self.languages,
            'version':
            self.editing_version,
            'translated_from_version':
            self.translated_from_version,
            'experimental':
            self.experimental,
            'upload_subtitles_form':
            SubtitlesUploadForm(
                request.user,
                self.video,
                initial={'language_code': self.editing_language.language_code},
                allow_all_languages=True),
        }
        self.handle_task(context, editor_data)
        context['editor_data'] = json.dumps(editor_data, indent=4)

        if self.experimental:
            return render(request, "experimental-editor/editor.html", context)
        else:
            return render(request, "editor/editor.html", context)
示例#4
0
    def get(self, request, video_id, language_code):
        self.video = get_object_or_404(Video, video_id=video_id)
        self.team_video = self.video.get_team_video()
        self.language_code = language_code
        self.user = request.user
        self.calc_base_language()
        self.calc_editing_language()
        self.workflow = get_workflow(self.video)

        if (not self.check_can_edit() or not self.check_can_writelock()
                or not self.assign_task_for_editor()):
            return redirect(self.video)

        self.editing_language.writelock(self.user,
                                        self.request.browser_id,
                                        save=True)
        self.editing_version = self.editing_language.get_tip(public=False)
        # we ignore forking because even if it *is* a fork, we still want to
        # show the user the rererence languages:
        self.translated_from_version = self.editing_language.\
            get_translation_source_version(ignore_forking=True)
        self.languages = self.video.newsubtitlelanguage_set.annotate(
            num_versions=Count('subtitleversion'))
        editor_data = self.get_editor_data()

        context = {
            'title':
            self.get_title(),
            'video':
            self.video,
            'DEBUG':
            settings.DEBUG,
            'language':
            self.editing_language,
            'other_languages':
            self.languages,
            'version':
            self.editing_version,
            'translated_from_version':
            self.translated_from_version,
            'GOOGLE_ANALYTICS_ADDITIONS':
            self.get_analytics_additions(),
            'upload_subtitles_form':
            SubtitlesUploadForm(
                request.user,
                self.video,
                initial={'language_code': self.editing_language.language_code},
                allow_all_languages=True),
        }
        self.handle_task(context, editor_data)
        context['editor_data'] = json.dumps(editor_data, indent=4)

        return render(request, "editor/editor.html", context)
示例#5
0
def upload_subtitles(context, video):
    context['video'] = video
    initial = {}

    current_language = context.get('language')
    if current_language:
        initial['language_code'] = current_language.language_code

    if video.primary_audio_language_code:
        initial[
            'primary_audio_language_code'] = video.primary_audio_language_code

    context['form'] = SubtitlesUploadForm(context['user'],
                                          video,
                                          initial=initial)

    return context
示例#6
0
    def test_verify_no_translation_conflict(self):
        # we'll have baseline subs in English and German.
        # At first we have a French from german, then
        # we try to upload French from English, should fail
        en_version = self.en.add_version(subtitles=make_subtitle_set('en'))
        de_version = self.de.add_version(subtitles=make_subtitle_set('ge'))
        fr_version = self.fr.add_version(subtitles=make_subtitle_set('fr'),
                                         parents=[de_version])

        self.fr = refresh(self.fr)
        self.assertEqual(self.fr.subtitleversion_set.full().count(), 1)
        self.assertEqual(self.fr.get_translation_source_language_code(), 'de')
        f = SubtitlesUploadForm(self.user, self.video)
        self.assertRaises(ValidationError, f._verify_no_translation_conflict,
                          self.fr, 'en')

        # Shut up, Pyflakes.
        assert en_version and de_version and fr_version