Add support for dropping multiple objects at once from the collection Properties panel. Fixes #1513

This commit is contained in:
Khushboo Vashi
2018-10-31 10:30:36 +00:00
committed by Dave Page
parent 3359a0de7a
commit f17979141c
124 changed files with 5969 additions and 1315 deletions

View File

@@ -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:

View File

@@ -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',
},{

View File

@@ -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)