Add FatalError() method to ConfigTreeNode.
authorEdouard Tisserant
Wed, 13 Nov 2019 11:21:04 +0100
changeset 2640 1b4b335e19ea
parent 2639 62b5f7b909a9
child 2643 b98d9e08231f
child 2647 990004083eb8
Add FatalError() method to ConfigTreeNode.
Extensions can report error addressed to user, without a traceback.
ConfigTreeNode.py
ProjectController.py
--- a/ConfigTreeNode.py	Thu Oct 24 11:20:04 2019 +0200
+++ b/ConfigTreeNode.py	Wed Nov 13 11:21:04 2019 +0100
@@ -670,3 +670,14 @@
                     msg = _("Could not add child \"{a1}\", type {a2} :\n{a3}\n").format(a1=pname, a2=ptype, a3=text(exc))
                     self.GetCTRoot().logger.write_error(msg)
                     self.GetCTRoot().logger.write_error(traceback.format_exc())
+
+
+    def FatalError(self, message):
+        """ Raise an exception that will trigger error message intended to 
+            the user, but without backtrace since it is not a software error """
+
+        raise UserAddressedException(message)
+
+class UserAddressedException(Exception):
+    pass
+
--- a/ProjectController.py	Thu Oct 24 11:20:04 2019 +0200
+++ b/ProjectController.py	Wed Nov 13 11:21:04 2019 +0100
@@ -63,7 +63,7 @@
 import targets
 from runtime.typemapping import DebugTypesSize, UnpackDebugBuffer
 from runtime import PlcStatus
-from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage
+from ConfigTreeNode import ConfigTreeNode, XSDSchemaErrorMessage, UserAddressedException
 
 base_folder = paths.AbsParentDir(__file__)
 
@@ -1171,7 +1171,10 @@
         try:
             LibCFilesAndCFLAGS, LibLDFLAGS, LibExtraFiles = self.GetLibrariesCCode(
                 buildpath)
-        except Exception:
+        except UserAddressedException as e:
+            self.logger.write_error(e.message)
+            return False
+        except Exception as e:
             self.logger.write_error(
                 _("Runtime library extensions C code generation failed !\n"))
             self.logger.write_error(traceback.format_exc())
@@ -1182,6 +1185,9 @@
             CTNLocationCFilesAndCFLAGS, CTNLDFLAGS, CTNExtraFiles = self._Generate_C(
                 buildpath,
                 self.PLCGeneratedLocatedVars)
+        except UserAddressedException as e:
+            self.logger.write_error(e.message)
+            return False
         except Exception:
             self.logger.write_error(
                 _("Runtime IO extensions C code generation failed !\n"))