Files
django-maraudes/website/decorators.py
Arthur Gerbaud 96f013041b working on #10
2016-11-15 16:47:44 +01:00

40 lines
1.2 KiB
Python

from .mixins import *
def _insert_bases(cls, bases):
old_bases = cls.__bases__
new_bases = tuple(bases) + old_bases
cls.__bases__ = new_bases
def webpage(**options):
""" Class decorators that insert needed bases according to options :
-- ajax : view will return content_template for Ajax requests
-- permissions : list of permissions needed to access view
"""
ajax = options.pop('ajax', False)
permissions = options.pop('permissions', [])
app_menu = options.pop('app_menu', [])
app_name = options.pop('app_name', None)
app_users = options.pop('app_users', [])
new_bases = []
if ajax:
new_bases.append(WebsiteAjaxTemplateMixin)
else:
new_bases.append(WebsiteTemplateMixin)
if permissions:
new_bases.append(PermissionRequiredMixin)
if app_users:
new_bases.append(SpecialUserRequiredMixin)
def class_decorator(cls):
_insert_bases(cls, new_bases)
if permissions:
cls.permissions = permissions
cls.app_menu = app_menu.copy() #avoid conflict between Views
cls.app_name = app_name
cls.app_users = app_users.copy()
return cls
return class_decorator