35 lines
1.0 KiB
Python
35 lines
1.0 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)
|
|
|
|
new_bases = []
|
|
if ajax:
|
|
new_bases.append(WebsiteAjaxTemplateMixin)
|
|
else:
|
|
new_bases.append(WebsiteTemplateMixin)
|
|
if permissions:
|
|
new_bases.append(PermissionRequiredMixin)
|
|
|
|
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
|
|
return cls
|
|
|
|
return class_decorator
|