Permission: Permission reference to property

Convert the volatile permission reference in the stored permission
model from a method to a property to allow future caching optimization.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2018-12-12 23:12:52 -04:00
parent bc816ccdda
commit e83f6e55a0
5 changed files with 11 additions and 10 deletions

View File

@@ -173,8 +173,8 @@ class ACLPermissionsView(AssignRemoveView):
entries = sorted(
entries, key=lambda x: (
x.get_volatile_permission().namespace.label,
x.get_volatile_permission().label
x.volatile_permission.namespace.label,
x.volatile_permission.label
)
)

View File

@@ -138,7 +138,6 @@ class Permission(object):
namespace=self.namespace.name,
name=self.name,
)
stored_permission.volatile_permission = self
self.__class__._stored_permissions_cache[
self.uuid
] = stored_permission

View File

@@ -34,24 +34,26 @@ class StoredPermission(models.Model):
def __str__(self):
try:
return force_text(self.get_volatile_permission())
return force_text(self.volatile_permission)
except KeyError:
return self.name
def get_volatile_permission_id(self):
@property
def volatile_permission_id(self):
"""
Return the identifier of the real permission class represented by
this model instance.
"""
return '{}.{}'.format(self.namespace, self.name)
def get_volatile_permission(self):
@property
def volatile_permission(self):
"""
Returns the real class of the permission represented by this model
instance.
"""
return Permission.get(
pk=self.get_volatile_permission_id(), proxy_only=True
pk=self.volatile_permission_id, proxy_only=True
)
def natural_key(self):

View File

@@ -20,7 +20,7 @@ class PermissionSerializer(serializers.Serializer):
def to_representation(self, instance):
if isinstance(instance, StoredPermission):
return super(PermissionSerializer, self).to_representation(
instance.get_volatile_permission()
instance.volatile_permission
)
else:
return super(PermissionSerializer, self).to_representation(

View File

@@ -129,8 +129,8 @@ class SetupRolePermissionsView(AssignRemoveView):
entries = sorted(
entries, key=lambda x: (
x.get_volatile_permission().namespace.label,
x.get_volatile_permission().label
x.volatile_permission.namespace.label,
x.volatile_permission.label
)
)