コード例 #1
0
ファイル: subtitles.py プロジェクト: norayr/unisubs
 def get_object(self):
     video = self.get_video()
     workflow = workflows.get_workflow(video)
     language_code = self.kwargs['language_code']
     if not workflow.user_can_view_video(self.request.user):
         raise PermissionDenied()
     version_number = self.request.query_params.get('version_number')
     if version_number is None:
         version_number = self.request.query_params.get('version')
     if version_number is not None:
         version = video.newsubtitleversion_set.get(
             language_code=language_code,
             version_number=version_number)
     else:
         language = video.subtitle_language(language_code)
         if language is None:
             raise Http404
         version = language.get_public_tip()
         if version is None:
             raise Http404
     if version.is_deleted():
         raise Http404
     if (not version.is_public() and
         not workflow.user_can_view_private_subtitles(self.request.user,
                                                      language_code)):
         raise PermissionDenied()
     return version
コード例 #2
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)
コード例 #3
0
ファイル: subtitles.py プロジェクト: norayr/unisubs
 def create(self, request, *args, **kwargs):
     video = self.get_video()
     workflow = workflows.get_workflow(video)
     if not workflow.user_can_edit_subtitles(
         self.request.user, self.kwargs['language_code']):
         raise PermissionDenied()
     videos.tasks.video_changed_tasks.delay(video.pk)
     return super(SubtitlesView, self).create(request, *args, **kwargs)
コード例 #4
0
 def get(self, request, video_id, language_code, format=None):
     video = get_object_or_404(Video, video_id=video_id)
     workflow = workflows.get_workflow(video)
     if not workflow.user_can_edit_subtitles(request.user, language_code):
         raise PermissionDenied()
     action_list = workflow.get_actions(request.user, language_code)
     serializer = ActionsSerializer(action_list, many=True)
     return Response(serializer.data)
コード例 #5
0
ファイル: test_signals.py プロジェクト: CSCI-362-02-2016/Blue
 def test_publish_action(self):
     # test the publish action by itself
     pipeline.add_subtitles(self.video, 'en', SubtitleSetFactory())
     self.subtitles_published_handler.reset_mock()
     workflow = workflows.get_workflow(self.video)
     workflow.perform_action(self.user, 'en', 'publish')
     self.subtitles_published_handler.assert_called_with(
         signal=mock.ANY,
         sender=self.video.subtitle_language('en'),
         version=None)
コード例 #6
0
ファイル: subtitles.py プロジェクト: norayr/unisubs
 def post(self, request, video_id, language_code, format=None):
     try:
         action = request.DATA['action']
     except KeyError:
         return Response('no action', status=status.HTTP_400_BAD_REQUEST)
     video = get_object_or_404(Video, video_id=video_id)
     workflow = workflows.get_workflow(video)
     try:
         workflow.perform_action(request.user, language_code, action)
     except (ActionError, LookupError), e:
         return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
コード例 #7
0
ファイル: subtitles.py プロジェクト: zenny/unisubs
 def create(self, request, *args, **kwargs):
     video = self.get_video()
     workflow = workflows.get_workflow(video)
     if not workflow.user_can_edit_subtitles(self.request.user,
                                             self.kwargs['language_code']):
         raise PermissionDenied()
     try:
         version = super(SubtitlesView,
                         self).create(request, *args, **kwargs)
     except (ActionError, LookupError), e:
         return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
コード例 #8
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)
コード例 #9
0
 def delete(self, request, *args, **kwargs):
     language_code = kwargs['language_code']
     video = self.get_video()
     workflow = workflows.get_workflow(video)
     if not workflow.user_can_delete_subtitles(self.request.user,
                                               language_code):
         raise PermissionDenied()
         request.data.pop('duration', None)
     subtitle_language = video.subtitle_language(language_code)
     subtitle_language.nuke_language()
     videos.tasks.video_changed_tasks.delay(video.pk)
     return Response(status=status.HTTP_204_NO_CONTENT)
コード例 #10
0
 def create(self, request, *args, **kwargs):
     video = self.get_video()
     workflow = workflows.get_workflow(video)
     if not workflow.user_can_edit_subtitles(self.request.user, self.kwargs['language_code']) or \
        not user_can_access_subtitles_format(self.request.user, self.request.data.get('sub_format', None)):
         raise PermissionDenied()
     if not workflow.user_can_set_video_duration(self.request.user):
         request.data.pop('duration', None)
     try:
         version = super(SubtitlesView,
                         self).create(request, *args, **kwargs)
     except (ActionError, LookupError), e:
         return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
コード例 #11
0
def _calc_action_for_add_subtitles(video, language_code, author, complete,
                                   action_name):
    # complete and action do similar things.  In _add_subtitles _add_subtitles
    # we only want to deal with action, not complete.  this 

    if action_name and complete is not None:
        raise ValueError("Both action and complete set")

    workflow = workflows.get_workflow(video)
    if action_name:
        return workflow.lookup_action(author, language_code, action_name)
    else:
        return workflow.action_for_add_subtitles(author, language_code,
                                                 complete)
コード例 #12
0
 def post(self, request, video_id, language_code, format=None):
     try:
         action = request.data['action']
     except KeyError:
         return Response('no action', status=status.HTTP_400_BAD_REQUEST)
     video = get_object_or_404(Video, video_id=video_id)
     workflow = workflows.get_workflow(video)
     if not workflow.user_can_edit_subtitles(request.user, language_code):
         raise PermissionDenied()
     language = video.subtitle_language(language_code)
     if language is None or language.get_tip() is None:
         return Response('No subtitles', status=status.HTTP_400_BAD_REQUEST)
     try:
         workflow.perform_action(request.user, language_code, action)
     except (ActionError, LookupError), e:
         return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
コード例 #13
0
ファイル: subtitles.py プロジェクト: norayr/unisubs
 def get_editor_notes(self, **kwargs):
     video = get_object_or_404(Video, video_id=kwargs['video_id'])
     workflow = workflows.get_workflow(video)
     return workflow.get_editor_notes(kwargs['language_code'])
コード例 #14
0
ファイル: subtitles.py プロジェクト: norayr/unisubs
 def get(self, request, video_id, language_code, format=None):
     video = get_object_or_404(Video, video_id=video_id)
     workflow = workflows.get_workflow(video)
     action_list = workflow.get_actions(request.user, language_code)
     serializer = ActionsSerializer(action_list, many=True)
     return Response(serializer.data)
コード例 #15
0
def user_can_edit_subtitles(user, video, language_code):
    if user.is_staff:
        return True
    workflow = workflows.get_workflow(video)
    return workflow.user_can_edit_subtitles(user, language_code)
コード例 #16
0
ファイル: test_notes.py プロジェクト: zenny/unisubs
 def test_workflow_returns_task_team_editor_notes(self):
     workflow = workflows.get_workflow(self.video)
     editor_notes = workflow.get_editor_notes('en')
     assert_is_instance(editor_notes, TaskTeamEditorNotes)