diff --git a/mayan/apps/document_states/api_views.py b/mayan/apps/document_states/api_views.py index a828e92570..65a637072a 100644 --- a/mayan/apps/document_states/api_views.py +++ b/mayan/apps/document_states/api_views.py @@ -41,7 +41,7 @@ class APIDocumentTypeWorkflowListView(generics.ListAPIView): serializer_class = WorkflowSerializer def get_document_type(self): - document_type = get_object_or_404(klass=DocumentType, pk=self.kwargs['pk']) + document_type = get_object_or_404(klass=DocumentType, pk=self.kwargs['document_type_pk']) AccessControlList.objects.check_access( permissions=permission_document_type_view, user=self.request.user, @@ -106,7 +106,7 @@ class APIWorkflowDocumentTypeList(generics.ListCreateAPIView): else: permission_required = permission_workflow_edit - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_pk']) AccessControlList.objects.check_access( permissions=permission_required, user=self.request.user, @@ -159,7 +159,7 @@ class APIWorkflowDocumentTypeView(generics.RetrieveDestroyAPIView): else: permission_required = permission_workflow_edit - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_pk']) AccessControlList.objects.check_access( permissions=permission_required, user=self.request.user, @@ -297,7 +297,7 @@ class APIWorkflowStateListView(generics.ListCreateAPIView): else: permission_required = permission_workflow_edit - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_pk']) AccessControlList.objects.check_access( permissions=permission_required, user=self.request.user, @@ -340,7 +340,7 @@ class APIWorkflowStateView(generics.RetrieveUpdateDestroyAPIView): else: permission_required = permission_workflow_edit - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_pk']) AccessControlList.objects.check_access( permissions=permission_required, user=self.request.user, @@ -393,7 +393,7 @@ class APIWorkflowTransitionListView(generics.ListCreateAPIView): else: permission_required = permission_workflow_edit - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_pk']) AccessControlList.objects.check_access( permissions=permission_required, user=self.request.user, @@ -447,7 +447,7 @@ class APIWorkflowTransitionView(generics.RetrieveUpdateDestroyAPIView): else: permission_required = permission_workflow_edit - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_pk']) AccessControlList.objects.check_access( permissions=permission_required, user=self.request.user, @@ -471,7 +471,7 @@ class APIWorkflowInstanceListView(generics.ListAPIView): } def get_document(self): - document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) + document = get_object_or_404(klass=Document, pk=self.kwargs['document_pk']) AccessControlList.objects.check_access( permissions=permission_workflow_view, user=self.request.user, @@ -496,7 +496,7 @@ class APIWorkflowInstanceView(generics.RetrieveAPIView): serializer_class = WorkflowInstanceSerializer def get_document(self): - document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) + document = get_object_or_404(klass=Document, pk=self.kwargs['document_pk']) AccessControlList.objects.check_access( permissions=permission_workflow_view, user=self.request.user, @@ -515,7 +515,7 @@ class APIWorkflowInstanceLogEntryListView(generics.ListCreateAPIView): post: Transition a document workflow by creating a new document workflow log entry. """ def get_document(self): - document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) + document = get_object_or_404(klass=Document, pk=self.kwargs['document_pk']) if self.request.method == 'GET': """ diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py index a00df2d808..83744b2826 100644 --- a/mayan/apps/document_states/apps.py +++ b/mayan/apps/document_states/apps.py @@ -73,16 +73,24 @@ class DocumentStatesApp(MayanAppConfig): app_label='common', model_name='ErrorLogEntry' ) - Workflow = self.get_model('Workflow') - WorkflowInstance = self.get_model('WorkflowInstance') - WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry') - WorkflowRuntimeProxy = self.get_model('WorkflowRuntimeProxy') - WorkflowState = self.get_model('WorkflowState') - WorkflowStateAction = self.get_model('WorkflowStateAction') - WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy') - WorkflowTransition = self.get_model('WorkflowTransition') + Workflow = self.get_model(model_name='Workflow') + WorkflowInstance = self.get_model(model_name='WorkflowInstance') + WorkflowInstanceLogEntry = self.get_model( + model_name='WorkflowInstanceLogEntry' + ) + WorkflowRuntimeProxy = self.get_model( + model_name='WorkflowRuntimeProxy' + ) + WorkflowState = self.get_model(model_name='WorkflowState') + WorkflowStateAction = self.get_model( + model_name='WorkflowStateAction' + ) + WorkflowStateRuntimeProxy = self.get_model( + model_name='WorkflowStateRuntimeProxy' + ) + WorkflowTransition = self.get_model(model_name='WorkflowTransition') WorkflowTransitionTriggerEvent = self.get_model( - 'WorkflowTransitionTriggerEvent' + model_name='WorkflowTransitionTriggerEvent' ) Document.add_to_class( diff --git a/mayan/apps/document_states/error_logs.py b/mayan/apps/document_states/error_logs.py index b87b9ef298..447d9cee17 100644 --- a/mayan/apps/document_states/error_logs.py +++ b/mayan/apps/document_states/error_logs.py @@ -5,5 +5,5 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.common.classes import ErrorLogNamespace error_log_state_actions = ErrorLogNamespace( - name='workflow_state_actions', label=_('Workflow state actions') + label=_('Workflow state actions'), name='workflow_state_actions' ) diff --git a/mayan/apps/document_states/forms.py b/mayan/apps/document_states/forms.py index 44359762e6..1368c58e71 100644 --- a/mayan/apps/document_states/forms.py +++ b/mayan/apps/document_states/forms.py @@ -50,7 +50,7 @@ class WorkflowStateActionDynamicForm(DynamicModelForm): WorkflowStateActionDynamicForm, self ).__init__(*args, **kwargs) if self.instance.action_data: - for key, value in json.loads(self.instance.action_data).items(): + for key, value in json.loads(s=self.instance.action_data).items(): self.fields[key].initial = value return result diff --git a/mayan/apps/document_states/models.py b/mayan/apps/document_states/models.py index c3f8f1a92b..f8e179daf8 100644 --- a/mayan/apps/document_states/models.py +++ b/mayan/apps/document_states/models.py @@ -87,7 +87,10 @@ class Workflow(models.Model): def get_api_image_url(self, *args, **kwargs): final_url = furl() final_url.args = kwargs - final_url.path = reverse('rest_api:workflow-image', args=(self.pk,)) + final_url.path = reverse( + viewname='rest_api:workflow-image', + kwargs={'workflow_id': self.pk} + ) final_url.args['_hash'] = self.get_hash() return final_url.tostr() @@ -321,7 +324,7 @@ class WorkflowStateAction(models.Model): get_class_label.short_description = _('Action type') def loads(self): - return json.loads(self.action_data) + return json.loads(s=self.action_data) @python_2_unicode_compatible @@ -403,7 +406,8 @@ class WorkflowInstance(models.Model): def get_absolute_url(self): return reverse( - 'document_states:workflow_instance_detail', args=(str(self.pk),) + viewname='document_states:workflow_instance_detail', + kwargs={'workflow_instance_id': self.pk} ) def get_context(self): diff --git a/mayan/apps/document_states/permissions.py b/mayan/apps/document_states/permissions.py index 43f974cde1..cef7c72d6d 100644 --- a/mayan/apps/document_states/permissions.py +++ b/mayan/apps/document_states/permissions.py @@ -7,23 +7,23 @@ from mayan.apps.permissions import PermissionNamespace namespace = PermissionNamespace(label=_('Document workflows'), name='document_states') permission_workflow_create = namespace.add_permission( - name='workflow_create', label=_('Create workflows') + label=_('Create workflows'), name='workflow_create' ) permission_workflow_delete = namespace.add_permission( - name='workflow_delte', label=_('Delete workflows') + label=_('Delete workflows'), name='workflow_delte' ) permission_workflow_edit = namespace.add_permission( - name='workflow_edit', label=_('Edit workflows') + label=_('Edit workflows'), name='workflow_edit' ) permission_workflow_view = namespace.add_permission( - name='workflow_view', label=_('View workflows') + label=_('View workflows'), name='workflow_view' ) # Translators: This text refers to the permission to grant user the ability to # 'transition workflows' from one state to another, to move the workflow # forwards permission_workflow_transition = namespace.add_permission( - name='workflow_transition', label=_('Transition workflows') + label=_('Transition workflows'), name='workflow_transition' ) permission_workflow_tools = namespace.add_permission( - name='workflow_tools', label=_('Execute workflow tools') + label=_('Execute workflow tools'), name='workflow_tools' ) diff --git a/mayan/apps/document_states/queues.py b/mayan/apps/document_states/queues.py index 753a612421..40ec12bff7 100644 --- a/mayan/apps/document_states/queues.py +++ b/mayan/apps/document_states/queues.py @@ -5,17 +5,17 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.task_manager.classes import CeleryQueue queue_document_states = CeleryQueue( - name='document_states', label=_('Document states') + label=_('Document states'), name='document_states' ) queue_document_states_fast = CeleryQueue( - name='document_states_fast', label=_('Document states fast') + label=_('Document states fast'), name='document_states_fast' ) queue_document_states.add_task_type( - name='mayan.apps.document_states.tasks.task_launch_all_workflows', - label=_('Launch all workflows') + label=_('Launch all workflows'), + name='mayan.apps.document_states.tasks.task_launch_all_workflows' ) queue_document_states_fast.add_task_type( - name='mayan.apps.document_states.tasks.task_generate_document_state_image', - label=_('Generate workflow previews') + label=_('Generate workflow previews'), + name='mayan.apps.document_states.tasks.task_generate_document_state_image' ) diff --git a/mayan/apps/document_states/serializers.py b/mayan/apps/document_states/serializers.py index 78a055254b..8d89577c5e 100644 --- a/mayan/apps/document_states/serializers.py +++ b/mayan/apps/document_states/serializers.py @@ -48,9 +48,9 @@ class WorkflowDocumentTypeSerializer(DocumentTypeSerializer): def get_workflow_document_type_url(self, instance): return reverse( - 'rest_api:workflow-document-type-detail', args=( - self.context['workflow'].pk, instance.pk - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflow-document-type-detail', kwargs={ + 'workflow_pk': self.context['workflow'].pk, 'document_type_pk': instance.pk + }, request=self.context['request'], format=self.context['format'] ) @@ -70,16 +70,16 @@ class WorkflowStateSerializer(serializers.HyperlinkedModelSerializer): def get_url(self, instance): return reverse( - 'rest_api:workflowstate-detail', args=( - instance.workflow.pk, instance.pk - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowstate-detail', kwargs={ + 'workflow_pk': instance.workflow.pk, 'workflow_state_pk': instance.pk + }, request=self.context['request'], format=self.context['format'] ) def get_workflow_url(self, instance): return reverse( - 'rest_api:workflow-detail', args=( - instance.workflow.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflow-detail', kwargs={ + 'workflow_pk': instance.workflow.pk, + }, request=self.context['request'], format=self.context['format'] ) @@ -98,16 +98,16 @@ class WorkflowTransitionSerializer(serializers.HyperlinkedModelSerializer): def get_url(self, instance): return reverse( - 'rest_api:workflowtransition-detail', args=( - instance.workflow.pk, instance.pk - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowtransition-detail', kwargs={ + 'workflow_pk': instance.workflow.pk, 'transition_pk': instance.pk + }, request=self.context['request'], format=self.context['format'] ) def get_workflow_url(self, instance): return reverse( - 'rest_api:workflow-detail', args=( - instance.workflow.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflow-detail', kwargs={ + 'workflow_pk': instance.workflow.pk, + }, request=self.context['request'], format=self.context['format'] ) @@ -145,16 +145,16 @@ class WritableWorkflowTransitionSerializer(serializers.ModelSerializer): def get_url(self, instance): return reverse( - 'rest_api:workflowtransition-detail', args=( - instance.workflow.pk, instance.pk - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowtransition-detail', kwargs={ + 'workflow_pk': instance.workflow.pk, 'transition_pk': instance.pk + }, request=self.context['request'], format=self.context['format'] ) def get_workflow_url(self, instance): return reverse( - 'rest_api:workflow-detail', args=( - instance.workflow.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflow-detail', kwargs={ + 'workflow_pk': instance.workflow.pk, + }, request=self.context['request'], format=self.context['format'] ) def update(self, instance, validated_data): @@ -190,9 +190,9 @@ class WorkflowSerializer(serializers.HyperlinkedModelSerializer): def get_image_url(self, instance): return reverse( - 'rest_api:workflow-image', args=( - instance.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflow-image', kwargs={ + 'workflow_pk': instance.pk + }, request=self.context['request'], format=self.context['format'] ) @@ -210,10 +210,10 @@ class WorkflowInstanceLogEntrySerializer(serializers.ModelSerializer): def get_document_workflow_url(self, instance): return reverse( - 'rest_api:workflowinstance-detail', args=( - instance.workflow_instance.document.pk, - instance.workflow_instance.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowinstance-detail', kwargs={ + 'document_pk': instance.workflow_instance.document.pk, + 'transition_pk': instance.workflow_instance.pk + }, request=self.context['request'], format=self.context['format'] ) @@ -248,16 +248,16 @@ class WorkflowInstanceSerializer(serializers.ModelSerializer): def get_document_workflow_url(self, instance): return reverse( - 'rest_api:workflowinstance-detail', args=( - instance.document.pk, instance.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowinstance-detail', kwargs={ + 'document_pk': instance.document.pk, 'transition_pk': instance.pk, + }, request=self.context['request'], format=self.context['format'] ) def get_log_entries_url(self, instance): return reverse( - 'rest_api:workflowinstancelogentry-list', args=( - instance.document.pk, instance.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowinstancelogentry-list', kwargs={ + 'document_pk': instance.document.pk, 'workflow_pk': instance.pk, + }, request=self.context['request'], format=self.context['format'] ) @@ -339,10 +339,10 @@ class WritableWorkflowInstanceLogEntrySerializer(serializers.ModelSerializer): def get_document_workflow_url(self, instance): return reverse( - 'rest_api:workflowinstance-detail', args=( - instance.workflow_instance.document.pk, - instance.workflow_instance.pk, - ), request=self.context['request'], format=self.context['format'] + viewname='rest_api:workflowinstance-detail', kwargs={ + 'document_pk': instance.workflow_instance.document.pk, + 'workflow_pk': instance.workflow_instance.pk, + }, request=self.context['request'], format=self.context['format'] ) def validate(self, attrs): diff --git a/mayan/apps/document_states/settings.py b/mayan/apps/document_states/settings.py index 49a68baa30..b90ae5e382 100644 --- a/mayan/apps/document_states/settings.py +++ b/mayan/apps/document_states/settings.py @@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.smart_settings import Namespace -namespace = Namespace(name='document_states', label=_('Workflows')) +namespace = Namespace(label=_('Workflows'), name='document_states') settings_workflow_image_cache_time = namespace.add_setting( global_name='WORKFLOWS_IMAGE_CACHE_TIME', default='31556926', diff --git a/mayan/apps/document_states/tests/test_views.py b/mayan/apps/document_states/tests/test_views.py index 0b40454a27..d25fa91971 100644 --- a/mayan/apps/document_states/tests/test_views.py +++ b/mayan/apps/document_states/tests/test_views.py @@ -49,9 +49,8 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_delete_view(self): return self.post( - viewname='document_states:setup_workflow_delete', args=( - self.workflow.pk, - ), + viewname='document_states:setup_workflow_delete', + kwargs={'workflow_id': self.workflow.pk} ) def test_workflow_delete_view_no_access(self): @@ -69,9 +68,9 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_edit_view(self): return self.post( - viewname='document_states:setup_workflow_edit', args=( - self.workflow.pk, - ), data={ + viewname='document_states:setup_workflow_edit', + kwargs={'workflow_id': self.workflow.pk}, + data={ 'label': TEST_WORKFLOW_LABEL_EDITED, 'internal_name': self.workflow.internal_name } @@ -80,7 +79,7 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def test_workflow_edit_view_no_access(self): self._create_workflow() response = self._request_workflow_edit_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.workflow.refresh_from_db() self.assertEqual(self.workflow.label, TEST_WORKFLOW_LABEL) @@ -112,15 +111,14 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_preview_view(self): return self.get( - viewname='document_states:workflow_preview', args=( - self.workflow.pk, - ), + viewname='document_states:workflow_preview', + kwargs={'workflow_id': self.workflow.pk} ) def test_workflow_preview_view_no_access(self): self._create_workflow() response = self._request_workflow_preview_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.assertTrue(self.workflow in Workflow.objects.all()) def test_workflow_preview_view_with_access(self): @@ -138,7 +136,8 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_state_create_view(self): return self.post( viewname='document_states:setup_workflow_state_create', - args=(self.workflow.pk,), data={ + kwargs={'workflow_id': self.workflow.pk}, + data={ 'label': TEST_WORKFLOW_STATE_LABEL, 'completion': TEST_WORKFLOW_STATE_COMPLETION, } @@ -152,7 +151,9 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def test_create_workflow_state_with_access(self): self._create_workflow() - self.grant_access(permission=permission_workflow_edit, obj=self.workflow) + self.grant_access( + permission=permission_workflow_edit, obj=self.workflow + ) response = self._request_workflow_state_create_view() self.assertEquals(response.status_code, 302) self.assertEquals(WorkflowState.objects.count(), 1) @@ -167,14 +168,14 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_state_delete_view(self): return self.post( viewname='document_states:setup_workflow_state_delete', - args=(self.workflow_state.pk,) + kwargs={'workflow_state_id': self.workflow_state.pk} ) def test_delete_workflow_state_no_access(self): self._create_workflow() self._create_workflow_states() response = self._request_workflow_state_delete_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.assertEquals(WorkflowState.objects.count(), 2) def test_delete_workflow_state_with_access(self): @@ -188,7 +189,8 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_state_edit_view(self): return self.post( viewname='document_states:setup_workflow_state_edit', - args=(self.workflow_state.pk,), data={ + kwargs={'workflow_state_id': self.workflow_state.pk}, + data={ 'label': TEST_WORKFLOW_STATE_LABEL_EDITED } ) @@ -197,7 +199,7 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): self._create_workflow() self._create_workflow_states() response = self._request_workflow_state_edit_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.assertEquals(self.workflow_state.label, TEST_WORKFLOW_STATE_LABEL) def test_edit_workflow_state_with_access(self): @@ -212,14 +214,14 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): def _request_workflow_state_list_view(self): return self.get( viewname='document_states:setup_workflow_state_list', - args=(self.workflow.pk,) + kwargs={'workflow_id': self.workflow.pk} ) def test_workflow_state_list_no_access(self): self._create_workflow() self._create_workflow_states() response = self._request_workflow_state_list_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) def test_workflow_state_list_with_access(self): self._create_workflow() @@ -260,7 +262,7 @@ class DocumentStateToolViewTestCase(GenericDocumentViewTestCase): def _request_workflow_launch_view(self): return self.post( - 'document_states:tool_launch_all_workflows', + viewname='document_states:tool_launch_all_workflows', ) def test_tool_launch_all_workflows_view_no_permission(self): @@ -295,7 +297,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView def _request_workflow_transition_create_view(self): return self.post( viewname='document_states:setup_workflow_transition_create', - args=(self.workflow.pk,), data={ + kwargs={'workflow_id': self.workflow.pk}, data={ 'label': TEST_WORKFLOW_TRANSITION_LABEL, 'origin_state': self.workflow_initial_state.pk, 'destination_state': self.workflow_state.pk, @@ -306,7 +308,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView self._create_workflow() self._create_workflow_states() response = self._request_workflow_transition_create_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.assertEquals(WorkflowTransition.objects.count(), 0) def test_create_workflow_transition_with_access(self): @@ -332,7 +334,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView def _request_workflow_transition_delete_view(self): return self.post( viewname='document_states:setup_workflow_transition_delete', - args=(self.workflow_transition.pk,) + kwargs={'workflow_transition_id': self.workflow_transition.pk} ) def test_delete_workflow_transition_no_access(self): @@ -340,7 +342,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView self._create_workflow_states() self._create_workflow_transition() response = self._request_workflow_transition_delete_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.assertTrue(self.workflow_transition in WorkflowTransition.objects.all()) def test_delete_workflow_transition_with_access(self): @@ -355,7 +357,8 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView def _request_workflow_transition_edit_view(self): return self.post( viewname='document_states:setup_workflow_transition_edit', - args=(self.workflow_transition.pk,), data={ + kwargs={'workflow_transition_id': self.workflow_transition.pk}, + data={ 'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED, 'origin_state': self.workflow_initial_state.pk, 'destination_state': self.workflow_state.pk, @@ -367,7 +370,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView self._create_workflow_states() self._create_workflow_transition() response = self._request_workflow_transition_edit_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) self.workflow_transition.refresh_from_db() self.assertEqual( self.workflow_transition.label, TEST_WORKFLOW_TRANSITION_LABEL @@ -388,7 +391,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView def _request_workflow_transition_list_view(self): return self.get( viewname='document_states:setup_workflow_transition_list', - args=(self.workflow.pk,) + kwargs={'workflow_id': self.workflow.pk} ) def test_workflow_transition_list_no_access(self): @@ -411,7 +414,8 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView def _request_workflow_transition(self): return self.post( viewname='document_states:workflow_instance_transition', - args=(self.workflow_instance.pk,), data={ + kwargs={'workflow_instance_id': self.workflow_instance.pk}, + data={ 'transition': self.workflow_transition.pk, } ) @@ -481,7 +485,7 @@ class DocumentStateTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumen def _request_workflow_transition_event_list_view(self): return self.get( viewname='document_states:setup_workflow_transition_events', - args=(self.workflow_transition.pk,) + kwargs={'workflow_transition_id': self.workflow_transition.pk} ) def test_workflow_transition_event_list_no_access(self): @@ -489,7 +493,7 @@ class DocumentStateTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumen self._create_workflow_states() self._create_workflow_transition() response = self._request_workflow_transition_event_list_view() - self.assertEquals(response.status_code, 403) + self.assertEquals(response.status_code, 404) def test_workflow_transition_event_list_with_access(self): self._create_workflow() diff --git a/mayan/apps/document_states/urls.py b/mayan/apps/document_states/urls.py index bb36b6fda5..48baa4d5e8 100644 --- a/mayan/apps/document_states/urls.py +++ b/mayan/apps/document_states/urls.py @@ -29,207 +29,209 @@ from .views import ( urlpatterns = [ url( - r'^document/(?P\d+)/workflows/$', - DocumentWorkflowInstanceListView.as_view(), - name='document_workflow_instance_list' + regex=r'^workflows/$', name='setup_workflow_list', + view=SetupWorkflowListView.as_view() ), url( - r'^document/workflows/(?P\d+)/$', - WorkflowInstanceDetailView.as_view(), name='workflow_instance_detail' + regex=r'^workflows/create/$', name='setup_workflow_create', + view=SetupWorkflowCreateView.as_view() ), url( - r'^document/workflows/(?P\d+)/transition/$', - WorkflowInstanceTransitionView.as_view(), - name='workflow_instance_transition' + regex=r'^workflows/(?P\d+)/delete/$', + name='setup_workflow_delete', view=SetupWorkflowDeleteView.as_view() ), url( - r'^setup/all/$', SetupWorkflowListView.as_view(), - name='setup_workflow_list' + regex=r'^workflows/(?P\d+)/edit/$', + name='setup_workflow_edit', view=SetupWorkflowEditView.as_view() ), url( - r'^setup/create/$', SetupWorkflowCreateView.as_view(), - name='setup_workflow_create' + regex=r'^workflows/(?P\d+)/preview/$', + name='workflow_preview', view=WorkflowPreviewView.as_view() ), url( - r'^setup/workflow/(?P\d+)/edit/$', SetupWorkflowEditView.as_view(), - name='setup_workflow_edit' + regex=r'^workflows/(?P\d+)/document_types/$', + name='setup_workflow_document_types', + view=SetupWorkflowDocumentTypesView.as_view() ), url( - r'^setup/workflow/(?P\d+)/delete/$', SetupWorkflowDeleteView.as_view(), - name='setup_workflow_delete' + regex=r'^workflows/(?P\d+)/states/$', + name='setup_workflow_state_list', + view=SetupWorkflowStateListView.as_view() ), url( - r'^setup/workflow/(?P\d+)/documents/$', - WorkflowDocumentListView.as_view(), - name='setup_workflow_document_list' + regex=r'^workflows/(?P\d+)/states/create/$', + name='setup_workflow_state_create', + view=SetupWorkflowStateCreateView.as_view() ), url( - r'^setup/workflow/(?P\d+)/document_types/$', - SetupWorkflowDocumentTypesView.as_view(), - name='setup_workflow_document_types' + regex=r'^workflows/states/(?P\d+)/delete/$', + name='setup_workflow_state_delete', + view=SetupWorkflowStateDeleteView.as_view() ), url( - r'^setup/workflow/(?P\d+)/states/$', SetupWorkflowStateListView.as_view(), - name='setup_workflow_state_list' - ), - url( - r'^setup/workflow/(?P\d+)/states/create/$', - SetupWorkflowStateCreateView.as_view(), - name='setup_workflow_state_create' - ), - url( - r'^setup/workflow/(?P\d+)/transitions/$', - SetupWorkflowTransitionListView.as_view(), - name='setup_workflow_transition_list' - ), - url( - r'^setup/workflow/(?P\d+)/transitions/create/$', - SetupWorkflowTransitionCreateView.as_view(), - name='setup_workflow_transition_create' - ), - url( - r'^setup/workflow/(?P\d+)/transitions/events/$', - SetupWorkflowTransitionTriggerEventListView.as_view(), - name='setup_workflow_transition_events' - ), - url( - r'^setup/workflow/state/(?P\d+)/delete/$', - SetupWorkflowStateDeleteView.as_view(), - name='setup_workflow_state_delete' - ), - url( - r'^setup/workflow/state/(?P\d+)/edit/$', - SetupWorkflowStateEditView.as_view(), - name='setup_workflow_state_edit' - ), - url( - r'^setup/workflow/state/(?P\d+)/actions/$', - SetupWorkflowStateActionListView.as_view(), - name='setup_workflow_state_action_list' - ), - url( - r'^setup/workflow/state/(?P\d+)/actions/$', - SetupWorkflowStateActionListView.as_view(), - name='setup_workflow_state_action_list' - ), - url( - r'^setup/workflow/state/(?P\d+)/actions/selection/$', - SetupWorkflowStateActionSelectionView.as_view(), - name='setup_workflow_state_action_selection' - ), - url( - r'^setup/workflow/state/(?P\d+)/actions/(?P[a-zA-Z0-9_.]+)/create/$', - SetupWorkflowStateActionCreateView.as_view(), - name='setup_workflow_state_action_create' + regex=r'^workflows/states/(?P\d+)/edit/$', + name='setup_workflow_state_edit', + view=SetupWorkflowStateEditView.as_view() ), url( - r'^setup/workflow/state/actions/(?P\d+)/delete/$', - SetupWorkflowStateActionDeleteView.as_view(), + regex=r'^workflows/states/(?P\d+)/actions/$', + name='setup_workflow_state_action_list', + view=SetupWorkflowStateActionListView.as_view() + ), + url( + regex=r'^workflows/states/(?P\d+)/actions/selection/$', + name='setup_workflow_state_action_selection', + view=SetupWorkflowStateActionSelectionView.as_view(), + ), + url( + regex=r'^workflows/states/(?P\d+)/actions/(?P[a-zA-Z0-9_.]+)/create/$', + name='setup_workflow_state_action_create', + view=SetupWorkflowStateActionCreateView.as_view() + ), + url( + regex=r'^workflows/states/actions/(?P\d+)/delete/$', + view=SetupWorkflowStateActionDeleteView.as_view(), name='setup_workflow_state_action_delete' ), url( - r'^setup/workflow/state/actions/(?P\d+)/edit/$', - SetupWorkflowStateActionEditView.as_view(), - name='setup_workflow_state_action_edit' - ), - - - url( - r'^setup/workflow/transitions/(?P\d+)/delete/$', - SetupWorkflowTransitionDeleteView.as_view(), - name='setup_workflow_transition_delete' - ), - url( - r'^setup/workflow/transitions/(?P\d+)/edit/$', - SetupWorkflowTransitionEditView.as_view(), - name='setup_workflow_transition_edit' - ), - url( - r'^tools/workflow/all/launch/$', - ToolLaunchAllWorkflows.as_view(), - name='tool_launch_all_workflows' - ), - url( - r'all/$', - WorkflowListView.as_view(), - name='workflow_list' - ), - url( - r'^(?P\d+)/documents/$', - WorkflowDocumentListView.as_view(), - name='workflow_document_list' + regex=r'^workflows/states/actions/(?P\d+)/edit/$', + name='setup_workflow_state_action_edit', + view=SetupWorkflowStateActionEditView.as_view() ), url( - r'^(?P\d+)/states/$', - WorkflowStateListView.as_view(), - name='workflow_state_list' + regex=r'^workflows/(?P\d+)/transitions/$', + name='setup_workflow_transition_list', + view=SetupWorkflowTransitionListView.as_view() ), url( - r'^(?P\d+)/preview/$', - WorkflowPreviewView.as_view(), - name='workflow_preview' + regex=r'^workflows/(?P\d+)/transitions/create/$', + name='setup_workflow_transition_create', + view=SetupWorkflowTransitionCreateView.as_view() ), url( - r'^state/(?P\d+)/documents/$', - WorkflowStateDocumentListView.as_view(), - name='workflow_state_document_list' + regex=r'^workflows/transitions/(?P\d+)/delete/$', + name='setup_workflow_transition_delete', + view=SetupWorkflowTransitionDeleteView.as_view() ), + url( + regex=r'^workflows/transitions/(?P\d+)/edit/$', + name='setup_workflow_transition_edit', + view=SetupWorkflowTransitionEditView.as_view() + ), + url( + regex=r'^workflows/(?P\d+)/transitions/events/$', + name='setup_workflow_transition_events', + view=SetupWorkflowTransitionTriggerEventListView.as_view() + ), + + url( + regex=r'^workflow_instances/$', name='workflow_list', + view=WorkflowListView.as_view() + ), + url( + regex=r'^workflow_instances/(?P\d+)/documents/$', + name='setup_workflow_document_list', + view=WorkflowDocumentListView.as_view() + ), + url( + regex=r'^workflow_instances/(?P\d+)/documents/$', + name='workflow_document_list', + view=WorkflowDocumentListView.as_view() + ), + url( + regex=r'^workflow_instances/(?P\d+)/states/$', + name='workflow_state_list', view=WorkflowStateListView.as_view() + ), + url( + regex=r'^workflow_instances/states/(?P\d+)/documents/$', + name='workflow_state_document_list', + view=WorkflowStateDocumentListView.as_view() + ), + + url( + regex=r'^documents/(?P\d+)/workflows/$', + name='document_workflow_instance_list', + view=DocumentWorkflowInstanceListView.as_view() + ), + url( + regex=r'^documents/workflows/(?P\d+)/$', + name='workflow_instance_detail', + view=WorkflowInstanceDetailView.as_view() + ), + url( + regex=r'^documents/workflows/(?P\d+)/transition/$', + name='workflow_instance_transition', + view=WorkflowInstanceTransitionView.as_view() + ), + url( + regex=r'^tools/workflows/all/launch/$', + name='tool_launch_all_workflows', + view=ToolLaunchAllWorkflows.as_view() + ) ] api_urls = [ - url(r'^workflows/$', APIWorkflowListView.as_view(), name='workflow-list'), url( - r'^workflows/(?P[0-9]+)/$', APIWorkflowView.as_view(), - name='workflow-detail' + regex=r'^workflows/$', name='workflow-list', + view=APIWorkflowListView.as_view() ), url( - r'^workflows/(?P[0-9]+)/image/$', - APIWorkflowImageView.as_view(), name='workflow-image' + regex=r'^workflows/(?P\d+)/$', + name='workflow-detail', view=APIWorkflowView.as_view() ), url( - r'^workflows/(?P[0-9]+)/document_types/$', - APIWorkflowDocumentTypeList.as_view(), - name='workflow-document-type-list' + regex=r'^workflows/(?P\d+)/image/$', + name='workflow-image', view=APIWorkflowImageView.as_view() ), url( - r'^workflows/(?P[0-9]+)/document_types/(?P[0-9]+)/$', - APIWorkflowDocumentTypeView.as_view(), - name='workflow-document-type-detail' + regex=r'^workflows/(?P\d+)/document_types/$', + name='workflow-document-type-list', + view=APIWorkflowDocumentTypeList.as_view() ), url( - r'^workflows/(?P[0-9]+)/states/$', - APIWorkflowStateListView.as_view(), name='workflowstate-list' + regex=r'^workflows/(?P\d+)/document_types/(?P\d+)/$', + name='workflow-document-type-detail', + view=APIWorkflowDocumentTypeView.as_view() ), url( - r'^workflows/(?P[0-9]+)/states/(?P[0-9]+)/$', - APIWorkflowStateView.as_view(), name='workflowstate-detail' + regex=r'^workflows/(?P\d+)/states/$', + name='workflowstate-list', + view=APIWorkflowStateListView.as_view() ), url( - r'^workflows/(?P[0-9]+)/transitions/$', - APIWorkflowTransitionListView.as_view(), name='workflowtransition-list' + regex=r'^workflows/(?P\d+)/states/(?P\d+)/$', + name='workflowstate-detail', view=APIWorkflowStateView.as_view() ), url( - r'^workflows/(?P[0-9]+)/transitions/(?P[0-9]+)/$', - APIWorkflowTransitionView.as_view(), name='workflowtransition-detail' + regex=r'^workflows/(?P\d+)/transitions/$', + name='workflowtransition-list', + view=APIWorkflowTransitionListView.as_view() ), url( - r'^documents/(?P[0-9]+)/workflows/$', - APIWorkflowInstanceListView.as_view(), name='workflowinstance-list' + regex=r'^workflows/(?P\d+)/transitions/(?P\d+)/$', + name='workflowtransition-detail', + view=APIWorkflowTransitionView.as_view() ), url( - r'^documents/(?P[0-9]+)/workflows/(?P[0-9]+)/$', - APIWorkflowInstanceView.as_view(), name='workflowinstance-detail' + regex=r'^documents/(?P\d+)/workflows/$', + name='workflowinstance-list', + view=APIWorkflowInstanceListView.as_view() ), url( - r'^documents/(?P[0-9]+)/workflows/(?P[0-9]+)/log_entries/$', - APIWorkflowInstanceLogEntryListView.as_view(), - name='workflowinstancelogentry-list' + regex=r'^documents/(?P\d+)/workflows/(?P\d+)/$', + name='workflowinstance-detail', + view=APIWorkflowInstanceView.as_view() ), url( - r'^document_types/(?P[0-9]+)/workflows/$', - APIDocumentTypeWorkflowListView.as_view(), - name='documenttype-workflow-list' + regex=r'^documents/(?P\d+)/workflows/(?P\d+)/log_entries/$', + name='workflowinstancelogentry-list', + view=APIWorkflowInstanceLogEntryListView.as_view() ), + url( + regex=r'^document_types/(?P\d+)/workflows/$', + name='documenttype-workflow-list', + view=APIDocumentTypeWorkflowListView.as_view() + ) ] diff --git a/mayan/apps/document_states/views.py b/mayan/apps/document_states/views.py index a7f789109d..8e023f791b 100644 --- a/mayan/apps/document_states/views.py +++ b/mayan/apps/document_states/views.py @@ -58,7 +58,9 @@ class DocumentWorkflowInstanceListView(SingleObjectListView): ).dispatch(request, *args, **kwargs) def get_document(self): - return get_object_or_404(klass=Document, pk=self.kwargs['pk']) + return get_object_or_404( + klass=Document, pk=self.kwargs['document_id'] + ) def get_extra_context(self): return { @@ -114,7 +116,9 @@ class WorkflowInstanceDetailView(SingleObjectListView): return self.get_workflow_instance().log_entries.order_by('-datetime') def get_workflow_instance(self): - return get_object_or_404(klass=WorkflowInstance, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowInstance, pk=self.kwargs['workflow_instance_id'] + ) class WorkflowInstanceTransitionView(FormView): @@ -127,11 +131,12 @@ class WorkflowInstanceTransitionView(FormView): transition=form.cleaned_data['transition'], user=self.request.user ) messages.success( - self.request, _( + message=_( 'Document "%s" transitioned successfully' - ) % self.get_workflow_instance().document + ) % self.get_workflow_instance().document, + request=self.request ) - return HttpResponseRedirect(self.get_success_url()) + return HttpResponseRedirect(redirect_to=self.get_success_url()) def get_extra_context(self): return { @@ -154,7 +159,9 @@ class WorkflowInstanceTransitionView(FormView): return self.get_workflow_instance().get_absolute_url() def get_workflow_instance(self): - return get_object_or_404(klass=WorkflowInstance, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowInstance, pk=self.kwargs['workflow_instance_id'] + ) # Setup @@ -185,7 +192,7 @@ class SetupWorkflowListView(SingleObjectListView): class SetupWorkflowCreateView(SingleObjectCreateView): form_class = WorkflowForm model = Workflow - post_action_redirect = reverse_lazy('document_states:setup_workflow_list') + post_action_redirect = reverse_lazy(viewname='document_states:setup_workflow_list') view_permission = permission_workflow_create @@ -193,13 +200,15 @@ class SetupWorkflowEditView(SingleObjectEditView): form_class = WorkflowForm model = Workflow object_permission = permission_workflow_edit - post_action_redirect = reverse_lazy('document_states:setup_workflow_list') + pk_url_kwarg = 'workflow_id' + post_action_redirect = reverse_lazy(viewname='document_states:setup_workflow_list') class SetupWorkflowDeleteView(SingleObjectDeleteView): model = Workflow object_permission = permission_workflow_delete - post_action_redirect = reverse_lazy('document_states:setup_workflow_list') + pk_url_kwarg = 'workflow_id' + post_action_redirect = reverse_lazy(viewname='document_states:setup_workflow_list') class SetupWorkflowDocumentTypesView(AssignRemoveView): @@ -227,7 +236,9 @@ class SetupWorkflowDocumentTypesView(AssignRemoveView): } def get_object(self): - return get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + return get_object_or_404( + klass=Workflow, pk=self.kwargs['workflow_id'] + ) def left_list(self): return AssignRemoveView.generate_choices( @@ -288,18 +299,21 @@ class SetupWorkflowStateActionCreateView(SingleObjectDynamicFormCreateView): } def get_object(self): - return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowState, pk=self.kwargs['workflow_state_id'] + ) def get_post_action_redirect(self): return reverse( - 'document_states:setup_workflow_state_action_list', - args=(self.get_object().pk,) + viewname='document_states:setup_workflow_state_action_list', + kwargs={'workflow_state_id': self.get_object().pk} ) class SetupWorkflowStateActionDeleteView(SingleObjectDeleteView): model = WorkflowStateAction object_permission = permission_workflow_edit + pk_url_kwarg = 'workflow_state_action_id' def get_extra_context(self): return { @@ -314,8 +328,8 @@ class SetupWorkflowStateActionDeleteView(SingleObjectDeleteView): def get_post_action_redirect(self): return reverse( - 'document_states:setup_workflow_state_action_list', - args=(self.get_object().state.pk,) + viewname='document_states:setup_workflow_state_action_list', + kwargs={'workflow_state_id': self.get_object().state.pk} ) @@ -323,6 +337,7 @@ class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView): form_class = WorkflowStateActionDynamicForm model = WorkflowStateAction object_permission = permission_workflow_edit + pk_url_kwarg = 'workflow_state_action_id' def get_extra_context(self): return { @@ -348,8 +363,8 @@ class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView): def get_post_action_redirect(self): return reverse( - 'document_states:setup_workflow_state_action_list', - args=(self.get_object().state.pk,) + viewname='document_states:setup_workflow_state_action_list', + kwargs={'workflow_state_id': self.get_object().state.pk} ) @@ -389,7 +404,9 @@ class SetupWorkflowStateActionListView(SingleObjectListView): return self.get_workflow_state().actions.all() def get_workflow_state(self): - return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowState, pk=self.kwargs['workflow_state_id'] + ) class SetupWorkflowStateActionSelectionView(FormView): @@ -399,9 +416,12 @@ class SetupWorkflowStateActionSelectionView(FormView): def form_valid(self, form): klass = form.cleaned_data['klass'] return HttpResponseRedirect( - reverse( - 'document_states:setup_workflow_state_action_create', - args=(self.get_object().pk, klass,), + redirect_to=reverse( + viewname='document_states:setup_workflow_state_action_create', + kwargs={ + 'workflow_state_id': self.get_object().pk, + 'class_path': klass + } ) ) @@ -416,7 +436,9 @@ class SetupWorkflowStateActionSelectionView(FormView): } def get_object(self): - return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowState, pk=self.kwargs['workflow_state_id'] + ) # Workflow states @@ -441,11 +463,12 @@ class SetupWorkflowStateCreateView(SingleObjectCreateView): def get_success_url(self): return reverse( - 'document_states:setup_workflow_state_list', args=(self.kwargs['pk'],) + viewname='document_states:setup_workflow_state_list', + kwargs={'workflow_id': self.kwargs['workflow_id']} ) def get_workflow(self): - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_id']) AccessControlList.objects.check_access( permissions=(permission_workflow_edit,), obj=workflow, user=self.request.user @@ -456,6 +479,7 @@ class SetupWorkflowStateCreateView(SingleObjectCreateView): class SetupWorkflowStateDeleteView(SingleObjectDeleteView): model = WorkflowState object_permission = permission_workflow_edit + pk_url_kwarg = 'workflow_state_id' def get_extra_context(self): return { @@ -469,12 +493,12 @@ class SetupWorkflowStateDeleteView(SingleObjectDeleteView): def get_success_url(self): return reverse( - 'document_states:setup_workflow_state_list', - args=(self.get_object().workflow.pk,) + viewname='document_states:setup_workflow_state_list', + kwargs={'workflow_id': self.get_object().workflow.pk} ) def get_workflow(self): - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_id']) AccessControlList.objects.check_access( permissions=(permission_workflow_edit,), obj=workflow, user=self.request.user @@ -486,6 +510,7 @@ class SetupWorkflowStateEditView(SingleObjectEditView): form_class = WorkflowStateForm model = WorkflowState object_permission = permission_workflow_edit + pk_url_kwarg = 'workflow_state_id' def get_extra_context(self): return { @@ -496,8 +521,8 @@ class SetupWorkflowStateEditView(SingleObjectEditView): def get_success_url(self): return reverse( - 'document_states:setup_workflow_state_list', - args=(self.get_object().workflow.pk,) + viewname='document_states:setup_workflow_state_list', + kwargs={'workflow_id': self.get_object().workflow.pk} ) @@ -537,7 +562,7 @@ class SetupWorkflowStateListView(SingleObjectListView): return self.get_workflow().states.all() def get_workflow(self): - return get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + return get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_id']) # Transitions @@ -569,12 +594,12 @@ class SetupWorkflowTransitionCreateView(SingleObjectCreateView): def get_success_url(self): return reverse( - 'document_states:setup_workflow_transition_list', - args=(self.kwargs['pk'],) + viewname='document_states:setup_workflow_transition_list', + kwargs={'workflow_id': self.kwargs['workflow_id']} ) def get_workflow(self): - workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + workflow = get_object_or_404(klass=Workflow, pk=self.kwargs['workflow_id']) AccessControlList.objects.check_access( permissions=(permission_workflow_edit,), obj=workflow, user=self.request.user @@ -585,6 +610,7 @@ class SetupWorkflowTransitionCreateView(SingleObjectCreateView): class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView): model = WorkflowTransition object_permission = permission_workflow_edit + pk_url_kwarg = 'workflow_transition_id' def get_extra_context(self): return { @@ -595,8 +621,8 @@ class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView): def get_success_url(self): return reverse( - 'document_states:setup_workflow_transition_list', - args=(self.get_object().workflow.pk,) + viewname='document_states:setup_workflow_transition_list', + kwargs={'workflow_id': self.get_object().workflow.pk} ) @@ -604,6 +630,7 @@ class SetupWorkflowTransitionEditView(SingleObjectEditView): form_class = WorkflowTransitionForm model = WorkflowTransition object_permission = permission_workflow_edit + pk_url_kwarg = 'workflow_transition_id' def get_extra_context(self): return { @@ -621,8 +648,8 @@ class SetupWorkflowTransitionEditView(SingleObjectEditView): def get_success_url(self): return reverse( - 'document_states:setup_workflow_transition_list', - args=(self.get_object().workflow.pk,) + viewname='document_states:setup_workflow_transition_list', + kwargs={'workflow_id': self.get_object().workflow.pk} ) @@ -655,7 +682,9 @@ class SetupWorkflowTransitionListView(SingleObjectListView): return self.get_workflow().transitions.all() def get_workflow(self): - return get_object_or_404(klass=Workflow, pk=self.kwargs['pk']) + return get_object_or_404( + klass=Workflow, pk=self.kwargs['workflow_id'] + ) # Other @@ -750,7 +779,8 @@ class WorkflowStateDocumentListView(DocumentListView): def get_workflow_state(self): workflow_state = get_object_or_404( - klass=WorkflowStateRuntimeProxy, pk=self.kwargs['pk'] + klass=WorkflowStateRuntimeProxy, + pk=self.kwargs['workflow_state_id'] ) AccessControlList.objects.check_access( @@ -821,16 +851,16 @@ class SetupWorkflowTransitionTriggerEventListView(FormView): instance.save() except Exception as exception: messages.error( - self.request, - _( + message=_( 'Error updating workflow transition trigger events; %s' - ) % exception + ) % exception, request=self.request + ) else: messages.success( - self.request, _( + message=_( 'Workflow transition trigger events updated successfully' - ) + ), request=self.request ) return super( @@ -838,7 +868,9 @@ class SetupWorkflowTransitionTriggerEventListView(FormView): ).form_valid(form=form) def get_object(self): - return get_object_or_404(klass=WorkflowTransition, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowTransition, pk=self.kwargs['worflow_transition_id'] + ) def get_extra_context(self): return { @@ -874,8 +906,8 @@ class SetupWorkflowTransitionTriggerEventListView(FormView): def get_post_action_redirect(self): return reverse( - 'document_states:setup_workflow_transition_list', - args=(self.get_object().workflow.pk,) + viewname='document_states:setup_workflow_transition_list', + kwargs={'workflow_id': self.get_object().workflow.pk} ) @@ -892,7 +924,8 @@ class ToolLaunchAllWorkflows(ConfirmView): def view_action(self): task_launch_all_workflows.apply_async() messages.success( - self.request, _('Workflow launch queued successfully.') + message=_('Workflow launch queued successfully.'), + request=self.request ) @@ -900,6 +933,7 @@ class WorkflowPreviewView(SingleObjectDetailView): form_class = WorkflowPreviewForm model = Workflow object_permission = permission_workflow_view + pk_url_kwarg = 'workflow_id' def get_extra_context(self): return { diff --git a/mayan/apps/document_states/workflow_actions.py b/mayan/apps/document_states/workflow_actions.py index 65ad0a3433..eb43adb4b2 100644 --- a/mayan/apps/document_states/workflow_actions.py +++ b/mayan/apps/document_states/workflow_actions.py @@ -158,7 +158,7 @@ class HTTPPostAction(WorkflowAction): logger.debug('payload template result: %s', result) try: - payload = json.loads(result, strict=False) + payload = json.loads(s=result, strict=False) except Exception as exception: raise WorkflowStateActionError( _('Payload JSON error: %s') % exception