mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Introduced a PgAdmin class inherited from the Flask, which looks for
submodules inherited from the PgAdminModule instead of regular Blueprint. This allows us to load the module automatically from the under the pgadmin directory, and will work to extend the pgAdmin extension module. PgAdminModule is inherited from the Blueprint, and bring several methods: - get_own_stylesheets, which returns the stylesheets used by the module (excluding its submodules stylesheets) - get_own_javascripts - menu_items, which returns a dictionray mapping the old hook names (context_items etc) to a list of MenuItem instances For more specialized modules (as for now, any module that should be part of the browser tree construction), one can define an abstract base class defining additional methods. For example, the BrowserPluginModule abstract base class defines the following methods: - jssnippets - csssnipeets - node_type - get_nodes
This commit is contained in:
committed by
Ashesh Vashi
parent
9e0b011ec8
commit
eb6580b43a
@@ -6,10 +6,202 @@
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
"""Defines views for management of server groups"""
|
||||
|
||||
# Node meta data
|
||||
NODE_TYPE = 'server-group'
|
||||
NODE_PATH = '/browser/nodes/' + NODE_TYPE
|
||||
from abc import ABCMeta, abstractmethod
|
||||
import traceback
|
||||
from flask import Blueprint, Response, current_app, request, render_template
|
||||
from flask.ext.babel import gettext
|
||||
from flask.ext.security import current_user, login_required
|
||||
from pgadmin import current_blueprint
|
||||
from pgadmin.utils.ajax import make_json_response
|
||||
from pgadmin.browser import BrowserPluginModule
|
||||
from pgadmin.utils.menu import MenuItem
|
||||
from pgadmin.settings.settings_model import db, ServerGroup
|
||||
import config
|
||||
|
||||
# Define the child node list
|
||||
sub_nodes = [ ]
|
||||
|
||||
|
||||
class ServerGroupModule(BrowserPluginModule):
|
||||
|
||||
NODE_TYPE = "server-group"
|
||||
|
||||
def get_own_menuitems(self):
|
||||
return {
|
||||
'standard_items': [
|
||||
ServerGroupMenuItem(action="drop", priority=10, function="drop_server_group"),
|
||||
ServerGroupMenuItem(action="rename", priority=10, function="rename_server_group")
|
||||
],
|
||||
'create_items': [
|
||||
ServerGroupMenuItem(name="create_server_group",
|
||||
label=gettext('Server Group...'),
|
||||
priority=10,
|
||||
function="create_server_group",
|
||||
types=[self.node_type])
|
||||
],
|
||||
'context_items': [
|
||||
ServerGroupMenuItem(name="delete_server_group",
|
||||
label=gettext('Delete server group'),
|
||||
priority=10,
|
||||
onclick='drop_server_group(item);'),
|
||||
ServerGroupMenuItem(name="rename_server_group",
|
||||
label=gettext('Rename server group...'),
|
||||
priority=10,
|
||||
onclick='rename_server_group(item);')
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@property
|
||||
def jssnippets(self):
|
||||
snippets = [render_template("server_groups/server_groups.js")]
|
||||
for module in self.submodules:
|
||||
snippets.extend(module.jssnippets)
|
||||
return snippets
|
||||
|
||||
def get_nodes(self, **kwargs):
|
||||
"""Return a JSON document listing the server groups for the user"""
|
||||
groups = ServerGroup.query.filter_by(user_id=current_user.id)
|
||||
# TODO: Move this JSON generation to a Server method
|
||||
# this code is duplicated somewhere else
|
||||
for group in groups:
|
||||
yield {
|
||||
"id": "%s/%d" % (self.node_type, group.id),
|
||||
"label": group.name,
|
||||
"icon": "icon-%s" % self.node_type,
|
||||
"inode": True,
|
||||
"_type": self.node_type
|
||||
}
|
||||
|
||||
@property
|
||||
def node_type(self):
|
||||
return self.NODE_TYPE
|
||||
|
||||
|
||||
|
||||
class ServerGroupMenuItem(MenuItem):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
kwargs.setdefault("type", ServerGroupModule.NODE_TYPE)
|
||||
super(ServerGroupMenuItem, self).__init__(**kwargs)
|
||||
|
||||
|
||||
class ServerGroupPluginModule(BrowserPluginModule):
|
||||
"""
|
||||
Base class for server group plugins.
|
||||
"""
|
||||
|
||||
__metaclass__ = ABCMeta
|
||||
|
||||
|
||||
@abstractmethod
|
||||
def get_nodes(self, servergroup):
|
||||
pass
|
||||
|
||||
|
||||
# Initialise the module
|
||||
blueprint = ServerGroupModule( __name__, static_url_path='')
|
||||
|
||||
@blueprint.route("/<server_group>")
|
||||
@login_required
|
||||
def get_nodes(server_group):
|
||||
"""Build a list of treeview nodes from the child nodes."""
|
||||
nodes = []
|
||||
for module in current_blueprint.submodules:
|
||||
nodes.extend(module.get_nodes(server_group=server_group))
|
||||
return make_json_response(data=nodes)
|
||||
|
||||
|
||||
@blueprint.route('/add/', methods=['POST'])
|
||||
@login_required
|
||||
def add():
|
||||
"""Add a server group node to the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
data = { }
|
||||
|
||||
if request.form['name'] != '':
|
||||
servergroup = ServerGroup(user_id=current_user.id, name=request.form['name'])
|
||||
|
||||
try:
|
||||
db.session.add(servergroup)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server group name was specified')
|
||||
|
||||
if success == 1:
|
||||
data['id'] = servergroup.id
|
||||
data['name'] = servergroup.name
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form,
|
||||
data=data)
|
||||
|
||||
@blueprint.route('/delete/', methods=['POST'])
|
||||
@login_required
|
||||
def delete():
|
||||
"""Delete a server group node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if servergroup is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server group could not be found.')
|
||||
else:
|
||||
try:
|
||||
db.session.delete(servergroup)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server group was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
@blueprint.route('/rename/', methods=['POST'])
|
||||
@login_required
|
||||
def rename():
|
||||
"""Rename a server group node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if servergroup is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server group could not be found.')
|
||||
else:
|
||||
try:
|
||||
servergroup.name = request.form['name']
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server group was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2015, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""Integration hooks for server groups."""
|
||||
|
||||
from flask import render_template, url_for
|
||||
from flask.ext.babel import gettext
|
||||
from flask.ext.security import current_user
|
||||
|
||||
from pgadmin.browser.utils import register_modules
|
||||
from pgadmin.settings.settings_model import db, ServerGroup
|
||||
|
||||
from pgadmin.browser import all_nodes
|
||||
from . import NODE_TYPE, sub_nodes
|
||||
|
||||
def register_submodules(app):
|
||||
"""Register any child node blueprints"""
|
||||
register_modules(app, __file__, all_nodes, sub_nodes, 'pgadmin.browser.server_groups')
|
||||
|
||||
def get_nodes():
|
||||
"""Return a JSON document listing the server groups for the user"""
|
||||
groups = ServerGroup.query.filter_by(user_id=current_user.id)
|
||||
# TODO: Move this JSON generation to a Server method
|
||||
# this code is duplicated somewhere else
|
||||
for group in groups:
|
||||
yield {
|
||||
"id": "%s/%d" % (NODE_TYPE, group.id),
|
||||
"label": group.name,
|
||||
"icon": "icon-%s" % NODE_TYPE,
|
||||
"inode": True,
|
||||
"_type": NODE_TYPE
|
||||
}
|
||||
|
||||
def get_standard_menu_items():
|
||||
"""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."""
|
||||
return [
|
||||
{'type': 'server-group', 'action': 'drop', 'priority': 10, 'function': 'drop_server_group'},
|
||||
{'type': 'server-group', 'action': 'rename', 'priority': 20, 'function': 'rename_server_group'}
|
||||
]
|
||||
|
||||
|
||||
def get_create_menu_items():
|
||||
"""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
|
||||
name (no parens) to call on click."""
|
||||
return [
|
||||
{'type': "['server-group']", 'name': 'create_server_group', 'label': gettext('Server Group...'), 'priority': 10, 'function': 'create_server_group'}
|
||||
]
|
||||
|
||||
|
||||
def get_context_menu_items():
|
||||
"""Return a (set) of dicts of content menu items with name, node type, label, priority and JS"""
|
||||
return [
|
||||
{'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);'}
|
||||
]
|
||||
|
||||
|
||||
def get_script_snippets():
|
||||
"""Return the script snippets needed to handle treeview node operations."""
|
||||
return render_template('server_groups/server_groups.js')
|
||||
|
||||
|
||||
def get_css_snippets():
|
||||
"""Return the CSS needed to display the treeview node image."""
|
||||
css = ".icon-server-group {\n"
|
||||
css += " background: url('%s') 0 0 no-repeat !important;\n" % \
|
||||
url_for('NODE-%s.static' % NODE_TYPE, filename='img/server-group.png')
|
||||
css += "}\n"
|
||||
|
||||
return css
|
||||
@@ -6,11 +6,167 @@
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
from flask import render_template, request
|
||||
from pgadmin.browser.server_groups import ServerGroupPluginModule
|
||||
from flask.ext.security import login_required, current_user
|
||||
from pgadmin.settings.settings_model import db, Server
|
||||
from pgadmin.utils.menu import MenuItem
|
||||
from pgadmin.utils.ajax import make_json_response
|
||||
import traceback
|
||||
from flask.ext.babel import gettext
|
||||
|
||||
# Node meta data
|
||||
NODE_TYPE = 'server'
|
||||
NODE_PATH = '/browser/nodes/' + NODE_TYPE
|
||||
|
||||
# Define the child node list
|
||||
sub_nodes = [ ]
|
||||
class ServerModule(ServerGroupPluginModule):
|
||||
|
||||
NODE_TYPE = "server"
|
||||
|
||||
@property
|
||||
def node_type(self):
|
||||
return self.NODE_TYPE
|
||||
|
||||
def get_nodes(self, server_group):
|
||||
"""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)
|
||||
|
||||
# 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_own_menuitems(self):
|
||||
return {
|
||||
'standard_items': [
|
||||
ServerMenuItem(action="drop", priority=50, function='drop_server'),
|
||||
ServerMenuItem(action="rename", priority=50, function='rename_server')
|
||||
],
|
||||
'create_items': [
|
||||
ServerMenuItem(types=["server-group", "server"],
|
||||
name="create_server",
|
||||
label=gettext('Server...'),
|
||||
priority=50,
|
||||
function='create_server')
|
||||
],
|
||||
'context_items': [
|
||||
ServerMenuItem(name='delete_server',
|
||||
label=gettext('Delete server'),
|
||||
priority=50,
|
||||
onclick='drop_server'),
|
||||
ServerMenuItem(name='rename_server',
|
||||
label=gettext('Rename server...'),
|
||||
priority=60,
|
||||
onclick='rename_server(item);')
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@property
|
||||
def jssnippets(self):
|
||||
return [render_template("servers/servers.js")]
|
||||
|
||||
|
||||
class ServerMenuItem(MenuItem):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
kwargs.setdefault("type", ServerModule.NODE_TYPE)
|
||||
super(ServerMenuItem, self).__init__(**kwargs)
|
||||
|
||||
blueprint = ServerModule(__name__)
|
||||
|
||||
@blueprint.route('/add/', methods=['POST'])
|
||||
@login_required
|
||||
def add():
|
||||
"""Add a server node to the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
data = {}
|
||||
|
||||
success = False
|
||||
errormsg = ''
|
||||
if request.form['name'] != '':
|
||||
server = Server(user_id=current_user.id, name=request.form['name'])
|
||||
try:
|
||||
db.session.add(server)
|
||||
db.session.commit()
|
||||
success = True
|
||||
except Exception as e:
|
||||
errormsg = e.message
|
||||
else:
|
||||
errormsg = gettext('No server name was specified')
|
||||
|
||||
if success:
|
||||
data['id'] = server.id
|
||||
data['name'] = server.name
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form,
|
||||
data=data)
|
||||
|
||||
@blueprint.route('/delete/', methods=['POST'])
|
||||
@login_required
|
||||
def delete():
|
||||
"""Delete a server node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if server is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server could not be found.')
|
||||
else:
|
||||
try:
|
||||
db.session.delete(server)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
@blueprint.route('/rename/', methods=['POST'])
|
||||
@login_required
|
||||
def rename():
|
||||
"""Rename a server node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if server is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server could not be found.')
|
||||
else:
|
||||
try:
|
||||
server.name = request.form['name']
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2015, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""Integration hooks for servers."""
|
||||
|
||||
from flask import render_template, url_for
|
||||
from flask.ext.babel import gettext
|
||||
from flask.ext.security import current_user
|
||||
|
||||
from pgadmin.settings.settings_model import db, Server
|
||||
from . import NODE_TYPE
|
||||
|
||||
def get_nodes(server_group):
|
||||
"""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)
|
||||
|
||||
# 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():
|
||||
"""Return a (set) of dicts of standard menu items (create/drop/rename), with
|
||||
object type, action, priority and the function to call on click."""
|
||||
return [
|
||||
{'type': 'server', 'action': 'drop', 'priority': 50, 'function': 'drop_server'},
|
||||
{'type': 'server', 'action': 'rename', 'priority': 60, 'function': 'rename_server'}
|
||||
]
|
||||
|
||||
|
||||
def get_create_menu_items():
|
||||
"""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
|
||||
the function name (no parens) to call on click."""
|
||||
return [
|
||||
{'type': "['server-group', 'server']", 'name': 'create_server', 'label': gettext('Server...'), 'priority': 50, 'function': 'create_server'}
|
||||
]
|
||||
|
||||
|
||||
def get_context_menu_items():
|
||||
"""Return a (set) of dicts of content menu items with name, node type, label, priority and JS"""
|
||||
return [
|
||||
{'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);'}
|
||||
]
|
||||
|
||||
|
||||
def get_script_snippets():
|
||||
"""Return the script snippets needed to handle treeview node operations."""
|
||||
return render_template('servers/servers.js')
|
||||
|
||||
|
||||
def get_css_snippets():
|
||||
"""Return the CSS needed to display the treeview node image."""
|
||||
css = ".icon-server {\n"
|
||||
css += " background: url('%s') 0 0 no-repeat !important;\n" % \
|
||||
url_for('NODE-%s.static' % NODE_TYPE, filename='img/server.png')
|
||||
css += "}\n"
|
||||
|
||||
return css
|
||||
@@ -1,121 +0,0 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2015, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""Defines views for management of servers"""
|
||||
|
||||
from flask import Blueprint, request
|
||||
from flask.ext.babel import gettext
|
||||
from flask.ext.security import current_user, login_required
|
||||
|
||||
from . import NODE_TYPE, NODE_PATH
|
||||
from pgadmin.utils.ajax import make_json_response
|
||||
from pgadmin.settings.settings_model import db, Server
|
||||
import traceback
|
||||
|
||||
# Initialise the module
|
||||
blueprint = Blueprint("NODE-" + NODE_TYPE, __name__,
|
||||
static_folder='static',
|
||||
static_url_path='',
|
||||
template_folder='templates',
|
||||
url_prefix=NODE_PATH)
|
||||
|
||||
|
||||
@blueprint.route('/add/', methods=['POST'])
|
||||
@login_required
|
||||
def add():
|
||||
"""Add a server node to the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
data = {}
|
||||
|
||||
success = False
|
||||
errormsg = ''
|
||||
if request.form['name'] != '':
|
||||
server = Server(user_id=current_user.id, name=request.form['name'])
|
||||
try:
|
||||
db.session.add(server)
|
||||
db.session.commit()
|
||||
success = True
|
||||
except Exception as e:
|
||||
errormsg = e.message
|
||||
else:
|
||||
errormsg = gettext('No server name was specified')
|
||||
|
||||
if success:
|
||||
data['id'] = server.id
|
||||
data['name'] = server.name
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form,
|
||||
data=data)
|
||||
|
||||
@blueprint.route('/delete/', methods=['POST'])
|
||||
@login_required
|
||||
def delete():
|
||||
"""Delete a server node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if server is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server could not be found.')
|
||||
else:
|
||||
try:
|
||||
db.session.delete(server)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
@blueprint.route('/rename/', methods=['POST'])
|
||||
@login_required
|
||||
def rename():
|
||||
"""Rename a server node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = Server.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if server is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server could not be found.')
|
||||
else:
|
||||
try:
|
||||
server.name = request.form['name']
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
@@ -79,4 +79,4 @@ function rename_server_group(item) {
|
||||
},
|
||||
null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2015, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
"""Defines views for management of server groups"""
|
||||
|
||||
import traceback
|
||||
from flask import Blueprint, Response, current_app, request
|
||||
from flask.ext.babel import gettext
|
||||
from flask.ext.security import current_user, login_required
|
||||
|
||||
from . import NODE_TYPE, NODE_PATH, sub_nodes
|
||||
from pgadmin.utils.ajax import make_json_response
|
||||
from pgadmin.settings.settings_model import db, ServerGroup
|
||||
import config
|
||||
|
||||
# Initialise the module
|
||||
blueprint = Blueprint("NODE-" + NODE_TYPE, __name__, static_folder='static', static_url_path='', template_folder='templates', url_prefix=NODE_PATH)
|
||||
|
||||
@blueprint.route("/<server_group>")
|
||||
@login_required
|
||||
def get_nodes(server_group):
|
||||
"""Build a list of treeview nodes from the child nodes."""
|
||||
nodes = []
|
||||
for node in sub_nodes:
|
||||
if hasattr(node, 'hooks') and hasattr(node.hooks, 'get_nodes'):
|
||||
nodes.extend(node.hooks.get_nodes(server_group))
|
||||
return make_json_response(data=nodes)
|
||||
|
||||
|
||||
@blueprint.route('/add/', methods=['POST'])
|
||||
@login_required
|
||||
def add():
|
||||
"""Add a server group node to the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
data = { }
|
||||
|
||||
if request.form['name'] != '':
|
||||
servergroup = ServerGroup(user_id=current_user.id, name=request.form['name'])
|
||||
|
||||
try:
|
||||
db.session.add(servergroup)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server group name was specified')
|
||||
|
||||
if success == 1:
|
||||
data['id'] = servergroup.id
|
||||
data['name'] = servergroup.name
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form,
|
||||
data=data)
|
||||
|
||||
@blueprint.route('/delete/', methods=['POST'])
|
||||
@login_required
|
||||
def delete():
|
||||
"""Delete a server group node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if servergroup is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server group could not be found.')
|
||||
else:
|
||||
try:
|
||||
db.session.delete(servergroup)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server group was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
@blueprint.route('/rename/', methods=['POST'])
|
||||
@login_required
|
||||
def rename():
|
||||
"""Rename a server group node in the settings database"""
|
||||
success = 1
|
||||
errormsg = ''
|
||||
|
||||
if request.form['id'] != '':
|
||||
# There can be only one record at most
|
||||
servergroup = ServerGroup.query.filter_by(user_id=current_user.id, id=int(request.form['id'])).first()
|
||||
|
||||
if servergroup is None:
|
||||
success = 0
|
||||
errormsg = gettext('The specified server group could not be found.')
|
||||
else:
|
||||
try:
|
||||
servergroup.name = request.form['name']
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
success = 0
|
||||
errormsg = e.message
|
||||
|
||||
else:
|
||||
success = 0
|
||||
errormsg = gettext('No server group was specified.')
|
||||
|
||||
return make_json_response(success=success,
|
||||
errormsg=errormsg,
|
||||
info=traceback.format_exc(),
|
||||
result=request.form)
|
||||
|
||||
Reference in New Issue
Block a user