From b626eec0fd7a52b2489af3317c6686ba2d68903f Mon Sep 17 00:00:00 2001 From: Ronan Dunklau Date: Mon, 29 Jun 2015 13:24:05 +0530 Subject: [PATCH] Inherited the test, about & help module from PgAdminModule class to load them automatically by PgAdmin. --- web/pgadmin/__init__.py | 34 ++++++++- web/pgadmin/about/__init__.py | 67 +++++++++++++++++ web/pgadmin/about/hooks.py | 28 ------- web/pgadmin/about/views.py | 48 ------------ .../browser/templates/browser/index.html | 45 ++++-------- .../browser/templates/browser/js/browser.js | 2 +- web/pgadmin/help/__init__.py | 66 +++++++++++++++++ web/pgadmin/help/hooks.py | 73 ------------------- web/pgadmin/help/views.py | 18 ----- web/pgadmin/templates/base.html | 4 +- web/pgadmin/test/__init__.py | 70 ++++++++++++++++++ web/pgadmin/test/hooks.py | 29 -------- web/pgadmin/test/views.py | 35 --------- web/pgadmin/utils/__init__.py | 7 ++ web/pgadmin/utils/menu.py | 21 ++++++ 15 files changed, 280 insertions(+), 267 deletions(-) delete mode 100644 web/pgadmin/about/hooks.py delete mode 100644 web/pgadmin/about/views.py delete mode 100644 web/pgadmin/help/hooks.py delete mode 100644 web/pgadmin/help/views.py delete mode 100644 web/pgadmin/test/hooks.py delete mode 100644 web/pgadmin/test/views.py diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py index 2eb0982f4..efd4b7cc3 100644 --- a/web/pgadmin/__init__.py +++ b/web/pgadmin/__init__.py @@ -9,7 +9,7 @@ """The main pgAdmin module. This handles the application initialisation tasks, such as setup of logging, dynamic loading of modules etc.""" - +from collections import defaultdict from flask import Flask, abort, request, current_app from flask.ext.babel import Babel from flask.ext.security import Security, SQLAlchemyUserDatastore @@ -42,6 +42,32 @@ class PgAdmin(Flask): if isinstance(value, PgAdminModule): yield value + @property + def submodules(self): + for blueprint in self.blueprints.values(): + if isinstance(blueprint, PgAdminModule): + yield blueprint + + @property + def stylesheets(self): + stylesheets = [] + for module in self.submodules: + stylesheets.extend(getattr(module, "stylesheets", [])) + return stylesheets + + @property + def javascripts(self): + stylesheets = [] + for module in self.submodules: + stylesheets.extend(getattr(module, "javascripts", [])) + return stylesheets + + @property + def panels(self): + panels = [] + for module in self.submodules: + panels.extend(module.get_panels()) + return panels def _find_blueprint(): if request.blueprint: @@ -169,9 +195,13 @@ def create_app(app_name=config.APP_NAME): @app.context_processor def inject_blueprint(): """Inject a reference to the current blueprint, if any.""" + menu_items = defaultdict(list) + for blueprint in app.submodules: + menu_items.update(getattr(blueprint, "menu_items", {})) return { + 'current_app': current_app, 'current_blueprint': current_blueprint, - 'menu_items': getattr(current_blueprint, "menu_items", {})} + 'menu_items': menu_items } ########################################################################## # All done! diff --git a/web/pgadmin/about/__init__.py b/web/pgadmin/about/__init__.py index e69de29bb..5830c7cc6 100644 --- a/web/pgadmin/about/__init__.py +++ b/web/pgadmin/about/__init__.py @@ -0,0 +1,67 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2015, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +"""A blueprint module implementing the about box.""" +MODULE_NAME = 'about' + +from pgadmin.utils import PgAdminModule +from pgadmin.utils.menu import MenuItem +from flask import Response, current_app, render_template, __version__, url_for +from flask.ext.babel import gettext +from flask.ext.security import current_user, login_required + +import sys + +import config + +class AboutModule(PgAdminModule): + + def get_own_menuitems(self): + return { + 'help_items': [ + MenuItem(name='mnu_about', + priority=999, + url='#', + onclick='about_show()', + label=gettext('About %(appname)s', appname=config.APP_NAME)) + ] + } + + def get_own_javascripts(self): + return [url_for('about.script')] + + +blueprint = AboutModule(MODULE_NAME, __name__, + static_url_path='') + +########################################################################## +# A test page +########################################################################## +@blueprint.route("/") +@login_required +def index(): + """Render the about box.""" + info = { } + info['python_version'] = sys.version + info['flask_version'] = __version__ + if config.SERVER_MODE == True: + info['app_mode'] = gettext('Server') + else: + info['app_mode'] = gettext('Desktop') + info['current_user'] = current_user.email + + return render_template(MODULE_NAME + '/index.html', info=info) + +@blueprint.route("/about.js") +@login_required +def script(): + """Render the required Javascript""" + return Response(response=render_template("about/about.js"), + status=200, + mimetype="application/javascript") diff --git a/web/pgadmin/about/hooks.py b/web/pgadmin/about/hooks.py deleted file mode 100644 index f0c0ac804..000000000 --- a/web/pgadmin/about/hooks.py +++ /dev/null @@ -1,28 +0,0 @@ -########################################################################## -# -# pgAdmin 4 - PostgreSQL Tools -# -# Copyright (C) 2013 - 2015, The pgAdmin Development Team -# This software is released under the PostgreSQL Licence -# -########################################################################## - -"""Browser integration functions for the About module.""" - -from flask import render_template, url_for -from flask.ext.babel import gettext - -import config - -def get_help_menu_items(): - """Return a (set) of dicts of help menu items, with name, priority, URL, - target and onclick code.""" - return [{'name': 'mnu_about', - 'label': gettext('About %(appname)s', appname=config.APP_NAME), - 'priority': 999, - 'url': "#", - 'onclick': "about_show()"}] - -def get_scripts(): - """Return a list of script URLs to include in the rendered page header""" - return [ url_for('about.script') ] \ No newline at end of file diff --git a/web/pgadmin/about/views.py b/web/pgadmin/about/views.py deleted file mode 100644 index 0966a16e7..000000000 --- a/web/pgadmin/about/views.py +++ /dev/null @@ -1,48 +0,0 @@ -########################################################################## -# -# pgAdmin 4 - PostgreSQL Tools -# -# Copyright (C) 2013 - 2015, The pgAdmin Development Team -# This software is released under the PostgreSQL Licence -# -########################################################################## - -"""A blueprint module implementing the about box.""" -MODULE_NAME = 'about' - -from flask import Blueprint, Response, current_app, render_template, __version__ -from flask.ext.babel import gettext -from flask.ext.security import current_user, login_required - -import sys - -import config - -# Initialise the module -blueprint = Blueprint(MODULE_NAME, __name__, static_folder='static', static_url_path='', template_folder='templates', url_prefix='/' + MODULE_NAME) - -########################################################################## -# A test page -########################################################################## -@blueprint.route("/") -@login_required -def index(): - """Render the about box.""" - info = { } - info['python_version'] = sys.version - info['flask_version'] = __version__ - if config.SERVER_MODE == True: - info['app_mode'] = gettext('Server') - else: - info['app_mode'] = gettext('Desktop') - info['current_user'] = current_user.email - - return render_template(MODULE_NAME + '/index.html', info=info) - -@blueprint.route("/about.js") -@login_required -def script(): - """Render the required Javascript""" - return Response(response=render_template("about/about.js"), - status=200, - mimetype="application/javascript") \ No newline at end of file diff --git a/web/pgadmin/browser/templates/browser/index.html b/web/pgadmin/browser/templates/browser/index.html index a3b63f67a..dd3a4b25a 100644 --- a/web/pgadmin/browser/templates/browser/index.html +++ b/web/pgadmin/browser/templates/browser/index.html @@ -31,39 +31,22 @@
  • {{ _('Drop object') }}
  • {{ _('Rename object') }}
  • - {% if file_items is defined and file_items|count > 0 %}{% for file_item in file_items %} -
  • {{ file_item.label }}
  • {% endfor %}{% endif %} + {% for file_item in menu_items.file_items %} +
  • {{ file_item.label }}
  • {% endfor %} - - {% if edit_items is defined and edit_items|count > 0 %}{% endif %} - - {% if tools_items is defined and tools_items|count > 0 %}{% endif %} - - {% if management_items is defined and management_items|count > 0 %}{% endif %} - - {% if help_items is defined and help_items|count > 0 %}{% endif %} - + {% for key in ('Edit', 'Tools', 'Management', 'Help') %} + {% if menu_items['%s_items' % key.lower()] %} + {%endif%} + {% endfor %} {% if config.SERVER_MODE %}