Modernize usage of the AssignRemove CBV
This commit is contained in:
@@ -37,9 +37,6 @@ class Index(models.Model):
|
||||
def get_absolute_url(self):
|
||||
return reverse('indexing:index_instance_node_view', args=[self.instance_root.pk])
|
||||
|
||||
def get_document_types_not_in_index(self):
|
||||
return DocumentType.objects.exclude(pk__in=self.document_types.all())
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"""Automatically create the root index template node"""
|
||||
super(Index, self).save(*args, **kwargs)
|
||||
|
||||
@@ -17,7 +17,7 @@ urlpatterns = patterns(
|
||||
url(r'^setup/index/(?P<index_pk>\d+)/edit/$', 'index_setup_edit', name='index_setup_edit'),
|
||||
url(r'^setup/index/(?P<index_pk>\d+)/delete/$', 'index_setup_delete', name='index_setup_delete'),
|
||||
url(r'^setup/index/(?P<index_pk>\d+)/view/$', 'index_setup_view', name='index_setup_view'),
|
||||
url(r'^setup/index/(?P<index_pk>\d+)/document_types/$', SetupIndexDocumentTypesView.as_view(), name='index_setup_document_types'),
|
||||
url(r'^setup/index/(?P<pk>\d+)/document_types/$', SetupIndexDocumentTypesView.as_view(), name='index_setup_document_types'),
|
||||
|
||||
url(r'^setup/template/node/(?P<parent_pk>\d+)/create/child/$', 'template_node_create', name='template_node_create'),
|
||||
url(r'^setup/template/node/(?P<node_pk>\d+)/edit/$', 'template_node_edit', name='template_node_edit'),
|
||||
|
||||
@@ -14,7 +14,7 @@ from acls.models import AccessEntry
|
||||
from common.utils import encapsulate
|
||||
from common.views import AssignRemoveView
|
||||
from common.widgets import two_state_template
|
||||
from documents.models import Document
|
||||
from documents.models import Document, DocumentType
|
||||
from documents.permissions import permission_document_view
|
||||
from documents.views import document_list
|
||||
from permissions import Permission
|
||||
@@ -165,37 +165,30 @@ def index_setup_view(request, index_pk):
|
||||
|
||||
class SetupIndexDocumentTypesView(AssignRemoveView):
|
||||
decode_content_type = True
|
||||
object_permission = permission_document_indexing_edit
|
||||
left_list_title = _('Available document types')
|
||||
right_list_title = _('Document types linked')
|
||||
|
||||
def add(self, item):
|
||||
self.index.document_types.add(item)
|
||||
self.get_object().document_types.add(item)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.index = get_object_or_404(Index, pk=self.kwargs['index_pk'])
|
||||
|
||||
try:
|
||||
Permission.check_permissions(request.user, [permission_document_indexing_edit])
|
||||
except PermissionDenied:
|
||||
AccessEntry.objects.check_access(permission_document_indexing_edit, request.user, self.index)
|
||||
|
||||
self.left_list_title = _('Document types not in index: %s') % self.index
|
||||
self.right_list_title = _('Document types for index: %s') % self.index
|
||||
|
||||
return super(SetupIndexDocumentTypesView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(Index, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return AssignRemoveView.generate_choices(self.index.get_document_types_not_in_index())
|
||||
return AssignRemoveView.generate_choices(DocumentType.objects.exclude(pk__in=self.get_object().document_types.all()))
|
||||
|
||||
def right_list(self):
|
||||
return AssignRemoveView.generate_choices(self.index.document_types.all())
|
||||
return AssignRemoveView.generate_choices(self.get_object().document_types.all())
|
||||
|
||||
def remove(self, item):
|
||||
self.index.document_types.remove(item)
|
||||
self.get_object().document_types.remove(item)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(SetupIndexDocumentTypesView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'index': self.index,
|
||||
'navigation_object_list': ['index'],
|
||||
'object': self.get_object(),
|
||||
'title': _('Document types linked to index: %s') % self.get_object()
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
@@ -165,38 +165,34 @@ class SetupWorkflowDeleteView(SingleObjectDeleteView):
|
||||
|
||||
class SetupWorkflowDocumentTypesView(AssignRemoveView):
|
||||
decode_content_type = True
|
||||
object_permission = permission_workflow_edit
|
||||
left_list_title = _('Available document types')
|
||||
right_list_title = _('Document types assigned this workflow')
|
||||
|
||||
def add(self, item):
|
||||
self.workflow.document_types.add(item)
|
||||
self.get_object().document_types.add(item)
|
||||
# TODO: add task launching this workflow for all the document types of
|
||||
# item
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.workflow = get_object_or_404(Workflow, pk=self.kwargs['pk'])
|
||||
|
||||
try:
|
||||
Permission.check_permissions(self.request.user, [permission_workflow_edit])
|
||||
except PermissionDenied:
|
||||
AccessEntry.objects.check_access(permission_workflow_edit, self.request.user, self.workflow)
|
||||
|
||||
return super(SetupWorkflowDocumentTypesView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(Workflow, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return AssignRemoveView.generate_choices(self.workflow.get_document_types_not_in_workflow())
|
||||
return AssignRemoveView.generate_choices(self.get_object().get_document_types_not_in_workflow())
|
||||
|
||||
def right_list(self):
|
||||
return AssignRemoveView.generate_choices(self.workflow.document_types.all())
|
||||
return AssignRemoveView.generate_choices(self.get_object().document_types.all())
|
||||
|
||||
def remove(self, item):
|
||||
self.workflow.document_types.remove(item)
|
||||
self.get_object().document_types.remove(item)
|
||||
# TODO: add task deleting this workflow for all the document types of
|
||||
# item
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(SetupWorkflowDocumentTypesView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'main_title': _('Document types assigned the workflow: %s') % self.workflow,
|
||||
'object': self.workflow,
|
||||
'title': _('Document types assigned the workflow: %s') % self.get_object(),
|
||||
'object': self.get_object(),
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
@@ -30,8 +30,8 @@ urlpatterns = patterns(
|
||||
url(r'^setup/type/(?P<metadatatype_id>\d+)/edit/$', 'setup_metadata_type_edit', name='setup_metadata_type_edit'),
|
||||
url(r'^setup/type/(?P<metadatatype_id>\d+)/delete/$', 'setup_metadata_type_delete', name='setup_metadata_type_delete'),
|
||||
|
||||
url(r'^setup/document/type/(?P<document_type_id>\d+)/metadata/edit/$', SetupDocumentTypeMetadataOptionalView.as_view(), name='setup_document_type_metadata'),
|
||||
url(r'^setup/document/type/(?P<document_type_id>\d+)/metadata/edit/required/$', SetupDocumentTypeMetadataRequiredView.as_view(), name='setup_document_type_metadata_required'),
|
||||
url(r'^setup/document/type/(?P<pk>\d+)/metadata/edit/$', SetupDocumentTypeMetadataOptionalView.as_view(), name='setup_document_type_metadata'),
|
||||
url(r'^setup/document/type/(?P<pk>\d+)/metadata/edit/required/$', SetupDocumentTypeMetadataRequiredView.as_view(), name='setup_document_type_metadata_required'),
|
||||
|
||||
url(r'^tools/missing_required_metadata/$', MissingRequiredMetadataDocumentListView.as_view(), name='documents_missing_required_metadata'),
|
||||
)
|
||||
|
||||
@@ -442,20 +442,21 @@ def setup_metadata_type_delete(request, metadatatype_id):
|
||||
|
||||
class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
|
||||
decode_content_type = True
|
||||
view_permission = permission_document_type_edit
|
||||
left_list_title = _('Available metadata types')
|
||||
right_list_title = _('Metadata types assigned')
|
||||
|
||||
def add(self, item):
|
||||
self.document_type.metadata.create(metadata_type=item, required=False)
|
||||
self.get_object().metadata.create(metadata_type=item, required=False)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
Permission.check_permissions(request.user, [permission_document_type_edit])
|
||||
self.document_type = get_object_or_404(DocumentType, pk=self.kwargs['document_type_id'])
|
||||
return super(SetupDocumentTypeMetadataOptionalView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(DocumentType, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return AssignRemoveView.generate_choices(set(MetadataType.objects.all()) - set(MetadataType.objects.filter(id__in=self.document_type.metadata.values_list('metadata_type', flat=True))))
|
||||
return AssignRemoveView.generate_choices(set(MetadataType.objects.all()) - set(MetadataType.objects.filter(id__in=self.get_object().metadata.values_list('metadata_type', flat=True))))
|
||||
|
||||
def right_list(self):
|
||||
return AssignRemoveView.generate_choices(self.document_type.metadata.filter(required=False))
|
||||
return AssignRemoveView.generate_choices(self.get_object().metadata.filter(required=False))
|
||||
|
||||
def remove(self, item):
|
||||
item.delete()
|
||||
@@ -463,9 +464,8 @@ class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(SetupDocumentTypeMetadataOptionalView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'document_type': self.document_type,
|
||||
'main_title': _('Optional metadata types for document type: %s') % self.document_type,
|
||||
'navigation_object_list': ['document_type'],
|
||||
'object': self.get_object(),
|
||||
'title': _('Optional metadata types for document type: %s') % self.get_object(),
|
||||
})
|
||||
|
||||
return data
|
||||
@@ -473,17 +473,16 @@ class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
|
||||
|
||||
class SetupDocumentTypeMetadataRequiredView(SetupDocumentTypeMetadataOptionalView):
|
||||
def add(self, item):
|
||||
self.document_type.metadata.create(metadata_type=item, required=True)
|
||||
self.get_object().metadata.create(metadata_type=item, required=True)
|
||||
|
||||
def right_list(self):
|
||||
return AssignRemoveView.generate_choices(self.document_type.metadata.filter(required=True))
|
||||
return AssignRemoveView.generate_choices(self.get_object().metadata.filter(required=True))
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(SetupDocumentTypeMetadataRequiredView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'document_type': self.document_type,
|
||||
'main_title': _('Required metadata types for document type: %s') % self.document_type,
|
||||
'navigation_object_list': ['document_type'],
|
||||
'object': self.get_object(),
|
||||
'title': _('Required metadata types for document type: %s') % self.get_object(),
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
@@ -15,7 +15,7 @@ urlpatterns = patterns(
|
||||
url(r'^role/(?P<pk>\d+)/permissions/$', SetupRolePermissionsView.as_view(), name='role_permissions'),
|
||||
url(r'^role/(?P<pk>\d+)/edit/$', RoleEditView.as_view(), name='role_edit'),
|
||||
url(r'^role/(?P<pk>\d+)/delete/$', RoleDeleteView.as_view(), name='role_delete'),
|
||||
url(r'^role/(?P<role_id>\d+)/members/$', SetupRoleMembersView.as_view(), name='role_members'),
|
||||
url(r'^role/(?P<pk>\d+)/members/$', SetupRoleMembersView.as_view(), name='role_members'),
|
||||
)
|
||||
|
||||
api_urls = patterns(
|
||||
|
||||
@@ -42,34 +42,32 @@ class RoleEditView(SingleObjectEditView):
|
||||
|
||||
class SetupRoleMembersView(AssignRemoveView):
|
||||
grouped = False
|
||||
left_list_title = _('Available groups')
|
||||
right_list_title = _('Member groups')
|
||||
view_permission = permission_role_edit
|
||||
|
||||
def add(self, item):
|
||||
group = get_object_or_404(Group, pk=item)
|
||||
self.role.groups.add(group)
|
||||
self.get_object().groups.add(group)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
Permission.check_permissions(request.user, [permission_role_edit])
|
||||
self.role = get_object_or_404(Role, pk=self.kwargs['role_id'])
|
||||
self.left_list_title = _('Available groups')
|
||||
self.right_list_title = _('Member groups')
|
||||
|
||||
return super(SetupRoleMembersView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(Role, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return [(unicode(group.pk), group.name) for group in set(Group.objects.all()) - set(self.role.groups.all())]
|
||||
return [(unicode(group.pk), group.name) for group in set(Group.objects.all()) - set(self.get_object().groups.all())]
|
||||
|
||||
def right_list(self):
|
||||
return [(unicode(group.pk), group.name) for group in self.role.groups.all()]
|
||||
return [(unicode(group.pk), group.name) for group in self.get_object().groups.all()]
|
||||
|
||||
def remove(self, item):
|
||||
group = get_object_or_404(Group, pk=item)
|
||||
self.role.groups.remove(group)
|
||||
self.get_object().groups.remove(group)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(SetupRoleMembersView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'object': self.role,
|
||||
'title': _('Group members of role: %s') % self.role
|
||||
'object': self.get_object(),
|
||||
'title': _('Group members of role: %s') % self.get_object()
|
||||
})
|
||||
|
||||
return data
|
||||
@@ -77,22 +75,21 @@ class SetupRoleMembersView(AssignRemoveView):
|
||||
|
||||
class SetupRolePermissionsView(AssignRemoveView):
|
||||
grouped = True
|
||||
left_list_title = _('Available permissions')
|
||||
right_list_title = _('Granted permissions')
|
||||
view_permission = permission_role_view
|
||||
|
||||
def add(self, item):
|
||||
Permission.check_permissions(self.request.user, permissions=(permission_permission_grant,))
|
||||
permission = get_object_or_404(StoredPermission, pk=item)
|
||||
self.role.permissions.add(permission)
|
||||
self.get_object().permissions.add(permission)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
Permission.check_permissions(request.user, [permission_permission_grant, permission_permission_revoke])
|
||||
self.role = get_object_or_404(Role, pk=self.kwargs['pk'])
|
||||
self.left_list_title = _('Available permissions')
|
||||
self.right_list_title = _('Granted permissions')
|
||||
|
||||
return super(SetupRolePermissionsView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(Role, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
results = []
|
||||
for namespace, permissions in itertools.groupby(StoredPermission.objects.exclude(id__in=self.role.permissions.values_list('pk', flat=True)), lambda entry: entry.namespace):
|
||||
for namespace, permissions in itertools.groupby(StoredPermission.objects.exclude(id__in=self.get_object().permissions.values_list('pk', flat=True)), lambda entry: entry.namespace):
|
||||
permission_options = [(unicode(permission.pk), permission) for permission in permissions]
|
||||
results.append((PermissionNamespace.get(namespace), permission_options))
|
||||
|
||||
@@ -100,21 +97,22 @@ class SetupRolePermissionsView(AssignRemoveView):
|
||||
|
||||
def right_list(self):
|
||||
results = []
|
||||
for namespace, permissions in itertools.groupby(self.role.permissions.all(), lambda entry: entry.namespace):
|
||||
for namespace, permissions in itertools.groupby(self.get_object().permissions.all(), lambda entry: entry.namespace):
|
||||
permission_options = [(unicode(permission.pk), permission) for permission in permissions]
|
||||
results.append((PermissionNamespace.get(namespace), permission_options))
|
||||
|
||||
return results
|
||||
|
||||
def remove(self, item):
|
||||
Permission.check_permissions(self.request.user, permissions=(permission_permission_revoke,))
|
||||
permission = get_object_or_404(StoredPermission, pk=item)
|
||||
self.role.permissions.remove(permission)
|
||||
self.get_object().permissions.remove(permission)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(SetupRolePermissionsView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'object': self.role,
|
||||
'title': _('Permissions for role: %s') % self.role,
|
||||
'object': self.get_object(),
|
||||
'title': _('Permissions for role: %s') % self.get_object(),
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
@@ -17,14 +17,14 @@ urlpatterns = patterns(
|
||||
url(r'^user/multiple/delete/$', 'user_multiple_delete', name='user_multiple_delete'),
|
||||
url(r'^user/(?P<user_id>\d+)/set_password/$', 'user_set_password', name='user_set_password'),
|
||||
url(r'^user/multiple/set_password/$', 'user_multiple_set_password', name='user_multiple_set_password'),
|
||||
url(r'^user/(?P<user_id>\d+)/groups/$', UserGroupsView.as_view(), name='user_groups'),
|
||||
url(r'^user/(?P<pk>\d+)/groups/$', UserGroupsView.as_view(), name='user_groups'),
|
||||
|
||||
url(r'^group/list/$', 'group_list', name='group_list'),
|
||||
url(r'^group/add/$', 'group_add', name='group_add'),
|
||||
url(r'^group/(?P<group_id>\d+)/edit/$', 'group_edit', name='group_edit'),
|
||||
url(r'^group/(?P<group_id>\d+)/delete/$', 'group_delete', name='group_delete'),
|
||||
url(r'^group/multiple/delete/$', 'group_multiple_delete', name='group_multiple_delete'),
|
||||
url(r'^group/(?P<group_id>\d+)/members/$', GroupMembersView.as_view(), name='group_members'),
|
||||
url(r'^group/(?P<pk>\d+)/members/$', GroupMembersView.as_view(), name='group_members'),
|
||||
)
|
||||
|
||||
api_urls = patterns(
|
||||
|
||||
@@ -221,31 +221,30 @@ def get_user_non_groups(user):
|
||||
|
||||
class UserGroupsView(AssignRemoveView):
|
||||
decode_content_type = True
|
||||
left_list_title = _('Available groups')
|
||||
right_list_title = _('Groups joined')
|
||||
view_permission = permission_user_edit
|
||||
|
||||
def add(self, item):
|
||||
item.user_set.add(self.user)
|
||||
item.user_set.add(self.get_object())
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
Permission.check_permissions(request.user, [permission_user_edit])
|
||||
self.user = get_object_or_404(User, pk=self.kwargs['user_id'])
|
||||
self.left_list_title = _('Non groups of user: %s') % self.user
|
||||
self.right_list_title = _('Groups of user: %s') % self.user
|
||||
|
||||
return super(UserGroupsView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(User, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return AssignRemoveView.generate_choices(get_user_non_groups(self.user))
|
||||
return AssignRemoveView.generate_choices(get_user_non_groups(self.get_object()))
|
||||
|
||||
def right_list(self):
|
||||
return AssignRemoveView.generate_choices(get_user_groups(self.user))
|
||||
return AssignRemoveView.generate_choices(get_user_groups(self.get_object()))
|
||||
|
||||
def remove(self, item):
|
||||
item.user_set.remove(self.user)
|
||||
item.user_set.remove(self.get_object())
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(UserGroupsView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'object': self.user,
|
||||
'object': self.get_object(),
|
||||
'title': _('Groups of user: %s') % self.get_object()
|
||||
})
|
||||
|
||||
return data
|
||||
@@ -360,31 +359,30 @@ def group_multiple_delete(request):
|
||||
|
||||
class GroupMembersView(AssignRemoveView):
|
||||
decode_content_type = True
|
||||
left_list_title = _('Available groups')
|
||||
right_list_title = _('Members of groups')
|
||||
view_permission = permission_group_edit
|
||||
|
||||
def add(self, item):
|
||||
self.group.user_set.add(item)
|
||||
self.get_object().user_set.add(item)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
Permission.check_permissions(request.user, [permission_group_edit])
|
||||
self.group = get_object_or_404(Group, pk=self.kwargs['group_id'])
|
||||
self.left_list_title = _('Non members of group: %s') % self.group
|
||||
self.right_list_title = _('Members of group: %s') % self.group
|
||||
|
||||
return super(GroupMembersView, self).dispatch(request, *args, **kwargs)
|
||||
def get_object(self):
|
||||
return get_object_or_404(Group, pk=self.kwargs['pk'])
|
||||
|
||||
def left_list(self):
|
||||
return AssignRemoveView.generate_choices(User.objects.exclude(groups=self.group).exclude(is_staff=True).exclude(is_superuser=True))
|
||||
return AssignRemoveView.generate_choices(User.objects.exclude(groups=self.get_object()).exclude(is_staff=True).exclude(is_superuser=True))
|
||||
|
||||
def right_list(self):
|
||||
return AssignRemoveView.generate_choices(self.group.user_set.all())
|
||||
return AssignRemoveView.generate_choices(self.get_object().user_set.all())
|
||||
|
||||
def remove(self, item):
|
||||
self.group.user_set.remove(item)
|
||||
self.get_object().user_set.remove(item)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super(GroupMembersView, self).get_context_data(**kwargs)
|
||||
data.update({
|
||||
'object': self.group,
|
||||
'object': self.get_object(),
|
||||
'title': _('Members of group: %s') % self.get_object()
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
Reference in New Issue
Block a user