Coverage for website/pizzas/decorators.py: 40.91%
18 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.core.exceptions import PermissionDenied
3from events import services
4from pizzas.models import FoodEvent
7def organiser_only(view_function):
8 """See OrganiserOnly."""
9 return OrganiserOnly(view_function)
12class OrganiserOnly:
13 """Decorator that denies access on certain conditions.
15 The conditions are:
16 1. There is no `pk` in the request
17 2. The specified pizza event does not exist
18 3. The user is no organiser of the specified pizza event
19 """
21 def __init__(self, view_function):
22 self.view_function = view_function
24 def __call__(self, request, *args, **kwargs):
25 pizza_event = None
27 if "pk" in kwargs:
28 try:
29 pizza_event = FoodEvent.objects.get(pk=kwargs.get("pk"))
30 except FoodEvent.DoesNotExist:
31 pass
33 if pizza_event and services.is_organiser(request.member, pizza_event.event):
34 return self.view_function(request, *args, **kwargs)
36 raise PermissionDenied