Skip to content
Snippets Groups Projects
Commit d6c67e26 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch 'feature/perf-v2' into 'master'

Add cached content type getter

See merge request AlekSIS/official/AlekSIS!368
parents 5694eb5a 9a24025b
No related branches found
No related tags found
1 merge request!368Add cached content type getter
Pipeline #3786 failed
......@@ -361,6 +361,18 @@ def handle_uploaded_file(f, filename: str):
destination.write(chunk)
@cache_memoize(3600)
def get_content_type_by_perm(perm: str) -> Union["ContentType", None]:
from django.contrib.contenttypes.models import ContentType # noqa
try:
return ContentType.objects.get(
app_label=perm.split(".", 1)[0], permission__codename=perm.split(".", 1)[1]
)
except ContentType.DoesNotExist:
return None
@cache_memoize(3600)
def queryset_rules_filter(
obj: Union[HttpRequest, Model], queryset: QuerySet, perm: str
......
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.db.models import Model
from django.http import HttpRequest
......@@ -9,7 +8,7 @@ from guardian.shortcuts import get_objects_for_user
from rules import predicate
from ..models import Group
from .core_helpers import get_site_preferences
from .core_helpers import get_content_type_by_perm, get_site_preferences
from .core_helpers import has_person as has_person_helper
from .core_helpers import queryset_rules_filter
......@@ -65,12 +64,7 @@ def has_any_object(perm: str, klass):
@predicate(name)
def fn(user: User) -> bool:
try:
ct_perm = ContentType.objects.get(
app_label=perm.split(".", 1)[0], permission__codename=perm.split(".", 1)[1]
)
except ContentType.DoesNotExist:
ct_perm = None
ct_perm = get_content_type_by_perm(perm)
if ct_perm and ct_perm.model_class() == klass:
return get_objects_for_user(user, perm, klass).exists()
else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment