diff --git a/web/pgadmin/static/scss/_alert.scss b/web/pgadmin/static/scss/_alert.scss index e8676b8c..f5082c37 100644 --- a/web/pgadmin/static/scss/_alert.scss +++ b/web/pgadmin/static/scss/_alert.scss @@ -21,7 +21,8 @@ display: inline-block; } -.alert.alert-info { +.alert.alert-info, +.alert.alert-danger { padding: 0.5rem; } diff --git a/web/pgadmin/tools/grant_wizard/__init__.py b/web/pgadmin/tools/grant_wizard/__init__.py index 6ef374b1..6ca37204 100644 --- a/web/pgadmin/tools/grant_wizard/__init__.py +++ b/web/pgadmin/tools/grant_wizard/__init__.py @@ -191,6 +191,8 @@ def properties(sid, did, node_id, node_type): server_prop = server_info res_data = [] + failed_objects = [] + msg = None manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection(did=did) @@ -231,11 +233,11 @@ def properties(sid, did, node_id, node_type): node_id=node_id, type='function') status, res = conn.execute_dict(SQL) - if not status: - return internal_server_error(errormsg=res) - - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('function') + else: + res_data.extend(res['rows']) # Fetch procedures only if server type is EPAS or PG >= 11 if (len(server_prop) > 0 and @@ -250,9 +252,10 @@ def properties(sid, did, node_id, node_type): status, res = conn.execute_dict(SQL) if not status: - return internal_server_error(errormsg=res) - - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('procedure') + else: + res_data.extend(res['rows']) # Fetch trigger functions if ntype in ['schema', 'trigger_function']: @@ -262,9 +265,10 @@ def properties(sid, did, node_id, node_type): status, res = conn.execute_dict(SQL) if not status: - return internal_server_error(errormsg=res) - - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('trigger function') + else: + res_data.extend(res['rows']) # Fetch Sequences against schema if ntype in ['schema', 'sequence']: @@ -274,8 +278,10 @@ def properties(sid, did, node_id, node_type): status, res = conn.execute_dict(SQL) if not status: - return internal_server_error(errormsg=res) - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('sequence') + else: + res_data.extend(res['rows']) # Fetch Tables against schema if ntype in ['schema', 'table']: @@ -285,9 +291,10 @@ def properties(sid, did, node_id, node_type): status, res = conn.execute_dict(SQL) if not status: - return internal_server_error(errormsg=res) - - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('table') + else: + res_data.extend(res['rows']) # Fetch Views against schema if ntype in ['schema', 'view']: @@ -297,9 +304,10 @@ def properties(sid, did, node_id, node_type): status, res = conn.execute_dict(SQL) if not status: - return internal_server_error(errormsg=res) - - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('view') + else: + res_data.extend(res['rows']) # Fetch Materialzed Views against schema if ntype in ['schema', 'mview']: @@ -309,12 +317,19 @@ def properties(sid, did, node_id, node_type): status, res = conn.execute_dict(SQL) if not status: - return internal_server_error(errormsg=res) - - res_data.extend(res['rows']) + current_app.logger.error(res) + failed_objects.append('materialized view') + else: + res_data.extend(res['rows']) + + if len(failed_objects) > 0: + msg = gettext('Unable to fetch the {} objects'.format( + ",".join(failed_objects)) + ) - return ajax_response( - response=res_data, + return make_json_response( + result=res_data, + info=msg, status=200 ) diff --git a/web/pgadmin/tools/grant_wizard/static/js/grant_wizard.js b/web/pgadmin/tools/grant_wizard/static/js/grant_wizard.js index 85d78da2..4dd904b4 100644 --- a/web/pgadmin/tools/grant_wizard/static/js/grant_wizard.js +++ b/web/pgadmin/tools/grant_wizard/static/js/grant_wizard.js @@ -608,9 +608,28 @@ define([ $('.wizard-progress-bar p').show(); coll.fetch({ - success: function() { + success: function(c, xhr) { $('.wizard-progress-bar p').html(''); $('.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, }, this);