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:
@@ -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':
|
||||
"""
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -29,207 +29,209 @@ from .views import (
|
||||
|
||||
urlpatterns = [
|
||||
url(
|
||||
r'^document/(?P<pk>\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<pk>\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<pk>\d+)/transition/$',
|
||||
WorkflowInstanceTransitionView.as_view(),
|
||||
name='workflow_instance_transition'
|
||||
regex=r'^workflows/(?P<workflow_id>\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<workflow_id>\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<workflow_id>\d+)/preview/$',
|
||||
name='workflow_preview', view=WorkflowPreviewView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^setup/workflow/(?P<pk>\d+)/edit/$', SetupWorkflowEditView.as_view(),
|
||||
name='setup_workflow_edit'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/document_types/$',
|
||||
name='setup_workflow_document_types',
|
||||
view=SetupWorkflowDocumentTypesView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^setup/workflow/(?P<pk>\d+)/delete/$', SetupWorkflowDeleteView.as_view(),
|
||||
name='setup_workflow_delete'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/states/$',
|
||||
name='setup_workflow_state_list',
|
||||
view=SetupWorkflowStateListView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^setup/workflow/(?P<pk>\d+)/documents/$',
|
||||
WorkflowDocumentListView.as_view(),
|
||||
name='setup_workflow_document_list'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/states/create/$',
|
||||
name='setup_workflow_state_create',
|
||||
view=SetupWorkflowStateCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^setup/workflow/(?P<pk>\d+)/document_types/$',
|
||||
SetupWorkflowDocumentTypesView.as_view(),
|
||||
name='setup_workflow_document_types'
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/delete/$',
|
||||
name='setup_workflow_state_delete',
|
||||
view=SetupWorkflowStateDeleteView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^setup/workflow/(?P<pk>\d+)/states/$', SetupWorkflowStateListView.as_view(),
|
||||
name='setup_workflow_state_list'
|
||||
),
|
||||
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'
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/edit/$',
|
||||
name='setup_workflow_state_edit',
|
||||
view=SetupWorkflowStateEditView.as_view()
|
||||
),
|
||||
|
||||
url(
|
||||
r'^setup/workflow/state/actions/(?P<pk>\d+)/delete/$',
|
||||
SetupWorkflowStateActionDeleteView.as_view(),
|
||||
regex=r'^workflows/states/(?P<workflow_state_id>\d+)/actions/$',
|
||||
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'
|
||||
),
|
||||
url(
|
||||
r'^setup/workflow/state/actions/(?P<pk>\d+)/edit/$',
|
||||
SetupWorkflowStateActionEditView.as_view(),
|
||||
name='setup_workflow_state_action_edit'
|
||||
),
|
||||
|
||||
|
||||
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'
|
||||
regex=r'^workflows/states/actions/(?P<workflow_state_action_id>\d+)/edit/$',
|
||||
name='setup_workflow_state_action_edit',
|
||||
view=SetupWorkflowStateActionEditView.as_view()
|
||||
),
|
||||
|
||||
url(
|
||||
r'^(?P<pk>\d+)/states/$',
|
||||
WorkflowStateListView.as_view(),
|
||||
name='workflow_state_list'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/$',
|
||||
name='setup_workflow_transition_list',
|
||||
view=SetupWorkflowTransitionListView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^(?P<pk>\d+)/preview/$',
|
||||
WorkflowPreviewView.as_view(),
|
||||
name='workflow_preview'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/create/$',
|
||||
name='setup_workflow_transition_create',
|
||||
view=SetupWorkflowTransitionCreateView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^state/(?P<pk>\d+)/documents/$',
|
||||
WorkflowStateDocumentListView.as_view(),
|
||||
name='workflow_state_document_list'
|
||||
regex=r'^workflows/transitions/(?P<workflow_transitions_id>\d+)/delete/$',
|
||||
name='setup_workflow_transition_delete',
|
||||
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 = [
|
||||
url(r'^workflows/$', APIWorkflowListView.as_view(), name='workflow-list'),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/$', APIWorkflowView.as_view(),
|
||||
name='workflow-detail'
|
||||
regex=r'^workflows/$', name='workflow-list',
|
||||
view=APIWorkflowListView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/image/$',
|
||||
APIWorkflowImageView.as_view(), name='workflow-image'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/$',
|
||||
name='workflow-detail', view=APIWorkflowView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/document_types/$',
|
||||
APIWorkflowDocumentTypeList.as_view(),
|
||||
name='workflow-document-type-list'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/image/$',
|
||||
name='workflow-image', view=APIWorkflowImageView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/document_types/(?P<document_type_pk>[0-9]+)/$',
|
||||
APIWorkflowDocumentTypeView.as_view(),
|
||||
name='workflow-document-type-detail'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/document_types/$',
|
||||
name='workflow-document-type-list',
|
||||
view=APIWorkflowDocumentTypeList.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/states/$',
|
||||
APIWorkflowStateListView.as_view(), name='workflowstate-list'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/document_types/(?P<document_type_id>\d+)/$',
|
||||
name='workflow-document-type-detail',
|
||||
view=APIWorkflowDocumentTypeView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/states/(?P<state_pk>[0-9]+)/$',
|
||||
APIWorkflowStateView.as_view(), name='workflowstate-detail'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/states/$',
|
||||
name='workflowstate-list',
|
||||
view=APIWorkflowStateListView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/transitions/$',
|
||||
APIWorkflowTransitionListView.as_view(), name='workflowtransition-list'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/states/(?P<state_id>\d+)/$',
|
||||
name='workflowstate-detail', view=APIWorkflowStateView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^workflows/(?P<pk>[0-9]+)/transitions/(?P<transition_pk>[0-9]+)/$',
|
||||
APIWorkflowTransitionView.as_view(), name='workflowtransition-detail'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/$',
|
||||
name='workflowtransition-list',
|
||||
view=APIWorkflowTransitionListView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^documents/(?P<pk>[0-9]+)/workflows/$',
|
||||
APIWorkflowInstanceListView.as_view(), name='workflowinstance-list'
|
||||
regex=r'^workflows/(?P<workflow_id>\d+)/transitions/(?P<transition_id>\d+)/$',
|
||||
name='workflowtransition-detail',
|
||||
view=APIWorkflowTransitionView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^documents/(?P<pk>[0-9]+)/workflows/(?P<workflow_pk>[0-9]+)/$',
|
||||
APIWorkflowInstanceView.as_view(), name='workflowinstance-detail'
|
||||
regex=r'^documents/(?P<document_id>\d+)/workflows/$',
|
||||
name='workflowinstance-list',
|
||||
view=APIWorkflowInstanceListView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^documents/(?P<pk>[0-9]+)/workflows/(?P<workflow_pk>[0-9]+)/log_entries/$',
|
||||
APIWorkflowInstanceLogEntryListView.as_view(),
|
||||
name='workflowinstancelogentry-list'
|
||||
regex=r'^documents/(?P<document_id>\d+)/workflows/(?P<workflow_id>\d+)/$',
|
||||
name='workflowinstance-detail',
|
||||
view=APIWorkflowInstanceView.as_view()
|
||||
),
|
||||
url(
|
||||
r'^document_types/(?P<pk>[0-9]+)/workflows/$',
|
||||
APIDocumentTypeWorkflowListView.as_view(),
|
||||
name='documenttype-workflow-list'
|
||||
regex=r'^documents/(?P<document_id>\d+)/workflows/(?P<workflow_id>\d+)/log_entries/$',
|
||||
name='workflowinstancelogentry-list',
|
||||
view=APIWorkflowInstanceLogEntryListView.as_view()
|
||||
),
|
||||
url(
|
||||
regex=r'^document_types/(?P<document_type_id>\d+)/workflows/$',
|
||||
name='documenttype-workflow-list',
|
||||
view=APIDocumentTypeWorkflowListView.as_view()
|
||||
)
|
||||
]
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user