def test_update_lp_for_sl(self): tv = TeamVideo.objects.get(id=2) sl = SubtitleLanguage(language='en', is_original=True, is_forked=False, is_complete=True, video=tv.video) sl.save() dl = SubtitleLanguage(language='es', is_original=False, is_forked=False, percent_done=40, standard_language=sl, video=tv.video) dl.save() tv = TeamVideo.objects.get(id=2) dl = SubtitleLanguage.objects.get(id=dl.id) dl.percent_done = 50 dl.save() lps = tv.searchable_language_pairs() self.assertEquals(len(settings.ALL_LANGUAGES) * 2 - 3, len(lps)) for lp in lps: match = LANGUAGEPAIR_RE.match(lp) if match.group(1) == 'en': if match.group(2) == 'es': self.assertEquals("M", match.group(3)) else: self.assertEquals("0", match.group(3)) elif match.group(1) == 'es': self.assertEquals("0", match.group(3))
def test_update_tvlp_no_dependent(self): tv = TeamVideo.objects.get(id=2) tv.update_team_video_language_pairs() # this video starts with no languages. self.assertEquals(0, self._tvlp_query_set(tv).count()) sl = SubtitleLanguage( language='en', is_original=True, is_forked=False, is_complete=False, video=tv.video) sl.save() tv = TeamVideo.objects.get(id=2) tv.update_team_video_language_pairs() # the language is not complete, so it's not a good source for translations. self.assertEquals(0, self._tvlp_query_set(tv).count()) sl = tv.video.subtitle_language('en') sl.is_complete = True sl.save() tv = TeamVideo.objects.get(id=2) tv.update_team_video_language_pairs() # complete, so now every language can be translated from this one. tvlps = self._tvlp_query_set(tv) self.assertEquals(len(settings.ALL_LANGUAGES) - 1, len(tvlps)) for tvlp in tvlps: self.assertEquals(0, tvlp.percent_complete)
def _save_original_language(self, video, video_language): original_language = video.subtitle_language() if original_language: if original_language.language: try: language_exists = video.subtitlelanguage_set.exclude(pk=original_language.pk) \ .get(language=video_language) original_language.is_original = False original_language.save() language_exists.is_original = True language_exists.save() except ObjectDoesNotExist: original_language.language = video_language original_language.save() else: try: language_exists = video.subtitlelanguage_set.exclude(pk=original_language.pk) \ .get(language=video_language) latest_version = original_language.latest_version() if latest_version: last_no = latest_version.version_no else: last_no = 0 for version in language_exists.subtitleversion_set.all(): version.language = original_language last_no += 1 version.version_no = last_no version.save() language_exists.delete() except ObjectDoesNotExist: pass original_language.language = video_language original_language.save() else: #original_language always exists, but... try: language_exists = video.subtitlelanguage_set.get( language=video_language) language_exists.is_original = True language_exists.save() except ObjectDoesNotExist: original_language = SubtitleLanguage() original_language.language = video_language original_language.is_original = True original_language.video = video original_language.save()
def test_moderated_subs_pending_count(self): add_moderation(self.video, self.team, self.user) lang = self.video.subtitle_language() [ self._make_subs(lang, 5) for x in xrange(0, 3)] self.assertEquals(self.team.get_pending_moderation().count(), 3) lang = SubtitleLanguage(video=self.video, language="pt", title="a") lang.save() [ self._make_subs(lang, 5) for x in xrange(0, 3)] self.assertEquals(self.team.get_pending_moderation().count(), 6) # make sure pending count is for only one team tv = TeamVideo.objects.exclude(team=self.team).filter(video__moderated_by__isnull=True)[0] o, c = TeamMember.objects.get_or_create(user=self.auth_user, team=tv.team) o.role=TeamMember.ROLE_MANAGER o.save() new_team = tv.team add_moderation(tv.video, tv.team, self.auth_user) lang = SubtitleLanguage(video=tv.video, language="pt", title="a") lang.save() [ self._make_subs(lang, 5) for x in xrange(0, 3)] self.assertEquals(self.team.get_pending_moderation().count(), 6) self.assertEquals(tv.team.get_pending_moderation().count(), 3)
def test_update_sl(self): tv = TeamVideo.objects.get(id=2) sublang = SubtitleLanguage(language='en', is_original=True, is_forked=False, is_complete=False, video=tv.video) sublang.save() sls = tv.searchable_languages() self.assertEquals(len(settings.ALL_LANGUAGES), len(sls)) sublang = SubtitleLanguage.objects.get(id=sublang.id) sublang.is_complete = True sublang.save() tv = TeamVideo.objects.get(id=2) sls = tv.searchable_languages() self.assertEquals(len(settings.ALL_LANGUAGES) - 1, len(sls))
def test_update_lp_no_dependent(self): tv = TeamVideo.objects.get(id=2) # this video starts with no languages. self.assertEquals(0, len(tv.searchable_language_pairs())) sl = SubtitleLanguage(language='en', is_original=True, is_forked=False, is_complete=False, video=tv.video) sl.save() tv = TeamVideo.objects.get(id=2) self.assertEquals(0, len(tv.searchable_language_pairs())) sl = tv.video.subtitle_language('en') sl.is_complete = True sl.save() tv = TeamVideo.objects.get(id=2) lps = tv.searchable_language_pairs() self.assertEquals(len(settings.ALL_LANGUAGES) - 1, len(lps)) # we expect each string to end in "_0" to indicate zero completion. for lp in lps: self.assertEquals("0", LANGUAGEPAIR_RE.match(lp).group(3))
def setUp(self): self.video = Video.objects.all()[:1].get() self.original_language = self.video.subtitle_language() latest_version = self.original_language.latest_version() translation = SubtitleLanguage() translation.video = self.video translation.language = 'uk' translation.is_original = False translation.is_forked = False translation.save() self.translation = translation v = SubtitleVersion() v.language = translation v.datetime_started = datetime.now() v.save() self.translation_version = v for s in latest_version.subtitle_set.all(): s.duplicate_for(v).save()
def test_moderated_subs_reject_one(self): url = reverse("teams:detail", kwargs={"slug": self.team.slug}) response = self.client.get(url) add_moderation(self.video, self.team, self.user) self._login(is_moderator=True) self.client.get("\en\faq") lang = self.video.subtitle_language() [ self._make_subs(lang, 5) for x in xrange(0, 3)] self.assertEquals(self.team.get_pending_moderation().count(), 3) lang = SubtitleLanguage(video=self.video, language="pt", title="a") lang.save() [ self._make_subs(lang, 5) for x in xrange(0, 3)] self.assertEquals(self.team.get_pending_moderation().count(), 6) versions = self.team.get_pending_moderation() version = versions[0] url = reverse("moderation:revision-approve", kwargs={ "team_id":self.team.id, "version_id":version.pk}) response = self.client.post(url, {},follow=True) self.assertEquals(response.status_code, 200) self.assertEquals(self.team.get_pending_moderation().count(), 5) version = SubtitleVersion.objects.get(pk=version.pk) self.assertEquals(version.moderation_status,APPROVED)
def test_moderated_subs_approve_one(self): video = Video.objects.get(pk=4) tv = TeamVideo(video=video, team=self.team,added_by=self.user) tv.save() url = reverse("teams:detail", kwargs={"slug": self.team.slug}) response = self.client.get(url) add_moderation(video, self.team, self.user) self._login(is_moderator=True) self.client.get("\en\faq") lang = video.subtitle_language() [ self._make_subs(lang, 5) for x in xrange(0, 3)] self.assertEquals(self.team.get_pending_moderation().count(), 3) lang = SubtitleLanguage(video=video, language="pt", title="a", standard_language=lang) lang.save() [ self._make_subs(lang, 5) for x in xrange(0, 3)] # we can see the unmoderated sub on the website, response = self.client.get(reverse("videos:translation_history", kwargs={ 'video_id':video.video_id, 'lang':lang.language, 'lang_id':lang.id })) versions = SubtitleVersion.objects.filter(language=lang) latest_version = lang.latest_version(public_only=False) #lang.subtitleversion_set.all()[0] subs = response.context['last_version'].subtitle_set.all() self.assertEquals(latest_version, response.context['last_version']) self.assertTrue(subs[0].subtitle_text.startswith("vno:2 Sub 0 ")) self.assertTrue(len(subs)) self.assertEquals(self.team.get_pending_moderation().count(), 6) versions = self.team.get_pending_moderation() version = versions[0] # after moderation it should not be visible on the widget subs = self._call_rpc_method("fetch_subtitles", lang.video.video_id, lang.pk) self.assertFalse(subs) url = reverse("moderation:revision-approve", kwargs={ "team_id":self.team.id, "version_id":version.pk} ) response = self.client.post(url, {},follow=True, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEquals(response.status_code, 200) data = json.loads(response.content) self.assertTrue(data["success"]) self.team = refresh_obj(self.team) self.assertEquals(self.team.get_pending_moderation().count(), 5) version = SubtitleVersion.objects.get(pk=version.pk) self.assertEquals(version.moderation_status,APPROVED) response = self.client.get(reverse("videos:translation_history", kwargs={ 'video_id':video.video_id, 'lang':lang.language, 'lang_id':lang.id })) sub_1 = response.context['last_version'].subtitle_set.all() self.assertTrue(len(sub_1)) widget_res = self._call_rpc_method("fetch_subtitles", version.video.video_id, version.language.pk) self.assertTrue(widget_res) self.assertTrue(widget_res["subtitles"]) sub = widget_res["subtitles"][0] self.assertTrue(sub["text"].startswith("vno:2 Sub 0 "))
def save_subtitles(self, parser): video = self.cleaned_data['video'] key = str(uuid4()).replace('-', '') video._make_writelock(self.user, key) video.save() if not video.has_original_language(): self._save_original_language(video, self.cleaned_data['video_language']) language = video.subtitle_language(self.cleaned_data['language']) if not language: language = SubtitleLanguage(video=video, is_original=False, is_forked=True) language.language = self.cleaned_data['language'] language.save() try: old_version = language.subtitleversion_set.all()[:1].get() version_no = old_version.version_no + 1 except ObjectDoesNotExist: old_version = None version_no = 0 if not self.is_version_same(old_version, parser): version = SubtitleVersion(language=language, version_no=version_no, datetime_started=datetime.now(), user=self.user, note=u'Uploaded', is_forked=True, time_change=1, text_change=1) version.save() ids = [] for i, item in enumerate(parser): id = int(random.random() * 10e12) while id in ids: id = int(random.random() * 10e12) ids.append(id) caption = Subtitle(**item) caption.version = version caption.subtitle_id = str(id) caption.subtitle_order = i + 1 caption.save() version.save() version.update_percent_done() language.update_complete_state() language.save() if language.is_original: video.update_complete_state() video.release_writelock() video.save() return language