コード例 #1
0
    def test_upload_and_rollbacks(self):
        video = get_video()

        self._assertCounts(video, {})

        self._upload(video, 'en', 'en', None, True, 'test.srt')
        self._upload(video, 'en', 'en', None, True, 'test_fewer_subs.srt')
        self._upload(video, 'fr', 'en', 'en', True, 'test_fewer_subs.srt')
        self._assertCounts(video, {'en': 2, 'fr': 1})

        # We now have:
        #
        # en fr
        #    1
        #   /
        #  /
        # 2
        # |
        # 1

        # Let's sanity check that we can still upload to English now that it has
        # a dependent language (French).
        self._upload(video, 'en', 'en', None, True, 'test_fewer_subs.srt')
        self._assertCounts(video, {'en': 3, 'fr': 1})

        # The translation should now be forked.
        self.assertTrue(video.subtitle_language('fr').is_forked)

        # Now let's roll English back to v1.
        pipeline.rollback_to(video, 'en', 1)
        self._assertCounts(video, {'en': 4, 'fr': 1})

        # And try uploading something on top of the rollback.
        self._upload(video, 'en', 'en', None, True, 'test_fewer_subs.srt')
        self._assertCounts(video, {'en': 5, 'fr': 1})
コード例 #2
0
 def do_submit(self, request):
     if self.subtitle_version.next_version():
         pipeline.rollback_to(
             self.video,
             self.language_code,
             version_number=self.subtitle_version.version_number,
             rollback_author=self.user)
         messages.success(request, ugettext(u'Rollback successful'))
     else:
         messages.error(request,
                        ugettext(u'Can not rollback to the last version'))
コード例 #3
0
def rollback(request, version):
    is_writelocked = version.subtitle_language.is_writelocked
    if not user_can_edit_subtitles(request.user, version.video,
                                   version.subtitle_language.language_code):
        messages.error(
            request,
            _(u"You don't have permission to rollback "
              "this language"))
    elif is_writelocked:
        messages.error(
            request,
            u'Can not rollback now, because someone is editing subtitles.')
    elif not version.next_version():
        messages.error(request,
                       message=u'Can not rollback to the last version')
    else:
        messages.success(request, message=u'Rollback successful')
        version = rollback_to(version.video,
                              version.subtitle_language.language_code,
                              version_number=version.version_number,
                              rollback_author=request.user)
        video_changed_tasks.delay(version.video.id, version.id)
        return redirect(version.subtitle_language.get_absolute_url() +
                        '#revisions')
    return redirect(version)
コード例 #4
0
ファイル: views.py プロジェクト: rnarimani/unisubs
def rollback(request, version):
    # Normally, we only accept POST methods, but the old template code uses
    # GET, so we allow that too.
    if should_use_old_view(request) or request.method == 'POST':
        is_writelocked = version.subtitle_language.is_writelocked
        if not user_can_edit_subtitles(
                request.user, version.video,
                version.subtitle_language.language_code):
            messages.error(
                request,
                _(u"You don't have permission to rollback "
                  "this language"))
        elif is_writelocked:
            messages.error(
                request,
                u'Can not rollback now, because someone is editing subtitles.')
        elif not version.next_version():
            messages.error(request,
                           message=u'Can not rollback to the last version')
        else:
            messages.success(request, message=u'Rollback successful')
            version = rollback_to(version.video,
                                  version.subtitle_language.language_code,
                                  version_number=version.version_number,
                                  rollback_author=request.user)
            video_changed_tasks.delay(version.video.id, version.id)
            return redirect(version.subtitle_language.get_absolute_url() +
                            '#revisions')
    return redirect(version)
コード例 #5
0
ファイル: test_pipeline.py プロジェクト: oaleeapp/EguoWorld
    def test_rollback_authors(self):
        v = self.video
        en1, en2, en3 = self.en1, self.en2, self.en3
        u1, us, anon = self.u1, self.u2, self.anon

        # Rollbacks do not inherit the author of their sources.
        rb = pipeline.rollback_to(v, 'en', 1)
        self.assertEqual(rb.author.id, anon.id)

        rb = pipeline.rollback_to(v, 'en', 2)
        self.assertEqual(rb.author.id, anon.id)

        # The rollback author can be explicitely given.
        rb = pipeline.rollback_to(v, 'en', 3, rollback_author=u1)
        self.assertEqual(rb.author.id, u1.id)

        rb = pipeline.rollback_to(v, 'en', 2, rollback_author=u1)
        self.assertEqual(rb.author.id, u1.id)
コード例 #6
0
ファイル: test_pipeline.py プロジェクト: oaleeapp/EguoWorld
    def test_rollback_parents(self):
        v = self.video

        de1 = pipeline.add_subtitles(v, 'de', [])
        is1 = pipeline.add_subtitles(v, 'is', [])
        is2 = pipeline.add_subtitles(v, 'is', [], parents=[de1])
        is3 = pipeline.add_subtitles(v, 'is', [])

        def _ids(s):
            return set(i.id for i in s)

        self.assertEqual(_ids(is2.parents.full()), _ids([is1, de1]))

        # Rollbacks do not inherit the parents of their sources.
        is4 = pipeline.rollback_to(v, 'is', 1)
        self.assertEqual(_ids(is4.parents.full()), _ids([is3]))

        is5 = pipeline.rollback_to(v, 'is', 2)
        self.assertEqual(_ids(is5.parents.full()), _ids([is4]))
コード例 #7
0
 def test_rollback(self):
     video = VideoFactory()
     v1 = pipeline.add_subtitles(video, 'en', SubtitleSetFactory())
     v2 = pipeline.add_subtitles(video, 'en', SubtitleSetFactory())
     with mock_handler(signals.subtitles_added) as handler:
         v3 = pipeline.rollback_to(video, 'en', v1.version_number)
     assert_true(handler.called)
     assert_equal(
         handler.call_args,
         mock.call(signal=mock.ANY, sender=v3.subtitle_language,
                   version=v3))
コード例 #8
0
ファイル: test_pipeline.py プロジェクト: oaleeapp/EguoWorld
    def test_basic_rollback(self):
        v = self.video
        en1, en2, en3 = self.en1, self.en2, self.en3

        def _ids(s):
            return set(i.id for i in s)

        source = en1
        rb = pipeline.rollback_to(v, 'en', 1)

        self.assertTrue(rb.is_rollback())
        self.assertEqual(rb.get_rollback_source(full=True), en1)

        self.assertEqual(rb.video.id, source.video.id)
        self.assertEqual(rb.subtitle_language.id, source.subtitle_language.id)
        self.assertEqual(rb.language_code, source.language_code)
        self.assertEqual(rb.get_subtitles(), source.get_subtitles())
        self.assertEqual(rb.title, source.title)
        self.assertEqual(rb.description, source.description)
        self.assertEqual(_ids(rb.parents.full()), _ids([en3]))
コード例 #9
0
ファイル: data.py プロジェクト: zenny/unisubs
def make_rollback_to(subtitle_language, version_number):
    return pipeline.rollback_to(subtitle_language.video,
                                subtitle_language.language_code,
                                version_number)
コード例 #10
0
ファイル: test_pipeline.py プロジェクト: oaleeapp/EguoWorld
    def test_rollback_visibility(self):
        v = self.video

        # Fully public subtitle histories result in public rollbacks.
        en1 = pipeline.add_subtitles(v, 'en', [])
        en2 = pipeline.add_subtitles(v, 'en', [])

        rb = pipeline.rollback_to(v, 'en', 1)
        self.assertTrue(rb.is_public())

        is1 = pipeline.add_subtitles(v, 'is', [], visibility='public')
        is2 = pipeline.add_subtitles(v,
                                     'is', [],
                                     visibility='private',
                                     visibility_override='public')

        rb = pipeline.rollback_to(v, 'is', 1)
        self.assertTrue(rb.is_public())

        # Fully private subtitle histories result in private rollbacks.
        de1 = pipeline.add_subtitles(v, 'de', [], visibility='private')
        de2 = pipeline.add_subtitles(v, 'de', [], visibility='private')

        rb = pipeline.rollback_to(v, 'de', 1)
        self.assertTrue(rb.is_private())

        fr1 = pipeline.add_subtitles(v,
                                     'fr', [],
                                     visibility_override='private')
        fr2 = pipeline.add_subtitles(v,
                                     'fr', [],
                                     visibility_override='private')

        rb = pipeline.rollback_to(v, 'fr', 1)
        self.assertTrue(rb.is_private())

        # Histories with a mix of public and private result in public rollbacks.
        pt1 = pipeline.add_subtitles(v, 'pt', [], visibility='public')
        pt2 = pipeline.add_subtitles(v, 'pt', [], visibility='private')

        rb = pipeline.rollback_to(v, 'pt', 1)
        self.assertTrue(rb.is_public())

        pl1 = pipeline.add_subtitles(v, 'pl', [], visibility='private')
        pl2 = pipeline.add_subtitles(v, 'pl', [], visibility='public')

        rb = pipeline.rollback_to(v, 'pl', 1)
        self.assertTrue(rb.is_public())

        ja1 = pipeline.add_subtitles(v, 'ja', [], visibility='private')
        ja2 = pipeline.add_subtitles(v, 'ja', [], visibility='public')
        ja3 = pipeline.add_subtitles(v, 'ja', [], visibility='private')

        rb = pipeline.rollback_to(v, 'ja', 1)
        self.assertTrue(rb.is_public())

        rb = pipeline.rollback_to(v, 'ja', 2)
        self.assertTrue(rb.is_public())

        rb = pipeline.rollback_to(v, 'ja', 3)
        self.assertTrue(rb.is_public())

        # Shut up, Pyflakes.
        assert (en1 and en2 and is1 and is2 and de1 and de2 and fr1 and fr2
                and pt1 and pt2 and pl1 and pl2 and ja1 and ja2 and ja3)
コード例 #11
0
 def test_rollback(self):
     pipeline.add_subtitles(self.video, 'en', SubtitleSetFactory())
     with assert_invalidates_model_cache(self.video):
         pipeline.rollback_to(self.video, 'en', 1)