Update document state app

Sort arguments. Add keyword arguments. Update URL parameters to
the '_id' form.

Signed-off-by: Roberto Rosario <Roberto.Rosario.Gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-01-21 20:06:34 -04:00
parent 83a9b5a60a
commit 55356c4781
13 changed files with 350 additions and 298 deletions

View File

@@ -41,7 +41,7 @@ class APIDocumentTypeWorkflowListView(generics.ListAPIView):
serializer_class = WorkflowSerializer serializer_class = WorkflowSerializer
def get_document_type(self): 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( AccessControlList.objects.check_access(
permissions=permission_document_type_view, user=self.request.user, permissions=permission_document_type_view, user=self.request.user,
@@ -106,7 +106,7 @@ class APIWorkflowDocumentTypeList(generics.ListCreateAPIView):
else: else:
permission_required = permission_workflow_edit 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( AccessControlList.objects.check_access(
permissions=permission_required, user=self.request.user, permissions=permission_required, user=self.request.user,
@@ -159,7 +159,7 @@ class APIWorkflowDocumentTypeView(generics.RetrieveDestroyAPIView):
else: else:
permission_required = permission_workflow_edit 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( AccessControlList.objects.check_access(
permissions=permission_required, user=self.request.user, permissions=permission_required, user=self.request.user,
@@ -297,7 +297,7 @@ class APIWorkflowStateListView(generics.ListCreateAPIView):
else: else:
permission_required = permission_workflow_edit 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( AccessControlList.objects.check_access(
permissions=permission_required, user=self.request.user, permissions=permission_required, user=self.request.user,
@@ -340,7 +340,7 @@ class APIWorkflowStateView(generics.RetrieveUpdateDestroyAPIView):
else: else:
permission_required = permission_workflow_edit 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( AccessControlList.objects.check_access(
permissions=permission_required, user=self.request.user, permissions=permission_required, user=self.request.user,
@@ -393,7 +393,7 @@ class APIWorkflowTransitionListView(generics.ListCreateAPIView):
else: else:
permission_required = permission_workflow_edit 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( AccessControlList.objects.check_access(
permissions=permission_required, user=self.request.user, permissions=permission_required, user=self.request.user,
@@ -447,7 +447,7 @@ class APIWorkflowTransitionView(generics.RetrieveUpdateDestroyAPIView):
else: else:
permission_required = permission_workflow_edit 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( AccessControlList.objects.check_access(
permissions=permission_required, user=self.request.user, permissions=permission_required, user=self.request.user,
@@ -471,7 +471,7 @@ class APIWorkflowInstanceListView(generics.ListAPIView):
} }
def get_document(self): 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( AccessControlList.objects.check_access(
permissions=permission_workflow_view, user=self.request.user, permissions=permission_workflow_view, user=self.request.user,
@@ -496,7 +496,7 @@ class APIWorkflowInstanceView(generics.RetrieveAPIView):
serializer_class = WorkflowInstanceSerializer serializer_class = WorkflowInstanceSerializer
def get_document(self): 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( AccessControlList.objects.check_access(
permissions=permission_workflow_view, user=self.request.user, 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. post: Transition a document workflow by creating a new document workflow log entry.
""" """
def get_document(self): 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': if self.request.method == 'GET':
""" """

View File

@@ -73,16 +73,24 @@ class DocumentStatesApp(MayanAppConfig):
app_label='common', model_name='ErrorLogEntry' app_label='common', model_name='ErrorLogEntry'
) )
Workflow = self.get_model('Workflow') Workflow = self.get_model(model_name='Workflow')
WorkflowInstance = self.get_model('WorkflowInstance') WorkflowInstance = self.get_model(model_name='WorkflowInstance')
WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry') WorkflowInstanceLogEntry = self.get_model(
WorkflowRuntimeProxy = self.get_model('WorkflowRuntimeProxy') model_name='WorkflowInstanceLogEntry'
WorkflowState = self.get_model('WorkflowState') )
WorkflowStateAction = self.get_model('WorkflowStateAction') WorkflowRuntimeProxy = self.get_model(
WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy') model_name='WorkflowRuntimeProxy'
WorkflowTransition = self.get_model('WorkflowTransition') )
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 = self.get_model(
'WorkflowTransitionTriggerEvent' model_name='WorkflowTransitionTriggerEvent'
) )
Document.add_to_class( Document.add_to_class(

View File

@@ -5,5 +5,5 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.classes import ErrorLogNamespace from mayan.apps.common.classes import ErrorLogNamespace
error_log_state_actions = ErrorLogNamespace( error_log_state_actions = ErrorLogNamespace(
name='workflow_state_actions', label=_('Workflow state actions') label=_('Workflow state actions'), name='workflow_state_actions'
) )

View File

@@ -50,7 +50,7 @@ class WorkflowStateActionDynamicForm(DynamicModelForm):
WorkflowStateActionDynamicForm, self WorkflowStateActionDynamicForm, self
).__init__(*args, **kwargs) ).__init__(*args, **kwargs)
if self.instance.action_data: 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 self.fields[key].initial = value
return result return result

View File

@@ -87,7 +87,10 @@ class Workflow(models.Model):
def get_api_image_url(self, *args, **kwargs): def get_api_image_url(self, *args, **kwargs):
final_url = furl() final_url = furl()
final_url.args = kwargs 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() final_url.args['_hash'] = self.get_hash()
return final_url.tostr() return final_url.tostr()
@@ -321,7 +324,7 @@ class WorkflowStateAction(models.Model):
get_class_label.short_description = _('Action type') get_class_label.short_description = _('Action type')
def loads(self): def loads(self):
return json.loads(self.action_data) return json.loads(s=self.action_data)
@python_2_unicode_compatible @python_2_unicode_compatible
@@ -403,7 +406,8 @@ class WorkflowInstance(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse( 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): def get_context(self):

View File

@@ -7,23 +7,23 @@ from mayan.apps.permissions import PermissionNamespace
namespace = PermissionNamespace(label=_('Document workflows'), name='document_states') namespace = PermissionNamespace(label=_('Document workflows'), name='document_states')
permission_workflow_create = namespace.add_permission( permission_workflow_create = namespace.add_permission(
name='workflow_create', label=_('Create workflows') label=_('Create workflows'), name='workflow_create'
) )
permission_workflow_delete = namespace.add_permission( permission_workflow_delete = namespace.add_permission(
name='workflow_delte', label=_('Delete workflows') label=_('Delete workflows'), name='workflow_delte'
) )
permission_workflow_edit = namespace.add_permission( permission_workflow_edit = namespace.add_permission(
name='workflow_edit', label=_('Edit workflows') label=_('Edit workflows'), name='workflow_edit'
) )
permission_workflow_view = namespace.add_permission( 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 # Translators: This text refers to the permission to grant user the ability to
# 'transition workflows' from one state to another, to move the workflow # 'transition workflows' from one state to another, to move the workflow
# forwards # forwards
permission_workflow_transition = namespace.add_permission( permission_workflow_transition = namespace.add_permission(
name='workflow_transition', label=_('Transition workflows') label=_('Transition workflows'), name='workflow_transition'
) )
permission_workflow_tools = namespace.add_permission( permission_workflow_tools = namespace.add_permission(
name='workflow_tools', label=_('Execute workflow tools') label=_('Execute workflow tools'), name='workflow_tools'
) )

View File

@@ -5,17 +5,17 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.task_manager.classes import CeleryQueue from mayan.apps.task_manager.classes import CeleryQueue
queue_document_states = CeleryQueue( queue_document_states = CeleryQueue(
name='document_states', label=_('Document states') label=_('Document states'), name='document_states'
) )
queue_document_states_fast = CeleryQueue( 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( 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( 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'
) )

View File

@@ -48,9 +48,9 @@ class WorkflowDocumentTypeSerializer(DocumentTypeSerializer):
def get_workflow_document_type_url(self, instance): def get_workflow_document_type_url(self, instance):
return reverse( return reverse(
'rest_api:workflow-document-type-detail', args=( viewname='rest_api:workflow-document-type-detail', kwargs={
self.context['workflow'].pk, instance.pk 'workflow_pk': self.context['workflow'].pk, 'document_type_pk': instance.pk
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
@@ -70,16 +70,16 @@ class WorkflowStateSerializer(serializers.HyperlinkedModelSerializer):
def get_url(self, instance): def get_url(self, instance):
return reverse( return reverse(
'rest_api:workflowstate-detail', args=( viewname='rest_api:workflowstate-detail', kwargs={
instance.workflow.pk, instance.pk 'workflow_pk': instance.workflow.pk, 'workflow_state_pk': instance.pk
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
def get_workflow_url(self, instance): def get_workflow_url(self, instance):
return reverse( return reverse(
'rest_api:workflow-detail', args=( viewname='rest_api:workflow-detail', kwargs={
instance.workflow.pk, 'workflow_pk': instance.workflow.pk,
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
@@ -98,16 +98,16 @@ class WorkflowTransitionSerializer(serializers.HyperlinkedModelSerializer):
def get_url(self, instance): def get_url(self, instance):
return reverse( return reverse(
'rest_api:workflowtransition-detail', args=( viewname='rest_api:workflowtransition-detail', kwargs={
instance.workflow.pk, instance.pk 'workflow_pk': instance.workflow.pk, 'transition_pk': instance.pk
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
def get_workflow_url(self, instance): def get_workflow_url(self, instance):
return reverse( return reverse(
'rest_api:workflow-detail', args=( viewname='rest_api:workflow-detail', kwargs={
instance.workflow.pk, 'workflow_pk': instance.workflow.pk,
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
@@ -145,16 +145,16 @@ class WritableWorkflowTransitionSerializer(serializers.ModelSerializer):
def get_url(self, instance): def get_url(self, instance):
return reverse( return reverse(
'rest_api:workflowtransition-detail', args=( viewname='rest_api:workflowtransition-detail', kwargs={
instance.workflow.pk, instance.pk 'workflow_pk': instance.workflow.pk, 'transition_pk': instance.pk
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
def get_workflow_url(self, instance): def get_workflow_url(self, instance):
return reverse( return reverse(
'rest_api:workflow-detail', args=( viewname='rest_api:workflow-detail', kwargs={
instance.workflow.pk, 'workflow_pk': instance.workflow.pk,
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
def update(self, instance, validated_data): def update(self, instance, validated_data):
@@ -190,9 +190,9 @@ class WorkflowSerializer(serializers.HyperlinkedModelSerializer):
def get_image_url(self, instance): def get_image_url(self, instance):
return reverse( return reverse(
'rest_api:workflow-image', args=( viewname='rest_api:workflow-image', kwargs={
instance.pk, 'workflow_pk': instance.pk
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
@@ -210,10 +210,10 @@ class WorkflowInstanceLogEntrySerializer(serializers.ModelSerializer):
def get_document_workflow_url(self, instance): def get_document_workflow_url(self, instance):
return reverse( return reverse(
'rest_api:workflowinstance-detail', args=( viewname='rest_api:workflowinstance-detail', kwargs={
instance.workflow_instance.document.pk, 'document_pk': instance.workflow_instance.document.pk,
instance.workflow_instance.pk, 'transition_pk': instance.workflow_instance.pk
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
@@ -248,16 +248,16 @@ class WorkflowInstanceSerializer(serializers.ModelSerializer):
def get_document_workflow_url(self, instance): def get_document_workflow_url(self, instance):
return reverse( return reverse(
'rest_api:workflowinstance-detail', args=( viewname='rest_api:workflowinstance-detail', kwargs={
instance.document.pk, instance.pk, 'document_pk': instance.document.pk, 'transition_pk': instance.pk,
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
def get_log_entries_url(self, instance): def get_log_entries_url(self, instance):
return reverse( return reverse(
'rest_api:workflowinstancelogentry-list', args=( viewname='rest_api:workflowinstancelogentry-list', kwargs={
instance.document.pk, instance.pk, 'document_pk': instance.document.pk, 'workflow_pk': instance.pk,
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
@@ -339,10 +339,10 @@ class WritableWorkflowInstanceLogEntrySerializer(serializers.ModelSerializer):
def get_document_workflow_url(self, instance): def get_document_workflow_url(self, instance):
return reverse( return reverse(
'rest_api:workflowinstance-detail', args=( viewname='rest_api:workflowinstance-detail', kwargs={
instance.workflow_instance.document.pk, 'document_pk': instance.workflow_instance.document.pk,
instance.workflow_instance.pk, 'workflow_pk': instance.workflow_instance.pk,
), request=self.context['request'], format=self.context['format'] }, request=self.context['request'], format=self.context['format']
) )
def validate(self, attrs): def validate(self, attrs):

View File

@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.smart_settings import Namespace 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( settings_workflow_image_cache_time = namespace.add_setting(
global_name='WORKFLOWS_IMAGE_CACHE_TIME', default='31556926', global_name='WORKFLOWS_IMAGE_CACHE_TIME', default='31556926',

View File

@@ -49,9 +49,8 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_delete_view(self): def _request_workflow_delete_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_delete', args=( viewname='document_states:setup_workflow_delete',
self.workflow.pk, kwargs={'workflow_id': self.workflow.pk}
),
) )
def test_workflow_delete_view_no_access(self): def test_workflow_delete_view_no_access(self):
@@ -69,9 +68,9 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_edit_view(self): def _request_workflow_edit_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_edit', args=( viewname='document_states:setup_workflow_edit',
self.workflow.pk, kwargs={'workflow_id': self.workflow.pk},
), data={ data={
'label': TEST_WORKFLOW_LABEL_EDITED, 'label': TEST_WORKFLOW_LABEL_EDITED,
'internal_name': self.workflow.internal_name 'internal_name': self.workflow.internal_name
} }
@@ -80,7 +79,7 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def test_workflow_edit_view_no_access(self): def test_workflow_edit_view_no_access(self):
self._create_workflow() self._create_workflow()
response = self._request_workflow_edit_view() response = self._request_workflow_edit_view()
self.assertEquals(response.status_code, 403) self.assertEquals(response.status_code, 404)
self.workflow.refresh_from_db() self.workflow.refresh_from_db()
self.assertEqual(self.workflow.label, TEST_WORKFLOW_LABEL) self.assertEqual(self.workflow.label, TEST_WORKFLOW_LABEL)
@@ -112,15 +111,14 @@ class DocumentStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_preview_view(self): def _request_workflow_preview_view(self):
return self.get( return self.get(
viewname='document_states:workflow_preview', args=( viewname='document_states:workflow_preview',
self.workflow.pk, kwargs={'workflow_id': self.workflow.pk}
),
) )
def test_workflow_preview_view_no_access(self): def test_workflow_preview_view_no_access(self):
self._create_workflow() self._create_workflow()
response = self._request_workflow_preview_view() 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()) self.assertTrue(self.workflow in Workflow.objects.all())
def test_workflow_preview_view_with_access(self): def test_workflow_preview_view_with_access(self):
@@ -138,7 +136,8 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_state_create_view(self): def _request_workflow_state_create_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_state_create', viewname='document_states:setup_workflow_state_create',
args=(self.workflow.pk,), data={ kwargs={'workflow_id': self.workflow.pk},
data={
'label': TEST_WORKFLOW_STATE_LABEL, 'label': TEST_WORKFLOW_STATE_LABEL,
'completion': TEST_WORKFLOW_STATE_COMPLETION, 'completion': TEST_WORKFLOW_STATE_COMPLETION,
} }
@@ -152,7 +151,9 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def test_create_workflow_state_with_access(self): def test_create_workflow_state_with_access(self):
self._create_workflow() 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() response = self._request_workflow_state_create_view()
self.assertEquals(response.status_code, 302) self.assertEquals(response.status_code, 302)
self.assertEquals(WorkflowState.objects.count(), 1) self.assertEquals(WorkflowState.objects.count(), 1)
@@ -167,14 +168,14 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_state_delete_view(self): def _request_workflow_state_delete_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_state_delete', 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): def test_delete_workflow_state_no_access(self):
self._create_workflow() self._create_workflow()
self._create_workflow_states() self._create_workflow_states()
response = self._request_workflow_state_delete_view() 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) self.assertEquals(WorkflowState.objects.count(), 2)
def test_delete_workflow_state_with_access(self): def test_delete_workflow_state_with_access(self):
@@ -188,7 +189,8 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_state_edit_view(self): def _request_workflow_state_edit_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_state_edit', 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 'label': TEST_WORKFLOW_STATE_LABEL_EDITED
} }
) )
@@ -197,7 +199,7 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
self._create_workflow() self._create_workflow()
self._create_workflow_states() self._create_workflow_states()
response = self._request_workflow_state_edit_view() 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) self.assertEquals(self.workflow_state.label, TEST_WORKFLOW_STATE_LABEL)
def test_edit_workflow_state_with_access(self): def test_edit_workflow_state_with_access(self):
@@ -212,14 +214,14 @@ class DocumentStateStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def _request_workflow_state_list_view(self): def _request_workflow_state_list_view(self):
return self.get( return self.get(
viewname='document_states:setup_workflow_state_list', 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): def test_workflow_state_list_no_access(self):
self._create_workflow() self._create_workflow()
self._create_workflow_states() self._create_workflow_states()
response = self._request_workflow_state_list_view() 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): def test_workflow_state_list_with_access(self):
self._create_workflow() self._create_workflow()
@@ -260,7 +262,7 @@ class DocumentStateToolViewTestCase(GenericDocumentViewTestCase):
def _request_workflow_launch_view(self): def _request_workflow_launch_view(self):
return self.post( 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): 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): def _request_workflow_transition_create_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_transition_create', viewname='document_states:setup_workflow_transition_create',
args=(self.workflow.pk,), data={ kwargs={'workflow_id': self.workflow.pk}, data={
'label': TEST_WORKFLOW_TRANSITION_LABEL, 'label': TEST_WORKFLOW_TRANSITION_LABEL,
'origin_state': self.workflow_initial_state.pk, 'origin_state': self.workflow_initial_state.pk,
'destination_state': self.workflow_state.pk, 'destination_state': self.workflow_state.pk,
@@ -306,7 +308,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
self._create_workflow() self._create_workflow()
self._create_workflow_states() self._create_workflow_states()
response = self._request_workflow_transition_create_view() 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) self.assertEquals(WorkflowTransition.objects.count(), 0)
def test_create_workflow_transition_with_access(self): def test_create_workflow_transition_with_access(self):
@@ -332,7 +334,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
def _request_workflow_transition_delete_view(self): def _request_workflow_transition_delete_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_transition_delete', 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): def test_delete_workflow_transition_no_access(self):
@@ -340,7 +342,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
self._create_workflow_states() self._create_workflow_states()
self._create_workflow_transition() self._create_workflow_transition()
response = self._request_workflow_transition_delete_view() 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()) self.assertTrue(self.workflow_transition in WorkflowTransition.objects.all())
def test_delete_workflow_transition_with_access(self): def test_delete_workflow_transition_with_access(self):
@@ -355,7 +357,8 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
def _request_workflow_transition_edit_view(self): def _request_workflow_transition_edit_view(self):
return self.post( return self.post(
viewname='document_states:setup_workflow_transition_edit', 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, 'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED,
'origin_state': self.workflow_initial_state.pk, 'origin_state': self.workflow_initial_state.pk,
'destination_state': self.workflow_state.pk, 'destination_state': self.workflow_state.pk,
@@ -367,7 +370,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
self._create_workflow_states() self._create_workflow_states()
self._create_workflow_transition() self._create_workflow_transition()
response = self._request_workflow_transition_edit_view() 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.workflow_transition.refresh_from_db()
self.assertEqual( self.assertEqual(
self.workflow_transition.label, TEST_WORKFLOW_TRANSITION_LABEL self.workflow_transition.label, TEST_WORKFLOW_TRANSITION_LABEL
@@ -388,7 +391,7 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
def _request_workflow_transition_list_view(self): def _request_workflow_transition_list_view(self):
return self.get( return self.get(
viewname='document_states:setup_workflow_transition_list', 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): def test_workflow_transition_list_no_access(self):
@@ -411,7 +414,8 @@ class DocumentStateTransitionViewTestCase(WorkflowTestMixin, GenericDocumentView
def _request_workflow_transition(self): def _request_workflow_transition(self):
return self.post( return self.post(
viewname='document_states:workflow_instance_transition', 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, 'transition': self.workflow_transition.pk,
} }
) )
@@ -481,7 +485,7 @@ class DocumentStateTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumen
def _request_workflow_transition_event_list_view(self): def _request_workflow_transition_event_list_view(self):
return self.get( return self.get(
viewname='document_states:setup_workflow_transition_events', 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): def test_workflow_transition_event_list_no_access(self):
@@ -489,7 +493,7 @@ class DocumentStateTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumen
self._create_workflow_states() self._create_workflow_states()
self._create_workflow_transition() self._create_workflow_transition()
response = self._request_workflow_transition_event_list_view() 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): def test_workflow_transition_event_list_with_access(self):
self._create_workflow() self._create_workflow()

View File

@@ -29,207 +29,209 @@ from .views import (
urlpatterns = [ urlpatterns = [
url( url(
r'^document/(?P<pk>\d+)/workflows/$', regex=r'^workflows/$', name='setup_workflow_list',
DocumentWorkflowInstanceListView.as_view(), view=SetupWorkflowListView.as_view()
name='document_workflow_instance_list'
), ),
url( url(
r'^document/workflows/(?P<pk>\d+)/$', regex=r'^workflows/create/$', name='setup_workflow_create',
WorkflowInstanceDetailView.as_view(), name='workflow_instance_detail' view=SetupWorkflowCreateView.as_view()
), ),
url( url(
r'^document/workflows/(?P<pk>\d+)/transition/$', regex=r'^workflows/(?P<workflow_id>\d+)/delete/$',
WorkflowInstanceTransitionView.as_view(), name='setup_workflow_delete', view=SetupWorkflowDeleteView.as_view()
name='workflow_instance_transition'
), ),
url( url(
r'^setup/all/$', SetupWorkflowListView.as_view(), regex=r'^workflows/(?P<workflow_id>\d+)/edit/$',
name='setup_workflow_list' name='setup_workflow_edit', view=SetupWorkflowEditView.as_view()
), ),
url( url(
r'^setup/create/$', SetupWorkflowCreateView.as_view(), regex=r'^workflows/(?P<workflow_id>\d+)/preview/$',
name='setup_workflow_create' name='workflow_preview', view=WorkflowPreviewView.as_view()
), ),
url( url(
r'^setup/workflow/(?P<pk>\d+)/edit/$', SetupWorkflowEditView.as_view(), regex=r'^workflows/(?P<workflow_id>\d+)/document_types/$',
name='setup_workflow_edit' name='setup_workflow_document_types',
view=SetupWorkflowDocumentTypesView.as_view()
), ),
url( url(
r'^setup/workflow/(?P<pk>\d+)/delete/$', SetupWorkflowDeleteView.as_view(), regex=r'^workflows/(?P<workflow_id>\d+)/states/$',
name='setup_workflow_delete' name='setup_workflow_state_list',
view=SetupWorkflowStateListView.as_view()
), ),
url( url(
r'^setup/workflow/(?P<pk>\d+)/documents/$', regex=r'^workflows/(?P<workflow_id>\d+)/states/create/$',
WorkflowDocumentListView.as_view(), name='setup_workflow_state_create',
name='setup_workflow_document_list' view=SetupWorkflowStateCreateView.as_view()
), ),
url( url(
r'^setup/workflow/(?P<pk>\d+)/document_types/$', regex=r'^workflows/states/(?P<workflow_state_id>\d+)/delete/$',
SetupWorkflowDocumentTypesView.as_view(), name='setup_workflow_state_delete',
name='setup_workflow_document_types' view=SetupWorkflowStateDeleteView.as_view()
), ),
url( url(
r'^setup/workflow/(?P<pk>\d+)/states/$', SetupWorkflowStateListView.as_view(), regex=r'^workflows/states/(?P<workflow_state_id>\d+)/edit/$',
name='setup_workflow_state_list' name='setup_workflow_state_edit',
), view=SetupWorkflowStateEditView.as_view()
url(
r'^setup/workflow/(?P<pk>\d+)/states/create/$',
SetupWorkflowStateCreateView.as_view(),
name='setup_workflow_state_create'
),
url(
r'^setup/workflow/(?P<pk>\d+)/transitions/$',
SetupWorkflowTransitionListView.as_view(),
name='setup_workflow_transition_list'
),
url(
r'^setup/workflow/(?P<pk>\d+)/transitions/create/$',
SetupWorkflowTransitionCreateView.as_view(),
name='setup_workflow_transition_create'
),
url(
r'^setup/workflow/(?P<pk>\d+)/transitions/events/$',
SetupWorkflowTransitionTriggerEventListView.as_view(),
name='setup_workflow_transition_events'
),
url(
r'^setup/workflow/state/(?P<pk>\d+)/delete/$',
SetupWorkflowStateDeleteView.as_view(),
name='setup_workflow_state_delete'
),
url(
r'^setup/workflow/state/(?P<pk>\d+)/edit/$',
SetupWorkflowStateEditView.as_view(),
name='setup_workflow_state_edit'
),
url(
r'^setup/workflow/state/(?P<pk>\d+)/actions/$',
SetupWorkflowStateActionListView.as_view(),
name='setup_workflow_state_action_list'
),
url(
r'^setup/workflow/state/(?P<pk>\d+)/actions/$',
SetupWorkflowStateActionListView.as_view(),
name='setup_workflow_state_action_list'
),
url(
r'^setup/workflow/state/(?P<pk>\d+)/actions/selection/$',
SetupWorkflowStateActionSelectionView.as_view(),
name='setup_workflow_state_action_selection'
),
url(
r'^setup/workflow/state/(?P<pk>\d+)/actions/(?P<class_path>[a-zA-Z0-9_.]+)/create/$',
SetupWorkflowStateActionCreateView.as_view(),
name='setup_workflow_state_action_create'
), ),
url( url(
r'^setup/workflow/state/actions/(?P<pk>\d+)/delete/$', regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/$',
SetupWorkflowStateActionDeleteView.as_view(), name='setup_workflow_state_action_list',
view=SetupWorkflowStateActionListView.as_view()
),
url(
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/selection/$',
name='setup_workflow_state_action_selection',
view=SetupWorkflowStateActionSelectionView.as_view(),
),
url(
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/(?P<class_path>[a-zA-Z0-9_.]+)/create/$',
name='setup_workflow_state_action_create',
view=SetupWorkflowStateActionCreateView.as_view()
),
url(
regex=r'^workflows/states/actions/(?P<workflow_state_action_id>\d+)/delete/$',
view=SetupWorkflowStateActionDeleteView.as_view(),
name='setup_workflow_state_action_delete' name='setup_workflow_state_action_delete'
), ),
url( url(
r'^setup/workflow/state/actions/(?P<pk>\d+)/edit/$', regex=r'^workflows/states/actions/(?P<workflow_state_action_id>\d+)/edit/$',
SetupWorkflowStateActionEditView.as_view(), name='setup_workflow_state_action_edit',
name='setup_workflow_state_action_edit' view=SetupWorkflowStateActionEditView.as_view()
),
url(
r'^setup/workflow/transitions/(?P<pk>\d+)/delete/$',
SetupWorkflowTransitionDeleteView.as_view(),
name='setup_workflow_transition_delete'
),
url(
r'^setup/workflow/transitions/(?P<pk>\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<pk>\d+)/documents/$',
WorkflowDocumentListView.as_view(),
name='workflow_document_list'
), ),
url( url(
r'^(?P<pk>\d+)/states/$', regex=r'^workflows/(?P<workflow_id>\d+)/transitions/$',
WorkflowStateListView.as_view(), name='setup_workflow_transition_list',
name='workflow_state_list' view=SetupWorkflowTransitionListView.as_view()
), ),
url( url(
r'^(?P<pk>\d+)/preview/$', regex=r'^workflows/(?P<workflow_id>\d+)/transitions/create/$',
WorkflowPreviewView.as_view(), name='setup_workflow_transition_create',
name='workflow_preview' view=SetupWorkflowTransitionCreateView.as_view()
), ),
url( url(
r'^state/(?P<pk>\d+)/documents/$', regex=r'^workflows/transitions/(?P<workflow_transitions_id>\d+)/delete/$',
WorkflowStateDocumentListView.as_view(), name='setup_workflow_transition_delete',
name='workflow_state_document_list' view=SetupWorkflowTransitionDeleteView.as_view()
), ),
url(
regex=r'^workflows/transitions/(?P<workflow_transitions_id>\d+)/edit/$',
name='setup_workflow_transition_edit',
view=SetupWorkflowTransitionEditView.as_view()
),
url(
regex=r'^workflows/(?P<workflow_id>\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<workflow_id>\d+)/documents/$',
name='setup_workflow_document_list',
view=WorkflowDocumentListView.as_view()
),
url(
regex=r'^workflow_instances/(?P<workflow_id>\d+)/documents/$',
name='workflow_document_list',
view=WorkflowDocumentListView.as_view()
),
url(
regex=r'^workflow_instances/(?P<workflow_id>\d+)/states/$',
name='workflow_state_list', view=WorkflowStateListView.as_view()
),
url(
regex=r'^workflow_instances/states/(?P<workflow_state_id>\d+)/documents/$',
name='workflow_state_document_list',
view=WorkflowStateDocumentListView.as_view()
),
url(
regex=r'^documents/(?P<document_id>\d+)/workflows/$',
name='document_workflow_instance_list',
view=DocumentWorkflowInstanceListView.as_view()
),
url(
regex=r'^documents/workflows/(?P<workflow_instance_id>\d+)/$',
name='workflow_instance_detail',
view=WorkflowInstanceDetailView.as_view()
),
url(
regex=r'^documents/workflows/(?P<workflow_instance_id>\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 = [ api_urls = [
url(r'^workflows/$', APIWorkflowListView.as_view(), name='workflow-list'),
url( url(
r'^workflows/(?P<pk>[0-9]+)/$', APIWorkflowView.as_view(), regex=r'^workflows/$', name='workflow-list',
name='workflow-detail' view=APIWorkflowListView.as_view()
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/image/$', regex=r'^workflows/(?P<workflow_id>\d+)/$',
APIWorkflowImageView.as_view(), name='workflow-image' name='workflow-detail', view=APIWorkflowView.as_view()
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/document_types/$', regex=r'^workflows/(?P<workflow_id>\d+)/image/$',
APIWorkflowDocumentTypeList.as_view(), name='workflow-image', view=APIWorkflowImageView.as_view()
name='workflow-document-type-list'
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/document_types/(?P<document_type_pk>[0-9]+)/$', regex=r'^workflows/(?P<workflow_id>\d+)/document_types/$',
APIWorkflowDocumentTypeView.as_view(), name='workflow-document-type-list',
name='workflow-document-type-detail' view=APIWorkflowDocumentTypeList.as_view()
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/states/$', regex=r'^workflows/(?P<workflow_id>\d+)/document_types/(?P<document_type_id>\d+)/$',
APIWorkflowStateListView.as_view(), name='workflowstate-list' name='workflow-document-type-detail',
view=APIWorkflowDocumentTypeView.as_view()
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/states/(?P<state_pk>[0-9]+)/$', regex=r'^workflows/(?P<workflow_id>\d+)/states/$',
APIWorkflowStateView.as_view(), name='workflowstate-detail' name='workflowstate-list',
view=APIWorkflowStateListView.as_view()
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/transitions/$', regex=r'^workflows/(?P<workflow_id>\d+)/states/(?P<state_id>\d+)/$',
APIWorkflowTransitionListView.as_view(), name='workflowtransition-list' name='workflowstate-detail', view=APIWorkflowStateView.as_view()
), ),
url( url(
r'^workflows/(?P<pk>[0-9]+)/transitions/(?P<transition_pk>[0-9]+)/$', regex=r'^workflows/(?P<workflow_id>\d+)/transitions/$',
APIWorkflowTransitionView.as_view(), name='workflowtransition-detail' name='workflowtransition-list',
view=APIWorkflowTransitionListView.as_view()
), ),
url( url(
r'^documents/(?P<pk>[0-9]+)/workflows/$', regex=r'^workflows/(?P<workflow_id>\d+)/transitions/(?P<transition_id>\d+)/$',
APIWorkflowInstanceListView.as_view(), name='workflowinstance-list' name='workflowtransition-detail',
view=APIWorkflowTransitionView.as_view()
), ),
url( url(
r'^documents/(?P<pk>[0-9]+)/workflows/(?P<workflow_pk>[0-9]+)/$', regex=r'^documents/(?P<document_id>\d+)/workflows/$',
APIWorkflowInstanceView.as_view(), name='workflowinstance-detail' name='workflowinstance-list',
view=APIWorkflowInstanceListView.as_view()
), ),
url( url(
r'^documents/(?P<pk>[0-9]+)/workflows/(?P<workflow_pk>[0-9]+)/log_entries/$', regex=r'^documents/(?P<document_id>\d+)/workflows/(?P<workflow_id>\d+)/$',
APIWorkflowInstanceLogEntryListView.as_view(), name='workflowinstance-detail',
name='workflowinstancelogentry-list' view=APIWorkflowInstanceView.as_view()
), ),
url( url(
r'^document_types/(?P<pk>[0-9]+)/workflows/$', regex=r'^documents/(?P<document_id>\d+)/workflows/(?P<workflow_id>\d+)/log_entries/$',
APIDocumentTypeWorkflowListView.as_view(), name='workflowinstancelogentry-list',
name='documenttype-workflow-list' view=APIWorkflowInstanceLogEntryListView.as_view()
), ),
url(
regex=r'^document_types/(?P<document_type_id>\d+)/workflows/$',
name='documenttype-workflow-list',
view=APIDocumentTypeWorkflowListView.as_view()
)
] ]

View File

@@ -58,7 +58,9 @@ class DocumentWorkflowInstanceListView(SingleObjectListView):
).dispatch(request, *args, **kwargs) ).dispatch(request, *args, **kwargs)
def get_document(self): 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): def get_extra_context(self):
return { return {
@@ -114,7 +116,9 @@ class WorkflowInstanceDetailView(SingleObjectListView):
return self.get_workflow_instance().log_entries.order_by('-datetime') return self.get_workflow_instance().log_entries.order_by('-datetime')
def get_workflow_instance(self): 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): class WorkflowInstanceTransitionView(FormView):
@@ -127,11 +131,12 @@ class WorkflowInstanceTransitionView(FormView):
transition=form.cleaned_data['transition'], user=self.request.user transition=form.cleaned_data['transition'], user=self.request.user
) )
messages.success( messages.success(
self.request, _( message=_(
'Document "%s" transitioned successfully' '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): def get_extra_context(self):
return { return {
@@ -154,7 +159,9 @@ class WorkflowInstanceTransitionView(FormView):
return self.get_workflow_instance().get_absolute_url() return self.get_workflow_instance().get_absolute_url()
def get_workflow_instance(self): 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 # Setup
@@ -185,7 +192,7 @@ class SetupWorkflowListView(SingleObjectListView):
class SetupWorkflowCreateView(SingleObjectCreateView): class SetupWorkflowCreateView(SingleObjectCreateView):
form_class = WorkflowForm form_class = WorkflowForm
model = Workflow 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 view_permission = permission_workflow_create
@@ -193,13 +200,15 @@ class SetupWorkflowEditView(SingleObjectEditView):
form_class = WorkflowForm form_class = WorkflowForm
model = Workflow model = Workflow
object_permission = permission_workflow_edit 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): class SetupWorkflowDeleteView(SingleObjectDeleteView):
model = Workflow model = Workflow
object_permission = permission_workflow_delete 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): class SetupWorkflowDocumentTypesView(AssignRemoveView):
@@ -227,7 +236,9 @@ class SetupWorkflowDocumentTypesView(AssignRemoveView):
} }
def get_object(self): 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): def left_list(self):
return AssignRemoveView.generate_choices( return AssignRemoveView.generate_choices(
@@ -288,18 +299,21 @@ class SetupWorkflowStateActionCreateView(SingleObjectDynamicFormCreateView):
} }
def get_object(self): 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): def get_post_action_redirect(self):
return reverse( return reverse(
'document_states:setup_workflow_state_action_list', viewname='document_states:setup_workflow_state_action_list',
args=(self.get_object().pk,) kwargs={'workflow_state_id': self.get_object().pk}
) )
class SetupWorkflowStateActionDeleteView(SingleObjectDeleteView): class SetupWorkflowStateActionDeleteView(SingleObjectDeleteView):
model = WorkflowStateAction model = WorkflowStateAction
object_permission = permission_workflow_edit object_permission = permission_workflow_edit
pk_url_kwarg = 'workflow_state_action_id'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -314,8 +328,8 @@ class SetupWorkflowStateActionDeleteView(SingleObjectDeleteView):
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse( return reverse(
'document_states:setup_workflow_state_action_list', viewname='document_states:setup_workflow_state_action_list',
args=(self.get_object().state.pk,) kwargs={'workflow_state_id': self.get_object().state.pk}
) )
@@ -323,6 +337,7 @@ class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView):
form_class = WorkflowStateActionDynamicForm form_class = WorkflowStateActionDynamicForm
model = WorkflowStateAction model = WorkflowStateAction
object_permission = permission_workflow_edit object_permission = permission_workflow_edit
pk_url_kwarg = 'workflow_state_action_id'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -348,8 +363,8 @@ class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView):
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse( return reverse(
'document_states:setup_workflow_state_action_list', viewname='document_states:setup_workflow_state_action_list',
args=(self.get_object().state.pk,) kwargs={'workflow_state_id': self.get_object().state.pk}
) )
@@ -389,7 +404,9 @@ class SetupWorkflowStateActionListView(SingleObjectListView):
return self.get_workflow_state().actions.all() return self.get_workflow_state().actions.all()
def get_workflow_state(self): 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): class SetupWorkflowStateActionSelectionView(FormView):
@@ -399,9 +416,12 @@ class SetupWorkflowStateActionSelectionView(FormView):
def form_valid(self, form): def form_valid(self, form):
klass = form.cleaned_data['klass'] klass = form.cleaned_data['klass']
return HttpResponseRedirect( return HttpResponseRedirect(
reverse( redirect_to=reverse(
'document_states:setup_workflow_state_action_create', viewname='document_states:setup_workflow_state_action_create',
args=(self.get_object().pk, klass,), kwargs={
'workflow_state_id': self.get_object().pk,
'class_path': klass
}
) )
) )
@@ -416,7 +436,9 @@ class SetupWorkflowStateActionSelectionView(FormView):
} }
def get_object(self): 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 # Workflow states
@@ -441,11 +463,12 @@ class SetupWorkflowStateCreateView(SingleObjectCreateView):
def get_success_url(self): def get_success_url(self):
return reverse( 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): 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( AccessControlList.objects.check_access(
permissions=(permission_workflow_edit,), obj=workflow, permissions=(permission_workflow_edit,), obj=workflow,
user=self.request.user user=self.request.user
@@ -456,6 +479,7 @@ class SetupWorkflowStateCreateView(SingleObjectCreateView):
class SetupWorkflowStateDeleteView(SingleObjectDeleteView): class SetupWorkflowStateDeleteView(SingleObjectDeleteView):
model = WorkflowState model = WorkflowState
object_permission = permission_workflow_edit object_permission = permission_workflow_edit
pk_url_kwarg = 'workflow_state_id'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -469,12 +493,12 @@ class SetupWorkflowStateDeleteView(SingleObjectDeleteView):
def get_success_url(self): def get_success_url(self):
return reverse( return reverse(
'document_states:setup_workflow_state_list', viewname='document_states:setup_workflow_state_list',
args=(self.get_object().workflow.pk,) kwargs={'workflow_id': self.get_object().workflow.pk}
) )
def get_workflow(self): 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( AccessControlList.objects.check_access(
permissions=(permission_workflow_edit,), obj=workflow, permissions=(permission_workflow_edit,), obj=workflow,
user=self.request.user user=self.request.user
@@ -486,6 +510,7 @@ class SetupWorkflowStateEditView(SingleObjectEditView):
form_class = WorkflowStateForm form_class = WorkflowStateForm
model = WorkflowState model = WorkflowState
object_permission = permission_workflow_edit object_permission = permission_workflow_edit
pk_url_kwarg = 'workflow_state_id'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -496,8 +521,8 @@ class SetupWorkflowStateEditView(SingleObjectEditView):
def get_success_url(self): def get_success_url(self):
return reverse( return reverse(
'document_states:setup_workflow_state_list', viewname='document_states:setup_workflow_state_list',
args=(self.get_object().workflow.pk,) kwargs={'workflow_id': self.get_object().workflow.pk}
) )
@@ -537,7 +562,7 @@ class SetupWorkflowStateListView(SingleObjectListView):
return self.get_workflow().states.all() return self.get_workflow().states.all()
def get_workflow(self): 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 # Transitions
@@ -569,12 +594,12 @@ class SetupWorkflowTransitionCreateView(SingleObjectCreateView):
def get_success_url(self): def get_success_url(self):
return reverse( return reverse(
'document_states:setup_workflow_transition_list', viewname='document_states:setup_workflow_transition_list',
args=(self.kwargs['pk'],) kwargs={'workflow_id': self.kwargs['workflow_id']}
) )
def get_workflow(self): 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( AccessControlList.objects.check_access(
permissions=(permission_workflow_edit,), obj=workflow, permissions=(permission_workflow_edit,), obj=workflow,
user=self.request.user user=self.request.user
@@ -585,6 +610,7 @@ class SetupWorkflowTransitionCreateView(SingleObjectCreateView):
class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView): class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView):
model = WorkflowTransition model = WorkflowTransition
object_permission = permission_workflow_edit object_permission = permission_workflow_edit
pk_url_kwarg = 'workflow_transition_id'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -595,8 +621,8 @@ class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView):
def get_success_url(self): def get_success_url(self):
return reverse( return reverse(
'document_states:setup_workflow_transition_list', viewname='document_states:setup_workflow_transition_list',
args=(self.get_object().workflow.pk,) kwargs={'workflow_id': self.get_object().workflow.pk}
) )
@@ -604,6 +630,7 @@ class SetupWorkflowTransitionEditView(SingleObjectEditView):
form_class = WorkflowTransitionForm form_class = WorkflowTransitionForm
model = WorkflowTransition model = WorkflowTransition
object_permission = permission_workflow_edit object_permission = permission_workflow_edit
pk_url_kwarg = 'workflow_transition_id'
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -621,8 +648,8 @@ class SetupWorkflowTransitionEditView(SingleObjectEditView):
def get_success_url(self): def get_success_url(self):
return reverse( return reverse(
'document_states:setup_workflow_transition_list', viewname='document_states:setup_workflow_transition_list',
args=(self.get_object().workflow.pk,) kwargs={'workflow_id': self.get_object().workflow.pk}
) )
@@ -655,7 +682,9 @@ class SetupWorkflowTransitionListView(SingleObjectListView):
return self.get_workflow().transitions.all() return self.get_workflow().transitions.all()
def get_workflow(self): 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 # Other
@@ -750,7 +779,8 @@ class WorkflowStateDocumentListView(DocumentListView):
def get_workflow_state(self): def get_workflow_state(self):
workflow_state = get_object_or_404( workflow_state = get_object_or_404(
klass=WorkflowStateRuntimeProxy, pk=self.kwargs['pk'] klass=WorkflowStateRuntimeProxy,
pk=self.kwargs['workflow_state_id']
) )
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
@@ -821,16 +851,16 @@ class SetupWorkflowTransitionTriggerEventListView(FormView):
instance.save() instance.save()
except Exception as exception: except Exception as exception:
messages.error( messages.error(
self.request, message=_(
_(
'Error updating workflow transition trigger events; %s' 'Error updating workflow transition trigger events; %s'
) % exception ) % exception, request=self.request
) )
else: else:
messages.success( messages.success(
self.request, _( message=_(
'Workflow transition trigger events updated successfully' 'Workflow transition trigger events updated successfully'
) ), request=self.request
) )
return super( return super(
@@ -838,7 +868,9 @@ class SetupWorkflowTransitionTriggerEventListView(FormView):
).form_valid(form=form) ).form_valid(form=form)
def get_object(self): 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): def get_extra_context(self):
return { return {
@@ -874,8 +906,8 @@ class SetupWorkflowTransitionTriggerEventListView(FormView):
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse( return reverse(
'document_states:setup_workflow_transition_list', viewname='document_states:setup_workflow_transition_list',
args=(self.get_object().workflow.pk,) kwargs={'workflow_id': self.get_object().workflow.pk}
) )
@@ -892,7 +924,8 @@ class ToolLaunchAllWorkflows(ConfirmView):
def view_action(self): def view_action(self):
task_launch_all_workflows.apply_async() task_launch_all_workflows.apply_async()
messages.success( 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 form_class = WorkflowPreviewForm
model = Workflow model = Workflow
object_permission = permission_workflow_view object_permission = permission_workflow_view
pk_url_kwarg = 'workflow_id'
def get_extra_context(self): def get_extra_context(self):
return { return {

View File

@@ -158,7 +158,7 @@ class HTTPPostAction(WorkflowAction):
logger.debug('payload template result: %s', result) logger.debug('payload template result: %s', result)
try: try:
payload = json.loads(result, strict=False) payload = json.loads(s=result, strict=False)
except Exception as exception: except Exception as exception:
raise WorkflowStateActionError( raise WorkflowStateActionError(
_('Payload JSON error: %s') % exception _('Payload JSON error: %s') % exception