# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-# python3 /home/H87074/salome/990_CEA/SALOME-master-native-DB11-SRC/SOURCES/yacs/src/yacsloader/driver.py micro_schema.xml
+# python3 /home/H87074/salome/990_CEA/SALOME-master-native-DB11-SRC/SOURCES/yacs/src/yacsloader/driver.py -v -kt micro_schema.xml
+# python3 /home/H87074/salome/990_CEA/SALOME-master-native-DB11-SRC/SOURCES/yacs/src/yacsloader/driver.py --stop-on-error --dump-on-error="popo.xml" -v -kt -ip "PyScript0.p1=7" --dump-final="tutu.xml" micro_schema2.xml
import loader
import SALOMERuntime
"""
struct arguments
{
- char *args[1];
int display = 0;
- int verbose = 0;
- int stop = 0;
- std::string dumpErrorFile;
std::string finalDump;
int dump = 0;
- std::string xmlSchema;
std::string loadState;
- int shutdown = 10; # done
int reset = 0;
- int killPort = 0;
- bool squeezeMemory = true;
- std::list<std::string> init_ports;
};
{"display", 'd', "level", 0, "Display dot files: 0=never to 3=very often (default 0)"},
- {"verbose", 'v', 0, 0, "Produce verbose output" },
- {"stop-on-error", 's', 0, 0, "Stop on first error" },
- {"dump-on-error", 'e', "file", OPTION_ARG_OPTIONAL, "Stop on first error and dump state"},
{"dump-final", 'f', "file", OPTION_ARG_OPTIONAL, "dump final state"},
{"dump", 'g', "nbsec", OPTION_ARG_OPTIONAL, "dump state"},
{"load-state", 'l', "file", 0, "Load State from a previous partial execution"},
{"save-xml-schema", 'x', "file", OPTION_ARG_OPTIONAL, "dump xml schema"},
- {"shutdown", 't', "level", 0, "Shutdown the schema: 0=no shutdown to 3=full shutdown (default 1)"},
{"reset", 'r', "level", 0, "Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state (default 0)"},
- {"kill-port", 'k', "port", 0, "Kill Salome application running on the specified port if the driver process is killed (with SIGINT or SIGTERM)"},
- {"init_port", 'i', "value", OPTION_ARG_OPTIONAL, "Initialisation value of a port, specified as bloc.node.port=value."},
- {"donotsqueeze", 'z', "value", 0, "Desactivate squeeze memory optimization."},
"""
p=l.load( xmlFileName )
return p
-def patchGraph( proc, squeezeMemory):
+def patchGraph( proc, squeezeMemory, initPorts):
"""
Args:
-----
proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
squeezeMemory ( bool ) : squeezememory to be activated
-
- Returns
- -------
-
-
+ initPorts (list<string>) : list of bloc.node.port=value.
"""
+ def parse_init_port(input):
+ """
+ Returns
+ -------
+ node, port, value
+ """
+ node_port, value = input.split("=")
+ nodePortSpl = node_port.split(".")
+ port = nodePortSpl[-1]
+ node = ".".join( nodePortSpl[:-1] )
+ return node,port,value
+
if squeezeMemory:
logging.info("SqueezeMemory requested -> update proc")
allNodes = proc.getAllRecursiveNodes()
for node in allNodes:
if isinstance(proc,SALOMERuntime.PythonNode):
node.setSqueezeStatus( True )
-
+ for initPort in initPorts:
+ node,port,value = parse_init_port(initPort)
+ init_state = proc.setInPortValue(node, port, value)
+ if init_state != value:
+ raise RuntimeError(f"Error on initialization of {initPort}")
+
+@SALOMEInitializationNeeded
+def prepareExecution(proc, isStop, dumpErrorFile):
+ """
+ Returns
+ -------
+
+ pilot.ExecutorSwig : Instance of executor
+ """
+ import pilot
+ ex=pilot.ExecutorSwig()
+ if isStop:
+ logging.info(f"Stop has been activated with {dumpErrorFile}")
+ ex.setStopOnError( dumpErrorFile!="", dumpErrorFile )
+ return ex
@SALOMEInitializationNeeded
-def executeGraph( proc ):
+def executeGraph( executor, proc, finalDump ):
"""
Args:
-----
-
+
+ executor (pilot.ExecutorSwig) : Executor in charge of evaluation.
proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
+ finalDump ( string ) : filename containing final result of graph, if any.
"""
import pilot
- ex=pilot.ExecutorSwig()
- ex.RunW(proc,0)
- pass
+ executor.RunW(proc,0)
+ if proc.getEffectiveState() != pilot.DONE:
+ raise RuntimeError( proc.getErrorReport() )
+ if finalDump:
+ SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
@SALOMEInitializationNeeded
def destroyElementsGeneratedByExecutionOfGraph( proc, shutdown ):
parser = argparse.ArgumentParser()
parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
+ parser.add_argument("--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
+ parser.add_argument("--dump-on-error",dest="dumpErrorFile",help="Stop on first error and dump state")
parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
+ parser.add_argument("--dump-final", dest ="finalDump", type=str, default="", help="dump final state")
parser.add_argument("--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
+ parser.add_argument("-ip","--init-port", dest = 'init_port', type=str, help="Initialisation value of a port, specified as bloc.node.port=value.")
args = parser.parse_args()
#
if args.verbose:
positionVerbosityOfLoggerRegardingState()
#
proc = loadGraph( args.xmlfilename )
- patchGraph( proc, not args.donotsqueeze)
- executeGraph( proc )
+ patchGraph( proc, not args.donotsqueeze, args.init_port.split(","))
+ executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
+ executeGraph( executor, proc, args.finalDump)
destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )