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)
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)]}
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)
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)
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
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