Automatically build configuration page menu
authorSimo Sorce <simo@redhat.com>
Wed, 26 Mar 2014 19:44:26 +0000 (15:44 -0400)
committerSimo Sorce <simo@redhat.com>
Fri, 28 Mar 2014 18:12:08 +0000 (14:12 -0400)
Do not hardcode it, rather build it out of the pages tree.

Signed-off-by: Simo Sorce <simo@redhat.com>
ipsilon/admin/common.py
ipsilon/admin/login.py
templates/master-admin.html

index 0a46797..18b71ab 100755 (executable)
@@ -25,11 +25,13 @@ from ipsilon.util.page import admin_protect
 
 class AdminPluginPage(Page):
 
 
 class AdminPluginPage(Page):
 
-    def __init__(self, obj, site, baseurl, facility):
+    def __init__(self, obj, site, parent):
         super(AdminPluginPage, self).__init__(site)
         self._obj = obj
         super(AdminPluginPage, self).__init__(site)
         self._obj = obj
-        self.url = '%s/%s' % (baseurl, obj.name)
-        self.facility = facility
+        self.title = '%s plugin' % obj.name
+        self.url = '%s/%s' % (parent.url, obj.name)
+        self.facility = parent.facility
+        self.menu = [parent]
 
         # Get the defaults
         self.plugin_config = obj.get_config_desc()
 
         # Get the defaults
         self.plugin_config = obj.get_config_desc()
@@ -42,11 +44,10 @@ class AdminPluginPage(Page):
 
     @admin_protect
     def GET(self, *args, **kwargs):
 
     @admin_protect
     def GET(self, *args, **kwargs):
-        return self._template('admin/plugin_config.html',
-                              title='%s plugin' % self._obj.name,
+        return self._template('admin/plugin_config.html', title=self.title,
                               name='admin_%s_%s_form' % (self.facility,
                                                          self._obj.name),
                               name='admin_%s_%s_form' % (self.facility,
                                                          self._obj.name),
-                              action=self.url,
+                              menu=self.menu, action=self.url,
                               options=self.plugin_config)
 
     @admin_protect
                               options=self.plugin_config)
 
     @admin_protect
@@ -80,13 +81,12 @@ class AdminPluginPage(Page):
                 self._obj.set_config_value(name, value)
                 self.plugin_config[name][2] = value
 
                 self._obj.set_config_value(name, value)
                 self.plugin_config[name][2] = value
 
-        return self._template('admin/plugin_config.html',
+        return self._template('admin/plugin_config.html', title=self.title,
                               message=message,
                               message_type=message_type,
                               message=message,
                               message_type=message_type,
-                              title='%s plugin' % self._obj.name,
                               name='admin_%s_%s_form' % (self.facility,
                                                          self._obj.name),
                               name='admin_%s_%s_form' % (self.facility,
                                                          self._obj.name),
-                              action=self.url,
+                              menu=self.menu, action=self.url,
                               options=self.plugin_config)
 
     def root(self, *args, **kwargs):
                               options=self.plugin_config)
 
     def root(self, *args, **kwargs):
@@ -101,6 +101,17 @@ class Admin(Page):
     def __init__(self, site, mount):
         super(Admin, self).__init__(site)
         self.url = '%s/%s' % (self.basepath, mount)
     def __init__(self, site, mount):
         super(Admin, self).__init__(site)
         self.url = '%s/%s' % (self.basepath, mount)
+        self.menu = []
 
     def root(self, *args, **kwargs):
 
     def root(self, *args, **kwargs):
-        return self._template('admin/index.html', title='Configuration')
+        return self._template('admin/index.html',
+                              title='Configuration',
+                              menu=self.menu)
+
+    def add_subtree(self, name, page):
+        self.__dict__[name] = page
+        self.menu.append(page)
+
+    def del_subtree(self, name):
+        self.menu.remove(self.__dict__[name])
+        del self.__dict__[name]
index 1f5e9fa..b8325c8 100755 (executable)
@@ -27,16 +27,17 @@ from ipsilon.login.common import FACILITY
 
 class LoginPluginsOrder(Page):
 
 
 class LoginPluginsOrder(Page):
 
-    def __init__(self, site, baseurl):
+    def __init__(self, site, parent):
         super(LoginPluginsOrder, self).__init__(site)
         super(LoginPluginsOrder, self).__init__(site)
-        self.url = '%s/order' % baseurl
+        self.url = '%s/order' % parent.url
+        self.menu = [parent]
 
     @admin_protect
     def GET(self, *args, **kwargs):
         return self._template('admin/login_order.html',
                               title='login plugins order',
                               name='admin_login_order_form',
 
     @admin_protect
     def GET(self, *args, **kwargs):
         return self._template('admin/login_order.html',
                               title='login plugins order',
                               name='admin_login_order_form',
-                              action=self.url,
+                              menu=self.menu, action=self.url,
                               options=self._site[FACILITY]['enabled'])
 
     @admin_protect
                               options=self._site[FACILITY]['enabled'])
 
     @admin_protect
@@ -87,7 +88,7 @@ class LoginPluginsOrder(Page):
                               message_type=message_type,
                               title='login plugins order',
                               name='admin_login_order_form',
                               message_type=message_type,
                               title='login plugins order',
                               name='admin_login_order_form',
-                              action=self.url,
+                              menu=self.menu, action=self.url,
                               options=self._site[FACILITY]['enabled'])
 
     def root(self, *args, **kwargs):
                               options=self._site[FACILITY]['enabled'])
 
     def root(self, *args, **kwargs):
@@ -100,19 +101,22 @@ class LoginPluginsOrder(Page):
 class LoginPlugins(Page):
     def __init__(self, site, parent):
         super(LoginPlugins, self).__init__(site)
 class LoginPlugins(Page):
     def __init__(self, site, parent):
         super(LoginPlugins, self).__init__(site)
-        parent.login = self
+        self._master = parent
+        self.title = 'Login Plugins'
         self.url = '%s/login' % parent.url
         self.url = '%s/login' % parent.url
+        self.facility = FACILITY
+        parent.add_subtree('login', self)
 
         for plugin in self._site[FACILITY]['available']:
             cherrypy.log.error('Admin login plugin: %s' % plugin)
             obj = self._site[FACILITY]['available'][plugin]
 
         for plugin in self._site[FACILITY]['available']:
             cherrypy.log.error('Admin login plugin: %s' % plugin)
             obj = self._site[FACILITY]['available'][plugin]
-            self.__dict__[plugin] = AdminPluginPage(obj, self._site,
-                                                    self.url, FACILITY)
+            self.__dict__[plugin] = AdminPluginPage(obj, self._site, self)
 
 
-        self.order = LoginPluginsOrder(self._site, self.url)
+        self.order = LoginPluginsOrder(self._site, self)
 
     def root(self, *args, **kwargs):
         login_plugins = self._site[FACILITY]
 
     def root(self, *args, **kwargs):
         login_plugins = self._site[FACILITY]
-        return self._template('admin/login.html', title='Login Plugins',
+        return self._template('admin/login.html', title=self.title,
                               available=login_plugins['available'],
                               available=login_plugins['available'],
-                              enabled=login_plugins['enabled'])
+                              enabled=login_plugins['enabled'],
+                              menu=self._master.menu)
index 43770c1..a5a696d 100644 (file)
           </li>
         </ul>
         <ul class="nav navbar-nav navbar-primary">
           </li>
         </ul>
         <ul class="nav navbar-nav navbar-primary">
+          {% for page in menu %}
           <li>
           <li>
-            <a href="{{ basepath }}/admin/login">Login plugins</a>
-          </li>
-          <li>
-            <a href="{{ basepath }}/admin">Providers</a>
-          </li>
-          <li>
-            <a href="{{ basepath }}/admin">Sites</a>
+            <a href="{{ page.url }}">{{ page.title }}</a>
           </li>
           </li>
+          {% endfor %}
         </ul>
       </div>
     </nav>
         </ul>
       </div>
     </nav>