]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
[bos #26444] [EDF] (2021) SHAPER: Improve treatment of parameters
authorAlexey Kondratyev <alexey.kondratyev@opencascade.com>
Mon, 11 Oct 2021 07:57:46 +0000 (10:57 +0300)
committerAlexey Kondratyev <alexey.kondratyev@opencascade.com>
Fri, 29 Oct 2021 06:46:00 +0000 (09:46 +0300)
Add parameter errors in Python console.

Add tests and update existing test.

src/ParametersAPI/ParametersAPI.i
src/ParametersAPI/ParametersAPI_Parameter.cpp
src/ParametersPlugin/Test/TestParameterCreationError.py [new file with mode: 0644]
src/ParametersPlugin/Test/TestParameterErrorMsg.py
src/PythonAPI/Test/TestInsertParameter.py
src/PythonAPI/model/parameter/import_parameter.py

index 8d8a59c74318f9de31f70cc14cd8121bebd0b5d2..66ba5fb3db11e4048f73dbc70ea7bc08de68f2b4 100644 (file)
 // shared pointers
 %shared_ptr(ParametersAPI_Parameter)
 
+// exception handler
+%exception addParameter {
+  try {
+    $action
+  } catch (const std::string& str) {
+    PyErr_SetString(PyExc_SyntaxError, str.c_str());
+    return NULL;
+  }
+}
+
 // all supported interfaces
 %include "ParametersAPI_Parameter.h"
index 9079094a40eeb6cde3a10f4fbcb77c93c0ff2888..5c2c7130c6c830df98a6103e206f2c11f2a1b5ab 100644 (file)
@@ -90,7 +90,15 @@ ParameterPtr addParameter(const std::shared_ptr<ModelAPI_Document> & thePart,
                           const std::wstring & theComment)
 {
   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(ParametersAPI_Parameter::ID());
-  return ParameterPtr(new ParametersAPI_Parameter(aFeature, theName, theExpression, theComment));
+  ParameterPtr aParam(new ParametersAPI_Parameter(aFeature, theName, theExpression, theComment));
+
+  if (!aParam->feature()->error().empty())
+  {
+    std::string anError("Error with parameter \"");
+    anError += theName + "\": " + aParam->feature()->error();
+    throw anError;
+  }
+  return aParam;
 }
 
 //--------------------------------------------------------------------------------------
diff --git a/src/ParametersPlugin/Test/TestParameterCreationError.py b/src/ParametersPlugin/Test/TestParameterCreationError.py
new file mode 100644 (file)
index 0000000..08b2746
--- /dev/null
@@ -0,0 +1,20 @@
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+aPart1 = model.addParameter(Part_1_doc, "Doing", "123", "Longueur de la pièce")
+try:
+  aPart2 = model.addParameter(Part_1_doc, "Doing", "323", "Long")
+except SyntaxError as anError:
+  assert(anError != "")
+  assert(str(anError).find("Variable name is not unique.") != -1)
+
+model.end()
index bc74435283db558ad2318a56b33e83fc80f3948f..d21b360de47bab3f3703cd107c531d449d4c390f 100644 (file)
@@ -22,15 +22,23 @@ from salome.shaper import model
 model.begin()
 partSet = model.moduleDocument()
 # check error on empty name
-Param1 = model.addParameter(partSet, "", "100")
-assert(Param1.feature().error() != "")
+try:
+    Param1 = model.addParameter(partSet, "", "100")
+except SyntaxError as anError:
+    assert(str(anError).find("Attribute \"variable\" value is empty.") != -1)
 # check error on empty value
-Param2 = model.addParameter(partSet, "L", "")
-assert(Param2.feature().error() != "")
+try:
+    Param2 = model.addParameter(partSet, "L", "")
+except SyntaxError as anError:
+    assert(str(anError).find("Expression is empty.") != -1)
 # check error if name is not variable
-Param3 = model.addParameter(partSet, "100", "100")
-assert(Param3.feature().error() != "")
+try:
+    Param3 = model.addParameter(partSet, "100", "100")
+except SyntaxError as anError:
+    assert(str(anError).find("Incorrect variable name.") != -1)
 # check error on wrong value expression
-Param4 = model.addParameter(partSet, "N", "+-.so&@")
-assert(Param4.feature().error() != "")
+try:
+    Param4 = model.addParameter(partSet, "N", "+-.so&@")
+except SyntaxError as anError:
+    assert(str(anError).find("invalid syntax") != -1)
 model.end()
index 97b7e13f5d95b3d05c117c73925866d76e4efb14..739206e4e6ad27ff31e559096fdc0e2f1e049dbc 100644 (file)
@@ -49,8 +49,9 @@ aFile.write("Longueur2 36. #\"Comment\" #Comm  #Comm\n")
 aFile.close()
 
 aListOfParameters = model.importParameters(Part_1_doc, nameFile)
+
 Box_1 = model.addBox(Part_1_doc, "Longueur", "Largeur", "Hauteur")
 
 assert(len(Box_1.feature().error()) == 0)
 assert(len(aListOfParameters) > 0)
-assert(len(aListOfParameters) == 8)
+assert(len(aListOfParameters) == 5)
index cc5b21427ca4774016d4e4ac2d77246cf5a4ce06..d844f788077bce1c5cb7c2c93e67e94de2d18def 100644 (file)
@@ -49,7 +49,10 @@ def importParameters(theDocument, theFileName):
         aComment = aLine
 
         if(len(aName) > 0):
-            aResult.append(model.addParameter(theDocument, aName, aParameter.strip(), aComment.strip()))
+            try:
+                aResult.append(model.addParameter(theDocument, aName, aParameter.strip(), aComment.strip()))
+            except SyntaxError as anError:
+                anError
 
     aFile.close()
     return aResult