diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 020ec593..872a6e4f 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -286,6 +286,8 @@ class App(QtCore.QObject): "cncjob_tooldia": 0.016, "cncjob_prepend": "", "cncjob_append": "", + "background_timeout": 300000, #default value is 5 minutes + "verbose_error_level": 0, # shell verbosity 0 = default(python trace only for unknown errors), 1 = show trace(show trace allways), 2 = (For the future). # Persistence "last_folder": None, @@ -679,7 +681,6 @@ class App(QtCore.QObject): """ this exception is deffined here, to be able catch it if we sucessfully handle all errors from shell command """ - pass def raise_tcl_unknown_error(self, unknownException): @@ -704,14 +705,24 @@ class App(QtCore.QObject): """ if isinstance(error, Exception): + exc_type, exc_value, exc_traceback = error_info - trc=traceback.format_list(traceback.extract_tb(exc_traceback)) - trc_formated=[] - for a in reversed(trc): - trc_formated.append(a.replace(" ", " > ").replace("\n","")) - text="%s\nPython traceback: %s\n%s" % (exc_value, - exc_type, - "\n".join(trc_formated)) + if not isinstance(error, self.TclErrorException): + show_trace = 1 + else: + show_trace = int(self.defaults['verbose_error_level']) + + if show_trace > 0: + trc=traceback.format_list(traceback.extract_tb(exc_traceback)) + trc_formated=[] + for a in reversed(trc): + trc_formated.append(a.replace(" ", " > ").replace("\n","")) + text="%s\nPython traceback: %s\n%s" % (exc_value, + exc_type, + "\n".join(trc_formated)) + + else: + text="%s" % error else: text=error diff --git a/tclCommands/TclCommand.py b/tclCommands/TclCommand.py index bc7cd2c2..b93ec752 100644 --- a/tclCommands/TclCommand.py +++ b/tclCommands/TclCommand.py @@ -291,9 +291,6 @@ class TclCommandSignaled(TclCommand): it handles all neccessary stuff about blocking and passing exeptions """ - # default timeout for operation is 300000 sec, but it can be much more - default_timeout = 300000 - output = None def execute_call(self, args, unnamed_args): @@ -320,7 +317,7 @@ class TclCommandSignaled(TclCommand): """ @contextmanager - def wait_signal(signal, timeout=10000): + def wait_signal(signal, timeout=300000): """Block loop until signal emitted, or timeout (ms) elapses.""" loop = QtCore.QEventLoop() @@ -357,10 +354,10 @@ class TclCommandSignaled(TclCommand): # Restore exception management sys.excepthook = oeh if ex: - self.raise_tcl_error(str(ex[0])) + raise ex[0] if status['timed_out']: - self.app.raise_tcl_unknown_error('Operation timed out!') + self.app.raise_tcl_unknown_error("Operation timed outed! Consider increasing option '-timeout ' for command or 'set_sys background_timeout '.") try: self.log.debug("TCL command '%s' executed." % str(self.__class__)) @@ -370,7 +367,7 @@ class TclCommandSignaled(TclCommand): passed_timeout=args['timeout'] del args['timeout'] else: - passed_timeout=self.default_timeout + passed_timeout= self.app.defaults['background_timeout'] # set detail for processing, it will be there until next open or close self.app.shell.open_proccessing(self.get_current_command()) @@ -378,8 +375,6 @@ class TclCommandSignaled(TclCommand): def handle_finished(obj): self.app.shell_command_finished.disconnect(handle_finished) if self.error is not None: - self.log.error("TCL command '%s' failed." % str(self)) - self.app.display_tcl_error(self.error, self.error_info) self.raise_tcl_unknown_error(self.error) self.app.shell_command_finished.connect(handle_finished)