mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
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:
parent
751f8383fa
commit
9e0b011ec8
@ -22,21 +22,23 @@ from . import NODE_TYPE, sub_nodes
|
|||||||
def register_submodules(app):
|
def register_submodules(app):
|
||||||
"""Register any child node blueprints"""
|
"""Register any child node blueprints"""
|
||||||
register_modules(app, __file__, all_nodes, sub_nodes, 'pgadmin.browser.server_groups')
|
register_modules(app, __file__, all_nodes, sub_nodes, 'pgadmin.browser.server_groups')
|
||||||
|
|
||||||
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
|
||||||
object type, action and the function name (no parens) to call on click."""
|
object type, action and the function name (no parens) to call on click."""
|
||||||
return [
|
return [
|
||||||
{'type': 'server-group', 'action': 'drop', 'priority': 10, 'function': 'drop_server_group'},
|
{'type': 'server-group', 'action': 'drop', 'priority': 10, 'function': 'drop_server_group'},
|
||||||
@ -45,22 +47,22 @@ def get_standard_menu_items():
|
|||||||
|
|
||||||
|
|
||||||
def get_create_menu_items():
|
def get_create_menu_items():
|
||||||
"""Return a (set) of dicts of create menu items, with a Javascript array of
|
"""Return a (set) of dicts of create menu items, with a Javascript array of
|
||||||
object types on which the option should appear, name, label and the function
|
object types on which the option should appear, name, label and the function
|
||||||
name (no parens) to call on click."""
|
name (no parens) to call on click."""
|
||||||
return [
|
return [
|
||||||
{'type': "['server-group']", 'name': 'create_server_group', 'label': gettext('Server Group...'), 'priority': 10, 'function': 'create_server_group'}
|
{'type': "['server-group']", 'name': 'create_server_group', 'label': gettext('Server Group...'), 'priority': 10, 'function': 'create_server_group'}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def get_context_menu_items():
|
def get_context_menu_items():
|
||||||
"""Return a (set) of dicts of content menu items with name, node type, label, priority and JS"""
|
"""Return a (set) of dicts of content menu items with name, node type, label, priority and JS"""
|
||||||
return [
|
return [
|
||||||
{'name': 'delete_server_group', 'type': NODE_TYPE, 'label': gettext('Delete server group'), 'priority': 10, 'onclick': 'drop_server_group(item);'},
|
{'name': 'delete_server_group', 'type': NODE_TYPE, 'label': gettext('Delete server group'), 'priority': 10, 'onclick': 'drop_server_group(item);'},
|
||||||
{'name': 'rename_server_group', 'type': NODE_TYPE, 'label': gettext('Rename server group...'), 'priority': 20, 'onclick': 'rename_server_group(item);'}
|
{'name': 'rename_server_group', 'type': NODE_TYPE, 'label': gettext('Rename server group...'), 'priority': 20, 'onclick': 'rename_server_group(item);'}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def get_script_snippets():
|
def get_script_snippets():
|
||||||
"""Return the script snippets needed to handle treeview node operations."""
|
"""Return the script snippets needed to handle treeview node operations."""
|
||||||
return render_template('server_groups/server_groups.js')
|
return render_template('server_groups/server_groups.js')
|
||||||
@ -72,5 +74,5 @@ def get_css_snippets():
|
|||||||
css += " background: url('%s') 0 0 no-repeat !important;\n" % \
|
css += " background: url('%s') 0 0 no-repeat !important;\n" % \
|
||||||
url_for('NODE-%s.static' % NODE_TYPE, filename='img/server-group.png')
|
url_for('NODE-%s.static' % NODE_TYPE, filename='img/server-group.png')
|
||||||
css += "}\n"
|
css += "}\n"
|
||||||
|
|
||||||
return css
|
return css
|
||||||
|
@ -19,27 +19,30 @@ from . import NODE_TYPE
|
|||||||
def get_nodes(server_group):
|
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 = ''
|
|
||||||
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)
|
|
||||||
value = value[:-1]
|
|
||||||
|
|
||||||
return value
|
|
||||||
|
|
||||||
|
# TODO: Move this JSON generation to a Server method
|
||||||
|
for server in servers:
|
||||||
|
yield {
|
||||||
|
"id": "%s/%d" % (NODE_TYPE, server.id),
|
||||||
|
"label": server.name,
|
||||||
|
"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
|
||||||
object type, action, priority and the function to call on click."""
|
object type, action, priority and the function to call on click."""
|
||||||
return [
|
return [
|
||||||
{'type': 'server', 'action': 'drop', 'priority': 50, 'function': 'drop_server'},
|
{'type': 'server', 'action': 'drop', 'priority': 50, 'function': 'drop_server'},
|
||||||
{'type': 'server', 'action': 'rename', 'priority': 60, 'function': 'rename_server'}
|
{'type': 'server', 'action': 'rename', 'priority': 60, 'function': 'rename_server'}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def get_create_menu_items():
|
def get_create_menu_items():
|
||||||
"""Return a (set) of dicts of create menu items, with a Javascript array of
|
"""Return a (set) of dicts of create menu items, with a Javascript array of
|
||||||
object types on which the option should appear, name, label, priority and
|
object types on which the option should appear, name, label, priority and
|
||||||
the function name (no parens) to call on click."""
|
the function name (no parens) to call on click."""
|
||||||
return [
|
return [
|
||||||
{'type': "['server-group', 'server']", 'name': 'create_server', 'label': gettext('Server...'), 'priority': 50, 'function': 'create_server'}
|
{'type': "['server-group', 'server']", 'name': 'create_server', 'label': gettext('Server...'), 'priority': 50, 'function': 'create_server'}
|
||||||
@ -52,8 +55,8 @@ def get_context_menu_items():
|
|||||||
{'name': 'delete_server', 'type': NODE_TYPE, 'label': gettext('Delete server'), 'priority': 50, 'onclick': 'drop_server(item);'},
|
{'name': 'delete_server', 'type': NODE_TYPE, 'label': gettext('Delete server'), 'priority': 50, 'onclick': 'drop_server(item);'},
|
||||||
{'name': 'rename_server', 'type': NODE_TYPE, 'label': gettext('Rename server...'), 'priority': 60, 'onclick': 'rename_server(item);'}
|
{'name': 'rename_server', 'type': NODE_TYPE, 'label': gettext('Rename server...'), 'priority': 60, 'onclick': 'rename_server(item);'}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def get_script_snippets():
|
def get_script_snippets():
|
||||||
"""Return the script snippets needed to handle treeview node operations."""
|
"""Return the script snippets needed to handle treeview node operations."""
|
||||||
return render_template('servers/servers.js')
|
return render_template('servers/servers.js')
|
||||||
@ -65,5 +68,5 @@ def get_css_snippets():
|
|||||||
css += " background: url('%s') 0 0 no-repeat !important;\n" % \
|
css += " background: url('%s') 0 0 no-repeat !important;\n" % \
|
||||||
url_for('NODE-%s.static' % NODE_TYPE, filename='img/server.png')
|
url_for('NODE-%s.static' % NODE_TYPE, filename='img/server.png')
|
||||||
css += "}\n"
|
css += "}\n"
|
||||||
|
|
||||||
return css
|
return css
|
||||||
|
@ -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
|
||||||
@ -27,30 +32,29 @@ def add():
|
|||||||
"""Add a server node to the settings database"""
|
"""Add a server node to the settings database"""
|
||||||
success = 1
|
success = 1
|
||||||
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
|
||||||
|
|
||||||
return make_json_response(success=success,
|
return make_json_response(success=success,
|
||||||
errormsg=errormsg,
|
errormsg=errormsg,
|
||||||
info=traceback.format_exc(),
|
info=traceback.format_exc(),
|
||||||
result=request.form,
|
result=request.form,
|
||||||
data=data)
|
data=data)
|
||||||
|
|
||||||
@blueprint.route('/delete/', methods=['POST'])
|
@blueprint.route('/delete/', methods=['POST'])
|
||||||
@ -63,7 +67,7 @@ def delete():
|
|||||||
if request.form['id'] != '':
|
if request.form['id'] != '':
|
||||||
# There can be only one record at most
|
# There can be only one record at most
|
||||||
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||||
|
|
||||||
if server is None:
|
if server is None:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('The specified server could not be found.')
|
errormsg = gettext('The specified server could not be found.')
|
||||||
@ -78,10 +82,10 @@ def delete():
|
|||||||
else:
|
else:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('No server was specified.')
|
errormsg = gettext('No server was specified.')
|
||||||
|
|
||||||
return make_json_response(success=success,
|
return make_json_response(success=success,
|
||||||
errormsg=errormsg,
|
errormsg=errormsg,
|
||||||
info=traceback.format_exc(),
|
info=traceback.format_exc(),
|
||||||
result=request.form)
|
result=request.form)
|
||||||
|
|
||||||
@blueprint.route('/rename/', methods=['POST'])
|
@blueprint.route('/rename/', methods=['POST'])
|
||||||
@ -94,7 +98,7 @@ def rename():
|
|||||||
if request.form['id'] != '':
|
if request.form['id'] != '':
|
||||||
# There can be only one record at most
|
# There can be only one record at most
|
||||||
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||||
|
|
||||||
if server is None:
|
if server is None:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('The specified server could not be found.')
|
errormsg = gettext('The specified server could not be found.')
|
||||||
@ -109,9 +113,9 @@ def rename():
|
|||||||
else:
|
else:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('No server was specified.')
|
errormsg = gettext('No server was specified.')
|
||||||
|
|
||||||
return make_json_response(success=success,
|
return make_json_response(success=success,
|
||||||
errormsg=errormsg,
|
errormsg=errormsg,
|
||||||
info=traceback.format_exc(),
|
info=traceback.format_exc(),
|
||||||
result=request.form)
|
result=request.form)
|
||||||
|
|
||||||
|
@ -26,24 +26,13 @@ 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'])
|
||||||
@login_required
|
@login_required
|
||||||
def add():
|
def add():
|
||||||
@ -51,7 +40,7 @@ def add():
|
|||||||
success = 1
|
success = 1
|
||||||
errormsg = ''
|
errormsg = ''
|
||||||
data = { }
|
data = { }
|
||||||
|
|
||||||
if request.form['name'] != '':
|
if request.form['name'] != '':
|
||||||
servergroup = ServerGroup(user_id=current_user.id, name=request.form['name'])
|
servergroup = ServerGroup(user_id=current_user.id, name=request.form['name'])
|
||||||
|
|
||||||
@ -65,15 +54,15 @@ def add():
|
|||||||
else:
|
else:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('No server group name was specified')
|
errormsg = gettext('No server group name was specified')
|
||||||
|
|
||||||
if success == 1:
|
if success == 1:
|
||||||
data['id'] = servergroup.id
|
data['id'] = servergroup.id
|
||||||
data['name'] = servergroup.name
|
data['name'] = servergroup.name
|
||||||
|
|
||||||
return make_json_response(success=success,
|
return make_json_response(success=success,
|
||||||
errormsg=errormsg,
|
errormsg=errormsg,
|
||||||
info=traceback.format_exc(),
|
info=traceback.format_exc(),
|
||||||
result=request.form,
|
result=request.form,
|
||||||
data=data)
|
data=data)
|
||||||
|
|
||||||
@blueprint.route('/delete/', methods=['POST'])
|
@blueprint.route('/delete/', methods=['POST'])
|
||||||
@ -86,7 +75,7 @@ def delete():
|
|||||||
if request.form['id'] != '':
|
if request.form['id'] != '':
|
||||||
# There can be only one record at most
|
# There can be only one record at most
|
||||||
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||||
|
|
||||||
if servergroup is None:
|
if servergroup is None:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('The specified server group could not be found.')
|
errormsg = gettext('The specified server group could not be found.')
|
||||||
@ -101,10 +90,10 @@ def delete():
|
|||||||
else:
|
else:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('No server group was specified.')
|
errormsg = gettext('No server group was specified.')
|
||||||
|
|
||||||
return make_json_response(success=success,
|
return make_json_response(success=success,
|
||||||
errormsg=errormsg,
|
errormsg=errormsg,
|
||||||
info=traceback.format_exc(),
|
info=traceback.format_exc(),
|
||||||
result=request.form)
|
result=request.form)
|
||||||
|
|
||||||
@blueprint.route('/rename/', methods=['POST'])
|
@blueprint.route('/rename/', methods=['POST'])
|
||||||
@ -117,7 +106,7 @@ def rename():
|
|||||||
if request.form['id'] != '':
|
if request.form['id'] != '':
|
||||||
# There can be only one record at most
|
# There can be only one record at most
|
||||||
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||||
|
|
||||||
if servergroup is None:
|
if servergroup is None:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('The specified server group could not be found.')
|
errormsg = gettext('The specified server group could not be found.')
|
||||||
@ -132,9 +121,9 @@ def rename():
|
|||||||
else:
|
else:
|
||||||
success = 0
|
success = 0
|
||||||
errormsg = gettext('No server group was specified.')
|
errormsg = gettext('No server group was specified.')
|
||||||
|
|
||||||
return make_json_response(success=success,
|
return make_json_response(success=success,
|
||||||
errormsg=errormsg,
|
errormsg=errormsg,
|
||||||
info=traceback.format_exc(),
|
info=traceback.format_exc(),
|
||||||
result=request.form)
|
result=request.form)
|
||||||
|
|
||||||
|
@ -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');
|
||||||
|
@ -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
|
||||||
@ -50,7 +51,7 @@ def index():
|
|||||||
scripts = [ ]
|
scripts = [ ]
|
||||||
|
|
||||||
modules_and_nodes = modules + all_nodes
|
modules_and_nodes = modules + all_nodes
|
||||||
|
|
||||||
# Add browser stylesheets
|
# Add browser stylesheets
|
||||||
stylesheets.append(url_for('static', filename='css/codemirror/codemirror.css'))
|
stylesheets.append(url_for('static', filename='css/codemirror/codemirror.css'))
|
||||||
|
|
||||||
@ -60,32 +61,32 @@ 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'))
|
||||||
|
|
||||||
# Add browser scripts
|
# Add browser scripts
|
||||||
scripts.append(url_for('static', filename='js/codemirror/codemirror.js'))
|
scripts.append(url_for('static', filename='js/codemirror/codemirror.js'))
|
||||||
scripts.append(url_for('static', filename='js/codemirror/mode/sql.js'))
|
scripts.append(url_for('static', filename='js/codemirror/mode/sql.js'))
|
||||||
|
|
||||||
if config.DEBUG:
|
if config.DEBUG:
|
||||||
scripts.append(url_for('static', filename='js/wcDocker/wcDocker.js'))
|
scripts.append(url_for('static', filename='js/wcDocker/wcDocker.js'))
|
||||||
else:
|
else:
|
||||||
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'))
|
||||||
scripts.append(url_for('browser.browser_js'))
|
scripts.append(url_for('browser.browser_js'))
|
||||||
|
|
||||||
for module in modules_and_nodes:
|
for module in modules_and_nodes:
|
||||||
# Get the edit menu items
|
# Get the edit menu items
|
||||||
if 'hooks' in dir(module) and 'get_file_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_file_menu_items' in dir(module.hooks):
|
||||||
file_items.extend(module.hooks.get_file_menu_items())
|
file_items.extend(module.hooks.get_file_menu_items())
|
||||||
|
|
||||||
# Get the edit menu items
|
# Get the edit menu items
|
||||||
if 'hooks' in dir(module) and 'get_edit_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_edit_menu_items' in dir(module.hooks):
|
||||||
edit_items.extend(module.hooks.get_edit_menu_items())
|
edit_items.extend(module.hooks.get_edit_menu_items())
|
||||||
@ -97,30 +98,30 @@ def index():
|
|||||||
# Get the management menu items
|
# Get the management menu items
|
||||||
if 'hooks' in dir(module) and 'get_management_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_management_menu_items' in dir(module.hooks):
|
||||||
management_items.extend(module.hooks.get_management_menu_items())
|
management_items.extend(module.hooks.get_management_menu_items())
|
||||||
|
|
||||||
# Get the help menu items
|
# Get the help menu items
|
||||||
if 'hooks' in dir(module) and 'get_help_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_help_menu_items' in dir(module.hooks):
|
||||||
help_items.extend(module.hooks.get_help_menu_items())
|
help_items.extend(module.hooks.get_help_menu_items())
|
||||||
|
|
||||||
# Get any stylesheets
|
# Get any stylesheets
|
||||||
if 'hooks' in dir(module) and 'get_stylesheets' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_stylesheets' in dir(module.hooks):
|
||||||
stylesheets += module.hooks.get_stylesheets()
|
stylesheets += module.hooks.get_stylesheets()
|
||||||
|
|
||||||
# Get any scripts
|
# Get any scripts
|
||||||
if 'hooks' in dir(module) and 'get_scripts' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_scripts' in dir(module.hooks):
|
||||||
scripts += module.hooks.get_scripts()
|
scripts += module.hooks.get_scripts()
|
||||||
|
|
||||||
file_items = sorted(file_items, key=lambda k: k['priority'])
|
file_items = sorted(file_items, key=lambda k: k['priority'])
|
||||||
edit_items = sorted(edit_items, key=lambda k: k['priority'])
|
edit_items = sorted(edit_items, key=lambda k: k['priority'])
|
||||||
tools_items = sorted(tools_items, key=lambda k: k['priority'])
|
tools_items = sorted(tools_items, key=lambda k: k['priority'])
|
||||||
management_items = sorted(management_items, key=lambda k: k['priority'])
|
management_items = sorted(management_items, key=lambda k: k['priority'])
|
||||||
help_items = sorted(help_items, key=lambda k: k['priority'])
|
help_items = sorted(help_items, key=lambda k: k['priority'])
|
||||||
|
|
||||||
return render_template(MODULE_NAME + '/index.html',
|
return render_template(MODULE_NAME + '/index.html',
|
||||||
username=current_user.email,
|
username=current_user.email,
|
||||||
file_items=file_items,
|
file_items=file_items,
|
||||||
edit_items=edit_items,
|
edit_items=edit_items,
|
||||||
tools_items=tools_items,
|
tools_items=tools_items,
|
||||||
management_items=management_items,
|
management_items=management_items,
|
||||||
help_items=help_items,
|
help_items=help_items,
|
||||||
stylesheets = stylesheets,
|
stylesheets = stylesheets,
|
||||||
@ -132,15 +133,15 @@ def browser_js():
|
|||||||
"""Render and return JS snippets from the nodes and modules."""
|
"""Render and return JS snippets from the nodes and modules."""
|
||||||
snippets = ''
|
snippets = ''
|
||||||
modules_and_nodes = modules + all_nodes
|
modules_and_nodes = modules + all_nodes
|
||||||
|
|
||||||
# Load the core browser code first
|
# Load the core browser code first
|
||||||
|
|
||||||
# Get the context menu items
|
# Get the context menu items
|
||||||
standard_items = [ ]
|
standard_items = [ ]
|
||||||
create_items = [ ]
|
create_items = [ ]
|
||||||
context_items = [ ]
|
context_items = [ ]
|
||||||
panel_items = [ ]
|
panel_items = [ ]
|
||||||
|
|
||||||
for module in modules_and_nodes:
|
for module in modules_and_nodes:
|
||||||
# Get any standard menu items
|
# Get any standard menu items
|
||||||
if 'hooks' in dir(module) and 'get_standard_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_standard_menu_items' in dir(module.hooks):
|
||||||
@ -149,11 +150,11 @@ def browser_js():
|
|||||||
# Get any create menu items
|
# Get any create menu items
|
||||||
if 'hooks' in dir(module) and 'get_create_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_create_menu_items' in dir(module.hooks):
|
||||||
create_items.extend(module.hooks.get_create_menu_items())
|
create_items.extend(module.hooks.get_create_menu_items())
|
||||||
|
|
||||||
# Get any context menu items
|
# Get any context menu items
|
||||||
if 'hooks' in dir(module) and 'get_context_menu_items' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_context_menu_items' in dir(module.hooks):
|
||||||
context_items.extend(module.hooks.get_context_menu_items())
|
context_items.extend(module.hooks.get_context_menu_items())
|
||||||
|
|
||||||
# Get any panels
|
# Get any panels
|
||||||
if 'hooks' in dir(module) and 'get_panels' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_panels' in dir(module.hooks):
|
||||||
panel_items += module.hooks.get_panels()
|
panel_items += module.hooks.get_panels()
|
||||||
@ -162,25 +163,25 @@ def browser_js():
|
|||||||
create_items = sorted(create_items, key=lambda k: k['priority'])
|
create_items = sorted(create_items, key=lambda k: k['priority'])
|
||||||
context_items = sorted(context_items, key=lambda k: k['priority'])
|
context_items = sorted(context_items, key=lambda k: k['priority'])
|
||||||
panel_items = sorted(panel_items, key=lambda k: k['priority'])
|
panel_items = sorted(panel_items, key=lambda k: k['priority'])
|
||||||
|
|
||||||
layout = get_setting('Browser/Layout', default='')
|
layout = get_setting('Browser/Layout', default='')
|
||||||
|
|
||||||
snippets += render_template('browser/js/browser.js',
|
snippets += render_template('browser/js/browser.js',
|
||||||
layout = layout,
|
layout = layout,
|
||||||
standard_items = standard_items,
|
standard_items = standard_items,
|
||||||
create_items = create_items,
|
create_items = create_items,
|
||||||
context_items = context_items,
|
context_items = context_items,
|
||||||
panel_items = panel_items)
|
panel_items = panel_items)
|
||||||
|
|
||||||
# Add module and node specific code
|
# Add module and node specific code
|
||||||
for module in modules_and_nodes:
|
for module in modules_and_nodes:
|
||||||
if 'hooks' in dir(module) and 'get_script_snippets' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_script_snippets' in dir(module.hooks):
|
||||||
snippets += module.hooks.get_script_snippets()
|
snippets += module.hooks.get_script_snippets()
|
||||||
|
|
||||||
resp = Response(response=snippets,
|
resp = Response(response=snippets,
|
||||||
status=200,
|
status=200,
|
||||||
mimetype="application/javascript")
|
mimetype="application/javascript")
|
||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
@blueprint.route("/browser.css")
|
@blueprint.route("/browser.css")
|
||||||
@ -189,15 +190,15 @@ def browser_css():
|
|||||||
"""Render and return CSS snippets from the nodes and modules."""
|
"""Render and return CSS snippets from the nodes and modules."""
|
||||||
snippets = ''
|
snippets = ''
|
||||||
modules_and_nodes = modules + all_nodes
|
modules_and_nodes = modules + all_nodes
|
||||||
|
|
||||||
for module in modules_and_nodes:
|
for module in modules_and_nodes:
|
||||||
if 'hooks' in dir(module) and 'get_css_snippets' in dir(module.hooks):
|
if 'hooks' in dir(module) and 'get_css_snippets' in dir(module.hooks):
|
||||||
snippets += module.hooks.get_css_snippets()
|
snippets += module.hooks.get_css_snippets()
|
||||||
|
|
||||||
resp = Response(response=snippets,
|
resp = Response(response=snippets,
|
||||||
status=200,
|
status=200,
|
||||||
mimetype="text/css")
|
mimetype="text/css")
|
||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
@ -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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
"""Defines the models for the configuration database.
|
"""Defines the models for the configuration database.
|
||||||
|
|
||||||
If any of the models are updated, you (yes, you, the developer) MUST do two
|
If any of the models are updated, you (yes, you, the developer) MUST do two
|
||||||
things:
|
things:
|
||||||
|
|
||||||
1) Increment SETTINGS_SCHEMA_VERSION in config.py
|
1) Increment SETTINGS_SCHEMA_VERSION in config.py
|
||||||
@ -28,12 +28,13 @@ 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'
|
||||||
name = db.Column(db.String(32), primary_key=True)
|
name = db.Column(db.String(32), primary_key=True)
|
||||||
value = db.Column(db.Integer(), nullable=False)
|
value = db.Column(db.Integer(), nullable=False)
|
||||||
|
|
||||||
class Role(db.Model, RoleMixin):
|
class Role(db.Model, RoleMixin):
|
||||||
"""Define a security role"""
|
"""Define a security role"""
|
||||||
__tablename__ = 'role'
|
__tablename__ = 'role'
|
||||||
@ -51,7 +52,7 @@ class User(db.Model, UserMixin):
|
|||||||
confirmed_at = db.Column(db.DateTime())
|
confirmed_at = db.Column(db.DateTime())
|
||||||
roles = db.relationship('Role', secondary=roles_users,
|
roles = db.relationship('Role', secondary=roles_users,
|
||||||
backref=db.backref('users', lazy='dynamic'))
|
backref=db.backref('users', lazy='dynamic'))
|
||||||
|
|
||||||
class Setting(db.Model):
|
class Setting(db.Model):
|
||||||
"""Define a setting object"""
|
"""Define a setting object"""
|
||||||
__tablename__ = 'setting'
|
__tablename__ = 'setting'
|
||||||
@ -66,7 +67,7 @@ class ServerGroup(db.Model):
|
|||||||
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
|
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
|
||||||
name = db.Column(db.String(128), nullable=False)
|
name = db.Column(db.String(128), nullable=False)
|
||||||
__table_args__ = (db.UniqueConstraint('user_id', 'name'),)
|
__table_args__ = (db.UniqueConstraint('user_id', 'name'),)
|
||||||
|
|
||||||
|
|
||||||
class Server(db.Model):
|
class Server(db.Model):
|
||||||
"""Define a registered Postgres server"""
|
"""Define a registered Postgres server"""
|
||||||
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
|
Loading…
Reference in New Issue
Block a user