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
@@ -123,9 +123,9 @@ class ExtensionView(PGChildNodeView):
|
||||
operations = dict({
|
||||
'obj': [
|
||||
{'get': 'properties', 'delete': 'delete', 'put': 'update'},
|
||||
{'get': 'list', 'post': 'create'}
|
||||
{'get': 'list', 'post': 'create', 'delete': 'delete'}
|
||||
],
|
||||
'delete': [{'delete': 'delete'}],
|
||||
'delete': [{'delete': 'delete'}, {'delete': 'delete'}],
|
||||
'nodes': [{'get': 'node'}, {'get': 'nodes'}],
|
||||
'sql': [{'get': 'sql'}],
|
||||
'msql': [{'get': 'msql'}, {'get': 'msql'}],
|
||||
@@ -327,49 +327,53 @@ class ExtensionView(PGChildNodeView):
|
||||
return internal_server_error(errormsg=str(e))
|
||||
|
||||
@check_precondition
|
||||
def delete(self, gid, sid, did, eid):
|
||||
def delete(self, gid, sid, did, eid=None):
|
||||
"""
|
||||
This function will drop/drop cascade a extension object
|
||||
"""
|
||||
|
||||
if eid is None:
|
||||
data = request.form if request.form else json.loads(
|
||||
request.data, encoding='utf-8'
|
||||
)
|
||||
else:
|
||||
data = {'ids': [eid]}
|
||||
|
||||
cascade = True if self.cmd == 'delete' else False
|
||||
|
||||
try:
|
||||
# check if extension with eid exists
|
||||
SQL = render_template("/".join(
|
||||
[self.template_path, 'delete.sql']), eid=eid)
|
||||
status, name = self.conn.execute_scalar(SQL)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=name)
|
||||
for eid in data['ids']:
|
||||
# check if extension with eid exists
|
||||
SQL = render_template("/".join(
|
||||
[self.template_path, 'delete.sql']), eid=eid)
|
||||
status, name = self.conn.execute_scalar(SQL)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=name)
|
||||
|
||||
if name is None:
|
||||
return make_json_response(
|
||||
status=410,
|
||||
success=0,
|
||||
errormsg=gettext(
|
||||
'Error: Object not found.'
|
||||
),
|
||||
info=gettext(
|
||||
'The specified extension could not be found.\n'
|
||||
if name is None:
|
||||
return make_json_response(
|
||||
status=410,
|
||||
success=0,
|
||||
errormsg=gettext(
|
||||
'Error: Object not found.'
|
||||
),
|
||||
info=gettext(
|
||||
'The specified extension could not be found.\n'
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
# drop extension
|
||||
SQL = render_template("/".join(
|
||||
[self.template_path, 'delete.sql']
|
||||
), name=name, cascade=cascade)
|
||||
status, res = self.conn.execute_scalar(SQL)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=res)
|
||||
# drop extension
|
||||
SQL = render_template("/".join(
|
||||
[self.template_path, 'delete.sql']
|
||||
), name=name, cascade=cascade)
|
||||
status, res = self.conn.execute_scalar(SQL)
|
||||
if not status:
|
||||
return internal_server_error(errormsg=res)
|
||||
|
||||
return make_json_response(
|
||||
success=1,
|
||||
info=gettext("Extension dropped"),
|
||||
data={
|
||||
'id': did,
|
||||
'sid': sid,
|
||||
'gid': gid,
|
||||
}
|
||||
info=gettext("Extension dropped")
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
return internal_server_error(errormsg=str(e))
|
||||
|
||||
|
||||
@@ -84,6 +84,7 @@ define('pgadmin.node.extension', [
|
||||
* of the model in schema.
|
||||
*/
|
||||
model: pgAdmin.Browser.Node.Model.extend({
|
||||
idAttribute: 'eid',
|
||||
schema: [
|
||||
{
|
||||
id: 'name', label: gettext('Name'), first_empty: true,
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
from __future__ import print_function
|
||||
import json
|
||||
|
||||
from pgadmin.browser.server_groups.servers.databases.tests import \
|
||||
utils as database_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 extension_utils
|
||||
|
||||
|
||||
class ExtensionsDeleteMultipleTestCase(BaseTestGenerator):
|
||||
skip_on_database = ['gpdb']
|
||||
scenarios = [
|
||||
# Fetching default URL for extension node.
|
||||
('Check Extension Node', dict(url='/browser/extension/obj/'))
|
||||
]
|
||||
|
||||
def setUp(self):
|
||||
""" This function will create extensions."""
|
||||
super(ExtensionsDeleteMultipleTestCase, self).setUp()
|
||||
self.schema_data = parent_node_dict['schema'][-1]
|
||||
self.server_id = self.schema_data['server_id']
|
||||
self.db_id = self.schema_data['db_id']
|
||||
self.schema_name = self.schema_data['schema_name']
|
||||
|
||||
self.extension_names = ["dblink", "hstore"]
|
||||
self.db_name = parent_node_dict["database"][-1]["db_name"]
|
||||
self.extension_ids = []
|
||||
self.extension_ids.append(extension_utils.create_extension(
|
||||
self.server, self.db_name, self.extension_names[0],
|
||||
self.schema_name))
|
||||
self.extension_ids.append(extension_utils.create_extension(
|
||||
self.server, self.db_name, self.extension_names[1],
|
||||
self.schema_name))
|
||||
|
||||
def runTest(self):
|
||||
""" This function will delete extensions added test database. """
|
||||
db_con = database_utils.connect_database(self,
|
||||
utils.SERVER_GROUP,
|
||||
self.server_id,
|
||||
self.db_id)
|
||||
if not db_con["info"] == "Database connected.":
|
||||
raise Exception("Could not connect to database.")
|
||||
response = extension_utils.verify_extension(self.server, self.db_name,
|
||||
self.extension_names[0])
|
||||
if not response:
|
||||
raise Exception("Could not find extension.")
|
||||
response = extension_utils.verify_extension(self.server, self.db_name,
|
||||
self.extension_names[1])
|
||||
if not response:
|
||||
raise Exception("Could not find extension.")
|
||||
data = {'ids': self.extension_ids}
|
||||
delete_response = self.tester.delete(
|
||||
self.url + str(utils.SERVER_GROUP) + '/' +
|
||||
str(self.server_id) + '/' + str(self.db_id),
|
||||
follow_redirects=True,
|
||||
data=json.dumps(data),
|
||||
content_type='html/json'
|
||||
)
|
||||
self.assertEquals(delete_response.status_code, 200)
|
||||
|
||||
def tearDown(self):
|
||||
"""This function disconnect the test database. """
|
||||
database_utils.disconnect_database(self, self.server_id, self.db_id)
|
||||
Reference in New Issue
Block a user