mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Add support for dropping multiple objects at once from the collection Properties panel. Fixes #1513
This commit is contained in:
committed by
Dave Page
parent
3359a0de7a
commit
f17979141c
@@ -184,7 +184,7 @@ class ResourceGroupView(NodeView):
|
||||
operations = dict({
|
||||
'obj': [
|
||||
{'get': 'properties', 'delete': 'delete', 'put': 'update'},
|
||||
{'get': 'list', 'post': 'create'}
|
||||
{'get': 'list', 'post': 'create', 'delete': 'delete'}
|
||||
],
|
||||
'nodes': [{'get': 'node'}, {'get': 'nodes'}],
|
||||
'sql': [{'get': 'sql'}],
|
||||
@@ -497,7 +497,7 @@ class ResourceGroupView(NodeView):
|
||||
return internal_server_error(errormsg=str(e))
|
||||
|
||||
@check_precondition
|
||||
def delete(self, gid, sid, rg_id):
|
||||
def delete(self, gid, sid, rg_id=None):
|
||||
"""
|
||||
This function will drop the resource group object
|
||||
|
||||
@@ -506,44 +506,48 @@ class ResourceGroupView(NodeView):
|
||||
sid: Server ID
|
||||
rg_id: Resource Group ID
|
||||
"""
|
||||
if rg_id is None:
|
||||
data = request.form if request.form else json.loads(
|
||||
request.data, encoding='utf-8'
|
||||
)
|
||||
else:
|
||||
data = {'ids': [rg_id]}
|
||||
|
||||
try:
|
||||
# Get name for resource group from rg_id
|
||||
sql = render_template(
|
||||
"/".join([self.template_path, 'delete.sql']),
|
||||
rgid=rg_id, conn=self.conn
|
||||
)
|
||||
status, rgname = self.conn.execute_scalar(sql)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=rgname)
|
||||
|
||||
if rgname is None:
|
||||
return make_json_response(
|
||||
success=0,
|
||||
errormsg=gettext(
|
||||
'Error: Object not found.'
|
||||
),
|
||||
info=gettext(
|
||||
'The specified resource group could not be found.\n'
|
||||
)
|
||||
for rg_id in data['ids']:
|
||||
# Get name for resource group from rg_id
|
||||
sql = render_template(
|
||||
"/".join([self.template_path, 'delete.sql']),
|
||||
rgid=rg_id, conn=self.conn
|
||||
)
|
||||
status, rgname = self.conn.execute_scalar(sql)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=rgname)
|
||||
|
||||
# drop resource group
|
||||
sql = render_template(
|
||||
"/".join([self.template_path, 'delete.sql']),
|
||||
rgname=rgname, conn=self.conn
|
||||
)
|
||||
status, res = self.conn.execute_scalar(sql)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=res)
|
||||
if rgname is None:
|
||||
return make_json_response(
|
||||
success=0,
|
||||
errormsg=gettext(
|
||||
'Error: Object not found.'
|
||||
),
|
||||
info=gettext(
|
||||
'The specified resource group '
|
||||
'could not be found.\n'
|
||||
)
|
||||
)
|
||||
|
||||
# drop resource group
|
||||
sql = render_template(
|
||||
"/".join([self.template_path, 'delete.sql']),
|
||||
rgname=rgname, conn=self.conn
|
||||
)
|
||||
status, res = self.conn.execute_scalar(sql)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=res)
|
||||
|
||||
return make_json_response(
|
||||
success=1,
|
||||
info=gettext("Resource Group dropped"),
|
||||
data={
|
||||
'id': rg_id,
|
||||
'sid': sid,
|
||||
'gid': gid,
|
||||
}
|
||||
info=gettext("Resource Group dropped")
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
|
||||
@@ -11,6 +11,8 @@ define('pgadmin.node.resource_group', [
|
||||
label: gettext('Resource Groups'),
|
||||
type: 'coll-resource_group',
|
||||
columns: ['name', 'cpu_rate_limit', 'dirty_rate_limit'],
|
||||
canDrop: true,
|
||||
canDropCascade: false,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -63,7 +65,9 @@ define('pgadmin.node.resource_group', [
|
||||
|
||||
// Defining model for resource group node
|
||||
model: pgBrowser.Node.Model.extend({
|
||||
idAttribute: 'oid',
|
||||
defaults: {
|
||||
oid: undefined,
|
||||
name: undefined,
|
||||
cpu_rate_limit: 0.0,
|
||||
dirty_rate_limit: 0.0,
|
||||
@@ -71,6 +75,9 @@ define('pgadmin.node.resource_group', [
|
||||
|
||||
// Defining schema for the resource group node
|
||||
schema: [{
|
||||
id: 'oid', label: gettext('OID'), type: 'text',
|
||||
editable: false, disabled: true, mode:['properties'],
|
||||
},{
|
||||
id: 'name', label: gettext('Name'), cell: 'string',
|
||||
type: 'text',
|
||||
},{
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
import uuid
|
||||
import json
|
||||
|
||||
from pgadmin.utils import server_utils as server_utils
|
||||
from pgadmin.utils.route import BaseTestGenerator
|
||||
from regression import parent_node_dict
|
||||
from regression.python_test_utils import test_utils as utils
|
||||
from . import utils as resource_groups_utils
|
||||
|
||||
|
||||
class ResourceGroupsDeleteTestCase(BaseTestGenerator):
|
||||
"""This class will delete the resource groups"""
|
||||
scenarios = [
|
||||
('Delete multiple resource groups',
|
||||
dict(url='/browser/resource_group/obj/'))
|
||||
]
|
||||
|
||||
def setUp(self):
|
||||
self.server_id = parent_node_dict["server"][-1]["server_id"]
|
||||
server_response = server_utils.connect_server(self, self.server_id)
|
||||
if not server_response["info"] == "Server connected.":
|
||||
raise Exception("Could not connect to server to add resource "
|
||||
"groups.")
|
||||
if "type" in server_response["data"]:
|
||||
if server_response["data"]["type"] == "pg":
|
||||
message = "Resource groups are not supported by PG."
|
||||
self.skipTest(message)
|
||||
else:
|
||||
if server_response["data"]["version"] < 90400:
|
||||
message = "Resource groups are not supported by PPAS " \
|
||||
"9.3 and below."
|
||||
self.skipTest(message)
|
||||
self.resource_groups = ["test_resource_group_delete%s" %
|
||||
str(uuid.uuid4())[1:8],
|
||||
"test_resource_group_delete%s" %
|
||||
str(uuid.uuid4())[1:8]]
|
||||
self.resource_group_ids = [
|
||||
resource_groups_utils.create_resource_groups(
|
||||
self.server, self.resource_groups[0]),
|
||||
resource_groups_utils.create_resource_groups(
|
||||
self.server, self.resource_groups[1])]
|
||||
|
||||
def runTest(self):
|
||||
"""This function will delete resource groups."""
|
||||
resource_grp_response = resource_groups_utils.verify_resource_group(
|
||||
self.server, self.resource_groups[0])
|
||||
if not resource_grp_response:
|
||||
raise Exception("Could not find the resource group to fetch.")
|
||||
|
||||
resource_grp_response = resource_groups_utils.verify_resource_group(
|
||||
self.server, self.resource_groups[1])
|
||||
if not resource_grp_response:
|
||||
raise Exception("Could not find the resource group to fetch.")
|
||||
|
||||
data = {'ids': self.resource_group_ids}
|
||||
response = self.tester.delete(
|
||||
"{0}{1}/{2}/".format(self.url,
|
||||
utils.SERVER_GROUP,
|
||||
self.server_id),
|
||||
follow_redirects=True,
|
||||
data=json.dumps(data),
|
||||
content_type='html/json'
|
||||
)
|
||||
self.assertEquals(response.status_code, 200)
|
||||
|
||||
def tearDown(self):
|
||||
"""This function delete the resource group from the database."""
|
||||
connection = utils.get_db_connection(self.server['db'],
|
||||
self.server['username'],
|
||||
self.server['db_password'],
|
||||
self.server['host'],
|
||||
self.server['port'],
|
||||
self.server['sslmode'])
|
||||
resource_groups_utils.delete_resource_group(connection,
|
||||
self.resource_group)
|
||||
Reference in New Issue
Block a user