Fixed the letter case of the javascript file names.

Also, JSON data should be returned to the client using an
application/json MIME-TYPE using flask's jsonify function.
This commit is contained in:
Ronan Dunklau 2015-06-29 12:12:27 +05:30 committed by Ashesh Vashi
parent 751f8383fa
commit 9e0b011ec8
8 changed files with 144 additions and 161 deletions

View File

@ -26,14 +26,16 @@ def register_submodules(app):
def get_nodes(): def get_nodes():
"""Return a JSON document listing the server groups for the user""" """Return a JSON document listing the server groups for the user"""
groups = ServerGroup.query.filter_by(user_id=current_user.id) groups = ServerGroup.query.filter_by(user_id=current_user.id)
# TODO: Move this JSON generation to a Server method
value = '' # this code is duplicated somewhere else
for group in groups: for group in groups:
value += '{"id":"%s/%d","label":"%s","icon":"icon-%s","inode":true,"_type":"%s"},' % (NODE_TYPE, group.id, group.name, NODE_TYPE, NODE_TYPE) yield {
value = value[:-1] "id": "%s/%d" % (NODE_TYPE, group.id),
"label": group.name,
return value "icon": "icon-%s" % NODE_TYPE,
"inode": True,
"_type": NODE_TYPE
}
def get_standard_menu_items(): def get_standard_menu_items():
"""Return a (set) of dicts of standard menu items (create/drop/rename), with """Return a (set) of dicts of standard menu items (create/drop/rename), with

View File

@ -20,12 +20,15 @@ def get_nodes(server_group):
"""Return a JSON document listing the server groups for the user""" """Return a JSON document listing the server groups for the user"""
servers = Server.query.filter_by(user_id=current_user.id, servergroup_id=server_group) servers = Server.query.filter_by(user_id=current_user.id, servergroup_id=server_group)
value = '' # TODO: Move this JSON generation to a Server method
for server in servers: for server in servers:
value += '{"id":"%s/%d","label":"%s","icon":"icon-%s","inode":true,"_type":"%s"},' % (NODE_TYPE, server.id, server.name, NODE_TYPE, NODE_TYPE) yield {
value = value[:-1] "id": "%s/%d" % (NODE_TYPE, server.id),
"label": server.name,
return value "icon": "icon-%s" % NODE_TYPE,
"inode": True,
"_type": NODE_TYPE
}
def get_standard_menu_items(): def get_standard_menu_items():

View File

@ -9,17 +9,22 @@
"""Defines views for management of servers""" """Defines views for management of servers"""
from flask import Blueprint, Response, current_app, request from flask import Blueprint, request
from flask.ext.babel import gettext from flask.ext.babel import gettext
from flask.ext.security import current_user, login_required from flask.ext.security import current_user, login_required
from . import NODE_TYPE, NODE_PATH from . import NODE_TYPE, NODE_PATH
from pgadmin.utils.ajax import make_json_response from pgadmin.utils.ajax import make_json_response
from pgadmin.settings.settings_model import db, ServerGroup from pgadmin.settings.settings_model import db, Server
import config import traceback
# Initialise the module # Initialise the module
blueprint = Blueprint("NODE-" + NODE_TYPE, __name__, static_folder='static', static_url_path='', template_folder='templates', url_prefix=NODE_PATH) blueprint = Blueprint("NODE-" + NODE_TYPE, __name__,
static_folder='static',
static_url_path='',
template_folder='templates',
url_prefix=NODE_PATH)
@blueprint.route('/add/', methods=['POST']) @blueprint.route('/add/', methods=['POST'])
@login_required @login_required
@ -29,21 +34,20 @@ def add():
errormsg = '' errormsg = ''
data = {} data = {}
success = False
errormsg = ''
if request.form['name'] != '': if request.form['name'] != '':
server = Server(user_id=current_user.id, name=request.form['name']) server = Server(user_id=current_user.id, name=request.form['name'])
try: try:
db.session.add(server) db.session.add(server)
db.session.commit() db.session.commit()
success = True
except Exception as e: except Exception as e:
success = 0
errormsg = e.message errormsg = e.message
else: else:
success = 0
errormsg = gettext('No server name was specified') errormsg = gettext('No server name was specified')
if success == 1: if success:
data['id'] = server.id data['id'] = server.id
data['name'] = server.name data['name'] = server.name

View File

@ -26,22 +26,11 @@ blueprint = Blueprint("NODE-" + NODE_TYPE, __name__, static_folder='static', st
@login_required @login_required
def get_nodes(server_group): def get_nodes(server_group):
"""Build a list of treeview nodes from the child nodes.""" """Build a list of treeview nodes from the child nodes."""
value = '[' nodes = []
for node in sub_nodes: for node in sub_nodes:
if 'hooks' in dir(node) and 'get_nodes' in dir(node.hooks): if hasattr(node, 'hooks') and hasattr(node.hooks, 'get_nodes'):
value += node.hooks.get_nodes(server_group) + ',' nodes.extend(node.hooks.get_nodes(server_group))
return make_json_response(data=nodes)
if value[-1:] == ',':
value = value[:-1]
value += ']'
resp = Response(response=value,
status=200,
mimetype="text/json")
return resp
@blueprint.route('/add/', methods=['POST']) @blueprint.route('/add/', methods=['POST'])

View File

@ -292,7 +292,12 @@ ALTER TABLE tickets_detail \n\
// Initialise the treeview // Initialise the treeview
$('#tree').aciTree({ $('#tree').aciTree({
ajax: { ajax: {
url: '{{ url_for('browser.get_nodes') }}' url: '{{ url_for('browser.get_nodes') }}',
converters: {
'text json': function(payload) {
return $.parseJSON(payload).data;
}
}
}, },
}); });
tree = $('#tree').aciTree('api'); tree = $('#tree').aciTree('api');

View File

@ -20,6 +20,7 @@ from . import sub_nodes
from pgadmin.browser import all_nodes from pgadmin.browser import all_nodes
from pgadmin import modules from pgadmin import modules
from pgadmin.settings import get_setting from pgadmin.settings import get_setting
from pgadmin.utils.ajax import make_json_response
import config import config
@ -60,7 +61,7 @@ def index():
stylesheets.append(url_for('static', filename='css/wcDocker/wcDockerSkeleton.min.css')) stylesheets.append(url_for('static', filename='css/wcDocker/wcDockerSkeleton.min.css'))
stylesheets.append(url_for('static', filename='css/wcDocker/theme.css')) stylesheets.append(url_for('static', filename='css/wcDocker/theme.css'))
stylesheets.append(url_for('static', filename='css/jQuery-contextMenu/jQuery.contextMenu.css')) stylesheets.append(url_for('static', filename='css/jQuery-contextMenu/jquery.contextMenu.css'))
stylesheets.append(url_for('browser.static', filename='css/browser.css')) stylesheets.append(url_for('browser.static', filename='css/browser.css'))
stylesheets.append(url_for('browser.static', filename='css/aciTree/css/aciTree.css')) stylesheets.append(url_for('browser.static', filename='css/aciTree/css/aciTree.css'))
stylesheets.append(url_for('browser.browser_css')) stylesheets.append(url_for('browser.browser_css'))
@ -75,7 +76,7 @@ def index():
scripts.append(url_for('static', filename='js/wcDocker/wcDocker.min.js')) scripts.append(url_for('static', filename='js/wcDocker/wcDocker.min.js'))
scripts.append(url_for('static', filename='js/jQuery-contextMenu/jquery.ui.position.js')) scripts.append(url_for('static', filename='js/jQuery-contextMenu/jquery.ui.position.js'))
scripts.append(url_for('static', filename='js/jQuery-contextMenu/jQuery.contextMenu.js')) scripts.append(url_for('static', filename='js/jQuery-contextMenu/jquery.contextMenu.js'))
scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciPlugin.min.js')) scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciPlugin.min.js'))
scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciTree.dom.js')) scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciTree.dom.js'))
scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciTree.min.js')) scripts.append(url_for('browser.static', filename='js/aciTree/jquery.aciTree.min.js'))
@ -206,21 +207,8 @@ def browser_css():
def get_nodes(): def get_nodes():
"""Build a list of treeview nodes from the child nodes.""" """Build a list of treeview nodes from the child nodes."""
value = '[' value = '['
nodes = []
for node in sub_nodes: for node in sub_nodes:
if 'hooks' in dir(node) and 'get_nodes' in dir(node.hooks): if hasattr(node, 'hooks') and hasattr(node.hooks, 'get_nodes'):
value += node.hooks.get_nodes() + ',' nodes.extend(node.hooks.get_nodes())
return make_json_response(data=nodes)
if value[-1:] == ',':
value = value[:-1]
value += ']'
resp = Response(response=value,
status=200,
mimetype="text/json")
return resp

View File

@ -28,6 +28,7 @@ roles_users = db.Table('roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')), db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))) db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))
class Version(db.Model): class Version(db.Model):
"""Version numbers for reference/upgrade purposes""" """Version numbers for reference/upgrade purposes"""
__tablename__ = 'version' __tablename__ = 'version'
@ -80,5 +81,3 @@ class Server(db.Model):
maintenance_db = db.Column(db.String(64), nullable=False) maintenance_db = db.Column(db.String(64), nullable=False)
username = db.Column(db.String(64), nullable=False) username = db.Column(db.String(64), nullable=False)
ssl_mode = db.Column(db.String(16), nullable=False) ssl_mode = db.Column(db.String(16), nullable=False)

View File

@ -9,20 +9,13 @@
"""Utility functions for dealing with AJAX.""" """Utility functions for dealing with AJAX."""
from flask import Response from flask import jsonify
import json import json
def make_json_response(success=1, errormsg='', info='', result={}, data={}): def make_json_response(success=True, **kwargs):
"""Create a HTML response document describing the results of a request and """Create a HTML response document describing the results of a request and
containing the data.""" containing the data."""
doc = { } response = kwargs.copy()
doc['success'] = success response.setdefault('result', {})
doc['errormsg'] = errormsg response.setdefault('data', {})
doc['info'] = info return jsonify(response)
doc['result'] = result
doc['data'] = data
response = Response(response=json.dumps(doc),
status=200,
mimetype="text/json")
return response