mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Handle backend errors properly and display them correctly on GUI for Grant Wizard
This commit is contained in:
parent
0e489df7b0
commit
317a04eafc
@ -21,7 +21,8 @@
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert.alert-info {
|
.alert.alert-info,
|
||||||
|
.alert.alert-danger {
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,6 +191,7 @@ def properties(sid, did, node_id, node_type):
|
|||||||
server_prop = server_info
|
server_prop = server_info
|
||||||
|
|
||||||
res_data = []
|
res_data = []
|
||||||
|
failed_objects = []
|
||||||
manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
|
manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
|
||||||
conn = manager.connection(did=did)
|
conn = manager.connection(did=did)
|
||||||
|
|
||||||
@ -231,11 +232,11 @@ def properties(sid, did, node_id, node_type):
|
|||||||
node_id=node_id, type='function')
|
node_id=node_id, type='function')
|
||||||
|
|
||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
|
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
|
failed_objects.append('function')
|
||||||
res_data.extend(res['rows'])
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
# Fetch procedures only if server type is EPAS or PG >= 11
|
# Fetch procedures only if server type is EPAS or PG >= 11
|
||||||
if (len(server_prop) > 0 and
|
if (len(server_prop) > 0 and
|
||||||
@ -250,9 +251,10 @@ def properties(sid, did, node_id, node_type):
|
|||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
|
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
|
failed_objects.append('procedure')
|
||||||
res_data.extend(res['rows'])
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
# Fetch trigger functions
|
# Fetch trigger functions
|
||||||
if ntype in ['schema', 'trigger_function']:
|
if ntype in ['schema', 'trigger_function']:
|
||||||
@ -262,9 +264,10 @@ def properties(sid, did, node_id, node_type):
|
|||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
|
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
|
failed_objects.append('trigger function')
|
||||||
res_data.extend(res['rows'])
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
# Fetch Sequences against schema
|
# Fetch Sequences against schema
|
||||||
if ntype in ['schema', 'sequence']:
|
if ntype in ['schema', 'sequence']:
|
||||||
@ -274,8 +277,10 @@ def properties(sid, did, node_id, node_type):
|
|||||||
|
|
||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
res_data.extend(res['rows'])
|
failed_objects.append('sequence')
|
||||||
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
# Fetch Tables against schema
|
# Fetch Tables against schema
|
||||||
if ntype in ['schema', 'table']:
|
if ntype in ['schema', 'table']:
|
||||||
@ -285,9 +290,10 @@ def properties(sid, did, node_id, node_type):
|
|||||||
|
|
||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
|
failed_objects.append('table')
|
||||||
res_data.extend(res['rows'])
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
# Fetch Views against schema
|
# Fetch Views against schema
|
||||||
if ntype in ['schema', 'view']:
|
if ntype in ['schema', 'view']:
|
||||||
@ -297,9 +303,10 @@ def properties(sid, did, node_id, node_type):
|
|||||||
|
|
||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
|
failed_objects.append('view')
|
||||||
res_data.extend(res['rows'])
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
# Fetch Materialzed Views against schema
|
# Fetch Materialzed Views against schema
|
||||||
if ntype in ['schema', 'mview']:
|
if ntype in ['schema', 'mview']:
|
||||||
@ -309,12 +316,20 @@ def properties(sid, did, node_id, node_type):
|
|||||||
|
|
||||||
status, res = conn.execute_dict(SQL)
|
status, res = conn.execute_dict(SQL)
|
||||||
if not status:
|
if not status:
|
||||||
return internal_server_error(errormsg=res)
|
current_app.logger.error(res)
|
||||||
|
failed_objects.append('materialized view')
|
||||||
|
else:
|
||||||
|
res_data.extend(res['rows'])
|
||||||
|
|
||||||
res_data.extend(res['rows'])
|
msg = None
|
||||||
|
if len(failed_objects) > 0:
|
||||||
|
msg = gettext('Unable to fetch the {} objects'.format(
|
||||||
|
", ".join(failed_objects))
|
||||||
|
)
|
||||||
|
|
||||||
return ajax_response(
|
return make_json_response(
|
||||||
response=res_data,
|
result=res_data,
|
||||||
|
info=msg,
|
||||||
status=200
|
status=200
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -608,9 +608,28 @@ define([
|
|||||||
$('.wizard-progress-bar p').show();
|
$('.wizard-progress-bar p').show();
|
||||||
|
|
||||||
coll.fetch({
|
coll.fetch({
|
||||||
success: function() {
|
success: function(c, xhr) {
|
||||||
$('.wizard-progress-bar p').html('');
|
$('.wizard-progress-bar p').html('');
|
||||||
$('.wizard-progress-bar').hide();
|
$('.wizard-progress-bar').hide();
|
||||||
|
c.set(xhr.result, {parse: true});
|
||||||
|
// If some objects failed while fetching then we will notify the user
|
||||||
|
if (xhr && xhr.info && xhr.info !== '') {
|
||||||
|
$('.pg-prop-status-bar .alert-text').html(xhr.info);
|
||||||
|
$('.pg-prop-status-bar').css('visibility', 'visible');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(m, xhr) {
|
||||||
|
// If the main request fails as whole then
|
||||||
|
let msg;
|
||||||
|
if (xhr && xhr.responseJSON && xhr.responseJSON.errormsg) {
|
||||||
|
msg = xhr.responseJSON.errormsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!msg) {
|
||||||
|
msg = gettext('Unable to fetch the database objects due to an error');
|
||||||
|
}
|
||||||
|
$('.wizard-progress-bar p').removeClass('alert-info').addClass('alert-danger');
|
||||||
|
$('.wizard-progress-bar p').text(msg);
|
||||||
},
|
},
|
||||||
reset: true,
|
reset: true,
|
||||||
}, this);
|
}, this);
|
||||||
|
Loading…
Reference in New Issue
Block a user