diff --git a/mayan/apps/acls/api_views.py b/mayan/apps/acls/api_views.py index d4ad13608b..3dcb283982 100644 --- a/mayan/apps/acls/api_views.py +++ b/mayan/apps/acls/api_views.py @@ -62,7 +62,9 @@ class APIObjectACLListView(generics.ListCreateAPIView): if not self.request: return None - return super(APIObjectACLListView, self).get_serializer(*args, **kwargs) + return super(APIObjectACLListView, self).get_serializer( + *args, **kwargs + ) def get_serializer_class(self): if self.request.method == 'GET': @@ -152,7 +154,9 @@ class APIObjectACLPermissionListView(generics.ListCreateAPIView): return WritableAccessControlListPermissionSerializer def get_serializer_context(self): - context = super(APIObjectACLPermissionListView, self).get_serializer_context() + context = super( + APIObjectACLPermissionListView, self + ).get_serializer_context() if self.kwargs: context.update( { @@ -202,7 +206,9 @@ class APIObjectACLPermissionView(generics.RetrieveDestroyAPIView): return self.get_acl().permissions.all() def get_serializer_context(self): - context = super(APIObjectACLPermissionView, self).get_serializer_context() + context = super( + APIObjectACLPermissionView, self + ).get_serializer_context() if self.kwargs: context.update( { diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index aa1a74323c..739cf1ce0b 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals from functools import reduce import logging import operator -import warnings from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType @@ -17,7 +16,6 @@ from django.utils.translation import ugettext from mayan.apps.common.utils import ( get_related_field, resolve_attribute, return_related ) -from mayan.apps.common.warnings import InterfaceWarning from mayan.apps.permissions import Permission from mayan.apps.permissions.models import StoredPermission @@ -32,7 +30,9 @@ class AccessControlListManager(models.Manager): Implement a 3 tier permission system, involving a permissions, an actor and an object """ - def _get_acl_filters(self, queryset, stored_permission, user, related_field_name=None): + def _get_acl_filters( + self, queryset, stored_permission, user, related_field_name=None + ): """ This method does the bulk of the work. It generates filters for the AccessControlList model to determine if there are ACL entries for the @@ -113,17 +113,25 @@ class AccessControlListManager(models.Manager): for related_field_model_related_field_name in related_field_model_related_fields: related_field_name = '{}__{}'.format(related_field_name, related_field_model_related_field_name) related_field_inherited_acl_queries = self._get_acl_filters( - queryset=queryset, stored_permission=stored_permission, - user=user, related_field_name=related_field_name + queryset=queryset, + stored_permission=stored_permission, user=user, + related_field_name=related_field_name ) if related_field_inherited_acl_queries: - relation_result.append(reduce(operator.and_, related_field_inherited_acl_queries)) + relation_result.append( + reduce( + operator.and_, + related_field_inherited_acl_queries + ) + ) if relation_result: result.append(reduce(operator.or_, relation_result)) else: # Case 1: Original model, single ContentType, multiple object id - content_type = ContentType.objects.get_for_model(model=queryset.model) + content_type = ContentType.objects.get_for_model( + model=queryset.model + ) field_lookup = 'id__in' acl_filter = self.filter( content_type=content_type, permissions=stored_permission, @@ -149,7 +157,9 @@ class AccessControlListManager(models.Manager): related_field_name=related_field_name, user=user ) if inherited_acl_queries: - relation_result.append(reduce(operator.and_, inherited_acl_queries)) + relation_result.append( + reduce(operator.and_, inherited_acl_queries) + ) if relation_result: result.append(reduce(operator.or_, relation_result)) @@ -285,7 +295,9 @@ class AccessControlListManager(models.Manager): parent_object = return_related( instance=obj, related_field=related_field ) - content_type = ContentType.objects.get_for_model(model=parent_object) + content_type = ContentType.objects.get_for_model( + model=parent_object + ) try: queryset = queryset | self.get( content_type=content_type, object_id=parent_object.pk, diff --git a/mayan/apps/acls/migrations/0001_initial.py b/mayan/apps/acls/migrations/0001_initial.py index 48932b6683..5e55a9b955 100644 --- a/mayan/apps/acls/migrations/0001_initial.py +++ b/mayan/apps/acls/migrations/0001_initial.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations diff --git a/mayan/apps/acls/migrations/0002_auto_20150703_0513.py b/mayan/apps/acls/migrations/0002_auto_20150703_0513.py index 6ff7c6def5..62ada2cc51 100644 --- a/mayan/apps/acls/migrations/0002_auto_20150703_0513.py +++ b/mayan/apps/acls/migrations/0002_auto_20150703_0513.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations diff --git a/mayan/apps/acls/migrations/0003_auto_20180402_0339.py b/mayan/apps/acls/migrations/0003_auto_20180402_0339.py index 1b00baf213..aa20ac4bb8 100644 --- a/mayan/apps/acls/migrations/0003_auto_20180402_0339.py +++ b/mayan/apps/acls/migrations/0003_auto_20180402_0339.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.11 on 2018-04-02 03:39 from __future__ import unicode_literals from django.db import migrations @@ -14,6 +12,9 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='accesscontrollist', - options={'ordering': ('pk',), 'verbose_name': 'Access entry', 'verbose_name_plural': 'Access entries'}, + options={ + 'ordering': ('pk',), 'verbose_name': 'Access entry', + 'verbose_name_plural': 'Access entries' + }, ), ] diff --git a/mayan/apps/acls/serializers.py b/mayan/apps/acls/serializers.py index 1ad961242f..835a7e8cc4 100644 --- a/mayan/apps/acls/serializers.py +++ b/mayan/apps/acls/serializers.py @@ -12,7 +12,9 @@ from rest_framework.reverse import reverse from mayan.apps.common.serializers import ContentTypeSerializer from mayan.apps.permissions import Permission from mayan.apps.permissions.models import Role, StoredPermission -from mayan.apps.permissions.serializers import PermissionSerializer, RoleSerializer +from mayan.apps.permissions.serializers import ( + PermissionSerializer, RoleSerializer +) from .models import AccessControlList @@ -81,7 +83,9 @@ class AccessControlListPermissionSerializer(PermissionSerializer): ) -class WritableAccessControlListPermissionSerializer(AccessControlListPermissionSerializer): +class WritableAccessControlListPermissionSerializer( + AccessControlListPermissionSerializer +): permission_pk = serializers.CharField( help_text=_( 'Primary key of the new permission to grant to the access control ' diff --git a/mayan/apps/acls/tests/test_models.py b/mayan/apps/acls/tests/test_models.py index 4847150d48..7b60c1bbdd 100644 --- a/mayan/apps/acls/tests/test_models.py +++ b/mayan/apps/acls/tests/test_models.py @@ -105,7 +105,8 @@ class PermissionTestCase(ACLTestMixin, BaseTestCase): try: AccessControlList.objects.check_access( - obj=self.test_object_child, permissions=(self.test_permission,), + obj=self.test_object_child, + permissions=(self.test_permission,), user=self._test_case_user ) except PermissionDenied: @@ -123,7 +124,8 @@ class PermissionTestCase(ACLTestMixin, BaseTestCase): try: AccessControlList.objects.check_access( - obj=self.test_object_child, permissions=(self.test_permission,), + obj=self.test_object_child, + permissions=(self.test_permission,), user=self._test_case_user ) except PermissionDenied: @@ -233,7 +235,9 @@ class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): self.assertTrue(self.test_permission.stored_permission in queryset) - def test_retrieve_inherited_related_grandparent_parent_child_permission(self): + def test_retrieve_inherited_related_grandparent_parent_child_permission( + self + ): self._create_test_permission() self._create_test_model(model_name='TestModelGrandParent') diff --git a/mayan/apps/acls/views.py b/mayan/apps/acls/views.py index 29db693398..269e085dc7 100644 --- a/mayan/apps/acls/views.py +++ b/mayan/apps/acls/views.py @@ -176,7 +176,8 @@ class ACLPermissionsView(AddRemoveView): # Sort permissions by their translatable label object_list = sorted( - queryset, key=lambda permission: permission.volatile_permission.label + queryset, + key=lambda permission: permission.volatile_permission.label ) # Group permissions by namespace @@ -185,7 +186,9 @@ class ACLPermissionsView(AddRemoveView): permission.volatile_permission.namespace.label, [] ) - namespaces_dictionary[permission.volatile_permission.namespace.label].append( + namespaces_dictionary[ + permission.volatile_permission.namespace.label + ].append( (permission.pk, force_text(permission)) ) diff --git a/mayan/apps/acls/workflow_actions.py b/mayan/apps/acls/workflow_actions.py index 1f2435faf3..972668353a 100644 --- a/mayan/apps/acls/workflow_actions.py +++ b/mayan/apps/acls/workflow_actions.py @@ -98,7 +98,9 @@ class GrantAccessAction(WorkflowAction): def get_form_schema(self, *args, **kwargs): self.fields['content_type']['kwargs']['queryset'] = ModelPermission.get_classes(as_content_type=True) - self.fields['permissions']['kwargs']['choices'] = Permission.all(as_choices=True) + self.fields['permissions']['kwargs']['choices'] = Permission.all( + as_choices=True + ) return super(GrantAccessAction, self).get_form_schema(*args, **kwargs) def get_execute_data(self): @@ -113,7 +115,11 @@ class GrantAccessAction(WorkflowAction): pk=self.form_data['object_id'] ) self.roles = Role.objects.filter(pk__in=self.form_data['roles']) - self.permissions = [Permission.get(pk=permission, proxy_only=True) for permission in self.form_data['permissions']] + self.permissions = [ + Permission.get( + pk=permission, proxy_only=True + ) for permission in self.form_data['permissions'] + ] def execute(self, context): self.get_execute_data() diff --git a/mayan/apps/tags/.models.py.swp b/mayan/apps/tags/.models.py.swp new file mode 100644 index 0000000000..53641a9c27 Binary files /dev/null and b/mayan/apps/tags/.models.py.swp differ diff --git a/mayan/apps/tags/tests/test_views.py b/mayan/apps/tags/tests/test_views.py index 49285efec9..79c53d6234 100644 --- a/mayan/apps/tags/tests/test_views.py +++ b/mayan/apps/tags/tests/test_views.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals from django.utils.encoding import force_text from mayan.apps.common.tests import GenericViewTestCase -from mayan.apps.documents.permissions import permission_document_view from mayan.apps.documents.tests import GenericDocumentViewTestCase from ..models import Tag @@ -122,32 +121,6 @@ class TagViewTestCase(TagTestMixin, TagViewTestMixin, GenericViewTestCase): class TagDocumentViewTestCase(TagTestMixin, TagViewTestMixin, GenericDocumentViewTestCase): - """ - def test_document_tags_widget_no_permissions(self): - self._create_test_tag() - - self.test_tag.documents.add(self.test_document) - - response = self._request_test_tag_document_list_view() - self.assertNotContains( - response=response, text=self.test_tag.label, status_code=200 - ) - - def test_document_tags_widget_with_tag_access(self): - self._create_test_tag() - - self.test_tag.documents.add(self.test_document) - - self.grant_access(obj=self.test_tag, permission=permission_tag_view) - self.grant_access( - obj=self.test_document, permission=permission_document_view - ) - - response = self._request_test_tag_document_list_view() - self.assertContains( - response=response, text=self.test_tag.label, status_code=200 - ) - """ def test_document_tags_list_no_permissions(self): self._create_test_tag() @@ -199,7 +172,6 @@ class TagDocumentViewTestCase(TagTestMixin, TagViewTestMixin, GenericDocumentVie response=response, text=force_text(self.test_tag), status_code=200 ) - def test_document_attach_tag_view_no_permission(self): self._create_test_tag() diff --git a/mayan/apps/tags/views.py b/mayan/apps/tags/views.py index 1ceddebd97..974c41eec1 100644 --- a/mayan/apps/tags/views.py +++ b/mayan/apps/tags/views.py @@ -3,7 +3,7 @@ from __future__ import absolute_import, unicode_literals import logging from django.contrib import messages -from django.shortcuts import get_object_or_404, reverse +from django.shortcuts import reverse from django.template import RequestContext from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _, ungettext @@ -16,7 +16,6 @@ from mayan.apps.common.generics import ( from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.documents.models import Document from mayan.apps.documents.views import DocumentListView -from mayan.apps.documents.permissions import permission_document_view from .forms import TagMultipleSelectionForm from .icons import (