From 9498ef5ccdfe82e6941153402c58779707906bd4 Mon Sep 17 00:00:00 2001 From: azv Date: Tue, 10 Mar 2020 16:54:28 +0300 Subject: [PATCH] Generate temporary file names by model.checkPythonDump() --- .../ConnectorPlugin_ExportFeature.py | 11 +------ src/ModelHighAPI/ModelHighAPI_Tools.cpp | 31 +++++++++++------- src/ModelHighAPI/ModelHighAPI_Tools.h | 5 ++- src/PythonAPI/model/services/__init__.py | 32 ++++++++++++++++++- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py index 925b78c72..34bde32ec 100644 --- a/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py +++ b/src/ConnectorPlugin/ConnectorPlugin_ExportFeature.py @@ -31,15 +31,6 @@ from salome.shaper import model import os -def getTmpFileName(ext): - import tempfile - tempdir = tempfile.gettempdir() - tmp_file = tempfile.NamedTemporaryFile(suffix=".%s"%ext, prefix='shaper_', dir=tempdir, delete=False) - tmp_filename = tmp_file.name - if os.name == "nt": - tmp_filename.replace("\\", "/") - return tmp_filename - ## @ingroup Plugins # Feature to export all shapes and groups into the GEOM module class ExportFeature(ModelAPI.ModelAPI_Feature): @@ -87,7 +78,7 @@ class ExportFeature(ModelAPI.ModelAPI_Feature): if not aResult.shape() or aResult.shape().isNull(): continue - tmpXAOFile = getTmpFileName("xao") + tmpXAOFile = model.getTmpFileName("shaper_", ".xao") self.tmpXAOFile = tmpXAOFile #print "Export to %s"%tmpXAOFile exportXAO = ExchangeAPI.exportToXAO(self.Part, tmpXAOFile, model.selection(aResult), "automatic_shaper_export_to_XAO") diff --git a/src/ModelHighAPI/ModelHighAPI_Tools.cpp b/src/ModelHighAPI/ModelHighAPI_Tools.cpp index e2b0e3cbd..882c94f40 100644 --- a/src/ModelHighAPI/ModelHighAPI_Tools.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Tools.cpp @@ -489,7 +489,7 @@ std::string storeFeatures(const std::string& theDocName, DocumentPtr theDoc, typedef std::map > Storage; static bool dumpToPython(SessionPtr theSession, - const char* theFilename, + const std::string& theFilename, const checkDumpType theSelectionType, const std::string& theErrorMsgContext) { @@ -516,7 +516,7 @@ static bool dumpToPython(SessionPtr theSession, } static bool checkDump(SessionPtr theSession, - char* theFilename, + const char* theFilename, Storage& theStorage, const std::string& theErrorMsgContext) { @@ -544,20 +544,29 @@ static bool checkDump(SessionPtr theSession, return true; } -bool checkPythonDump(const checkDumpType theCheckType) +bool checkPyDump(const std::string& theFilenameNaming, + const std::string& theFilenameGeo, + const std::string& theFilenameWeak, + const checkDumpType theCheckType) { static const std::string anErrorByNaming("checkPythonDump by naming"); static const std::string anErrorByGeometry("checkPythonDump by geometry"); static const std::string anErrorByWeak("checkPythonDump by weak naming"); - static char aFileForNamingDump[] = "./check_dump.py"; - static char aFileForGeometryDump[] = "./check_dump_geo.py"; - static char aFileForWeakDump[] = "./check_dump_weak.py"; +#ifdef _DEBUG + std::string aFileForNamingDump("./check_dump.py"); + std::string aFileForGeometryDump("./check_dump_geo.py"); + std::string aFileForWeakDump("./check_dump_weak.py"); +#else + std::string aFileForNamingDump = theFilenameNaming; + std::string aFileForGeometryDump = theFilenameGeo; + std::string aFileForWeakDump = theFilenameWeak; +#endif SessionPtr aSession = ModelAPI_Session::get(); // dump with the specified types - char* aFileName = theCheckType == CHECK_GEOMETRICAL ? aFileForGeometryDump : - (theCheckType == CHECK_WEAK ? aFileForWeakDump : aFileForNamingDump); + std::string aFileName = theCheckType == CHECK_GEOMETRICAL ? aFileForGeometryDump : + (theCheckType == CHECK_WEAK ? aFileForWeakDump : aFileForNamingDump); if (!dumpToPython(aSession, aFileName, theCheckType, anErrorByNaming)) return false; @@ -574,14 +583,14 @@ bool checkPythonDump(const checkDumpType theCheckType) bool isOk = true; if (theCheckType & CHECK_NAMING) { // check dump with the selection by names - isOk = checkDump(aSession, aFileForNamingDump, aStore, anErrorByNaming); + isOk = checkDump(aSession, aFileForNamingDump.c_str(), aStore, anErrorByNaming); } if (theCheckType & CHECK_GEOMETRICAL) { // check dump with the selection by geometry - isOk = isOk && checkDump(aSession, aFileForGeometryDump, aStore, anErrorByGeometry); + isOk = isOk && checkDump(aSession, aFileForGeometryDump.c_str(), aStore, anErrorByGeometry); } if (theCheckType & CHECK_WEAK) { - isOk = isOk && checkDump(aSession, aFileForWeakDump, aStore, anErrorByWeak); + isOk = isOk && checkDump(aSession, aFileForWeakDump.c_str(), aStore, anErrorByWeak); } return isOk; diff --git a/src/ModelHighAPI/ModelHighAPI_Tools.h b/src/ModelHighAPI/ModelHighAPI_Tools.h index e46596c3e..2b0b12c6c 100644 --- a/src/ModelHighAPI/ModelHighAPI_Tools.h +++ b/src/ModelHighAPI/ModelHighAPI_Tools.h @@ -189,7 +189,10 @@ enum checkDumpType { /// model must be recreated fully, with all attributes /// \returns true if check is well done MODELHIGHAPI_EXPORT -bool checkPythonDump(const checkDumpType theCheckType = CHECK_NAMING_AND_GEOMETRICAL); +bool checkPyDump(const std::string& theFilenameNaming, + const std::string& theFilenameGeo, + const std::string& theFilenameWeak, + const checkDumpType theCheckType = CHECK_NAMING_AND_GEOMETRICAL); //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- diff --git a/src/PythonAPI/model/services/__init__.py b/src/PythonAPI/model/services/__init__.py index a8bd05761..ce63d93a2 100644 --- a/src/PythonAPI/model/services/__init__.py +++ b/src/PythonAPI/model/services/__init__.py @@ -28,7 +28,6 @@ from ModelHighAPI import undo, redo from ModelHighAPI import reset from ModelHighAPI import addFolder, removeFolder from ModelHighAPI import ModelHighAPI_Selection as selection -from ModelHighAPI import checkPythonDump as checkPythonDump from ModelAPI import findPartFeature # a method used for the python dump of the SHAPER STUDY @@ -44,3 +43,34 @@ def featureStringId(theFeature): if aRoot and aCurrent: return str(findPartFeature(aRoot, aCurrent).data().featureId()) + ":" + str(theFeature.feature().data().featureId()) return "" + + +import os + +def getTmpFileName(thePrefix, theSuffix): + import tempfile + tempdir = tempfile.gettempdir() + tmp_file = tempfile.NamedTemporaryFile(suffix=theSuffix, prefix=thePrefix, dir=tempdir, delete=False) + tmp_filename = tmp_file.name + if os.name == "nt": + tmp_filename.replace("\\", "/") + tmp_file.close() + return tmp_filename + +def removeTmpFile(theFilename): + try: os.remove(theFilename) + except OSError: pass + +# Verify the Python dump with generating the auxiliary filenames +from ModelHighAPI import CHECK_NAMING_AND_GEOMETRICAL +from ModelHighAPI import checkPyDump +def checkPythonDump(theDumpMode = CHECK_NAMING_AND_GEOMETRICAL): + aPrefix = getTmpFileName("check_dump_", '') + aNaming = aPrefix + ".py" + aGeo = aPrefix + "_geo.py" + aWeak = aPrefix + "_weak.py" + isOk = checkPyDump(aNaming, aGeo, aWeak, theDumpMode) + removeTmpFile(aNaming) + removeTmpFile(aGeo) + removeTmpFile(aWeak) + return isOk -- 2.39.2