diff --git a/docs/en_US/release_notes_4_21.rst b/docs/en_US/release_notes_4_21.rst index fd57078c5..d54aabd00 100644 --- a/docs/en_US/release_notes_4_21.rst +++ b/docs/en_US/release_notes_4_21.rst @@ -35,6 +35,7 @@ Bug fixes | `Issue #4445 `_ - Ensure all object names in the title line of the reverse-engineered SQL are not quoted. | `Issue #4512 `_ - Fixed calendar opening issue on the exception tab inside the schedules tab of pgAgent. | `Issue #4856 `_ - Enable the save button by default when a query tool is opened with CREATE or other scripts. +| `Issue #4858 `_ - Fixed python exception error when user tries to download the CSV and there is a connection issue. | `Issue #4864 `_ - Make the configuration window in runtime to auto-resize. | `Issue #4873 `_ - Fixed an issue when changing the comments of the procedure with arguments gives error in case of overloading. | `Issue #4969 `_ - Fixed an issue where changing the values of columns with JSONB or JSON types to NULL. diff --git a/web/pgadmin/static/js/sqleditor/query_tool_http_error_handler.js b/web/pgadmin/static/js/sqleditor/query_tool_http_error_handler.js index 97575c1ea..651ff6e91 100644 --- a/web/pgadmin/static/js/sqleditor/query_tool_http_error_handler.js +++ b/web/pgadmin/static/js/sqleditor/query_tool_http_error_handler.js @@ -63,6 +63,8 @@ export function handleQueryToolAjaxError( if(exception.status === 503 && exception.responseJSON.info !== undefined && exception.responseJSON.info == 'CONNECTION_LOST') { + // We will display re-connect dialog, no need to display error message again + msg = null; setTimeout(function() { if (stateToSave) { handler.saveState(stateToSave, stateParameters); diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py index 386a655e4..6d53632a1 100644 --- a/web/pgadmin/tools/sqleditor/__init__.py +++ b/web/pgadmin/tools/sqleditor/__init__.py @@ -1370,8 +1370,12 @@ def start_query_download_tool(trans_id): ] = "attachment;filename={0}".format(filename) return r + except (ConnectionLost, SSHTunnelConnectionLost): + raise except Exception as e: - err_msg = gettext("Error: {0}").format(e.strerror) + current_app.logger.error(e) + err_msg = "Error: {0}".format( + e.strerror if hasattr(e, 'strerror') else str(e)) return internal_server_error(errormsg=err_msg) else: return internal_server_error( diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js index 7fda62593..02bf6390d 100644 --- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js +++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js @@ -1315,7 +1315,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, null, [], false ); - self.update_msg_history(false, msg); + if (msg) + self.update_msg_history(false, msg); }); }, @@ -2169,8 +2170,12 @@ define('tools.querytool', [ if (args.indexOf('connect') == -1) { args.push('connect'); } + if (fn in self) { + self[fn].apply(self, args); + } else { + console.warn('The callback is not valid for this context'); + } - self[fn].apply(self, args); } }, function() { self.saveState(); @@ -2205,9 +2210,10 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, xhr, null, [], false ); - alertify.dlgGetServerPass( - gettext('Connect to Server'), msg - ); + if (msg) + alertify.dlgGetServerPass( + gettext('Connect to Server'), msg + ); }); }, /* This function is used to create instance of SQLEditorView, @@ -2310,10 +2316,10 @@ define('tools.querytool', [ msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, jqx, null, [], false ); - - pgBrowser.report_error( - gettext('Error fetching SQL for script: %s.', msg) - ); + if (msg) + pgBrowser.report_error( + gettext('Error fetching SQL for script: %s.', msg) + ); }); } } @@ -2494,7 +2500,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_execute_view_data_query', [], true ); - self.update_msg_history(false, msg); + if (msg) + self.update_msg_history(false, msg); }); }, @@ -3247,7 +3254,8 @@ define('tools.querytool', [ // Enable query tool buttons and cancel button only if query tool if(self.is_query_tool) self.disable_tool_buttons(false); - self.update_msg_history(false, msg); + if (msg) + self.update_msg_history(false, msg); }); }, @@ -3405,7 +3413,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_select_file_handler', stateParams, false ); - alertify.error(msg); + if (msg) + alertify.error(msg); // hide cursor $busy_icon_div.removeClass('show_progress'); }); @@ -3456,7 +3465,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_save_file_handler', stateParams, false ); - alertify.error(msg); + if (msg) + alertify.error(msg); }); }, @@ -3585,7 +3595,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_include_filter', [], true ); - alertify.alert(gettext('Filter By Selection Error'), msg); + if (msg) + alertify.alert(gettext('Filter By Selection Error'), msg); }); }, @@ -3644,7 +3655,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_exclude_filter', [], true ); - alertify.alert(gettext('Filter Exclude Selection Error'), msg); + if (msg) + alertify.alert(gettext('Filter Exclude Selection Error'), msg); }); }, @@ -3682,7 +3694,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_remove_filter', [], true ); - alertify.alert(gettext('Remove Filter Error'), msg); + if (msg) + alertify.alert(gettext('Remove Filter Error'), msg); }); }, @@ -3813,7 +3826,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_set_limit', [], true ); - alertify.alert(gettext('Change limit Error'), msg); + if (msg) + alertify.alert(gettext('Change limit Error'), msg); }); }, @@ -3958,7 +3972,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_cancel_query', [], false ); - alertify.alert(gettext('Cancel Query Error'), msg); + if (msg) + alertify.alert(gettext('Cancel Query Error'), msg); }); }, @@ -4022,7 +4037,6 @@ define('tools.querytool', [ self.trigger('pgadmin-sqleditor:loading-icon:hide'); }).fail(function(err) { let msg = ''; - // Enable the execute button $('#btn-flash').prop('disabled', false); $('#btn-download').prop('disabled', false); @@ -4034,10 +4048,12 @@ define('tools.querytool', [ msg = gettext('CSV Download cancelled.'); } else { msg = httpErrorHandler.handleQueryToolAjaxError( - pgAdmin, self, err, gettext('Download CSV'), [], true + pgAdmin, self, err, 'trigger_csv_download', [], true ); } - alertify.alert(gettext('Download CSV error'), msg); + // Check if error message is present + if (msg) + alertify.alert(gettext('Download CSV error'), msg); }); }, @@ -4078,7 +4094,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_auto_rollback', [], true ); - alertify.alert(gettext('Auto Rollback Error'), msg); + if (msg) + alertify.alert(gettext('Auto Rollback Error'), msg); }); }, @@ -4110,7 +4127,8 @@ define('tools.querytool', [ let msg = httpErrorHandler.handleQueryToolAjaxError( pgAdmin, self, e, '_auto_commit', [], true ); - alertify.alert(gettext('Auto Commit Error'), msg); + if (msg) + alertify.alert(gettext('Auto Commit Error'), msg); }); },