Source code for pizzas.decorators

"""The decorators defined by the pizzas package"""
from django.core.exceptions import PermissionDenied

from events import services
from pizzas.models import PizzaEvent


[docs]def organiser_only(view_function): """See OrganiserOnly""" return OrganiserOnly(view_function)
[docs]class OrganiserOnly: """ Decorator that denies access to the page if: 1. There is no `pk` in the request 2. The specified pizza event does not exist 3. The user is no organiser of the specified pizza event """ def __init__(self, view_function): self.view_function = view_function def __call__(self, request, *args, **kwargs): pizza_event = None if "pk" in kwargs: try: pizza_event = PizzaEvent.objects.get(pk=kwargs.get("pk")) except PizzaEvent.DoesNotExist: pass if pizza_event and services.is_organiser(request.member, pizza_event.event): return self.view_function(request, *args, **kwargs) raise PermissionDenied