modified website.decorators, webpage->app_config, created new configs

This commit is contained in:
Arthur Gerbaud
2016-11-19 21:46:40 +01:00
parent f4f366f514
commit 891ef9ef63
14 changed files with 148 additions and 136 deletions

View File

@@ -5,16 +5,19 @@ def _insert_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 :
def app_config(**options):
""" Insert per-application configuration options :
-- name : name of the app to register under in navbar
-- groups : user groups needed to access this application
-- menu : user menu templates to be used
-- admin_menu : admin menu templates, only appear for superuser
-- ajax : view will return content_template for Ajax requests
-- permissions : list of permissions needed to access view
"""
name = options.pop('name', None)
groups = options.pop('groups', []) #Transition from app_users
menu = options.pop('menu', [])
admin_menu = options.pop('admin_menu', [])
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:
@@ -22,18 +25,15 @@ def webpage(**options):
else:
new_bases.append(WebsiteTemplateMixin)
if permissions:
new_bases.append(PermissionRequiredMixin)
if app_users:
if groups: #TODO: use group instaed of user class
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()
cls._user_menu = menu
cls._admin_menu = admin_menu
cls.app_name = name
cls.app_users = groups.copy()
return cls
return class_decorator

View File

@@ -70,7 +70,12 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
"""
base_template = "base_site.html"
content_template = None
app_name = None
_user_menu = []
_admin_menu = []
_groups = []
class Configuration:
stylesheets = ['base.css']
@@ -147,16 +152,15 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
self._active_app = self.get_active_app()
return self._active_app
def get_menu(self):
@property
def menu(self):
""" Renvoie la liste des templates utilisés comme menu pour l'application
active
"""
return self.app_menu
if not self.request.user.is_superuser:
return self._user_menu
return self._user_menu + self._admin_menu
def insert_menu(self, template_name):
""" Insert menu at beginning of self.app_menu """
if not template_name in self.app_menu:
self.app_menu.insert(0, template_name)
def _update_context_with_rendered_blocks(self, context):
""" Render text for existing PageInfo attributes.
@@ -178,7 +182,7 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
context = user_processor(self.request, context)
#Webpage
context['content_template'] = self.get_content_template()
context['app_menu'] = self.get_menu()
context['app_menu'] = self.menu
return context
class WebsiteAjaxTemplateMixin(WebsiteTemplateMixin):