Salome HOME
[EDF29576] : WIP
authorAnthony Geay <anthony.geay@edf.fr>
Mon, 26 Feb 2024 10:33:09 +0000 (11:33 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Mon, 26 Feb 2024 10:33:09 +0000 (11:33 +0100)
src/yacsloader/driver [changed mode: 0644->0755]
src/yacsloader/driver_internal.py

old mode 100644 (file)
new mode 100755 (executable)
index b7e6e89..48c4ced
 # driver -x -g 2 -s -e "popo.xml" -v -kt -i "PyScript0.p1=7" -f "tutu.xml" micro_schema2.xml
 # driver micro_schema3.xml
 
+import driver_internal
+import subprocess as sp
 import salome
-import logging
+import SALOME_Embedded_NamingService_ClientPy
 
-my_runtime_yacs = None
+import signal
+import SALOMERuntime
+import os
 
-def initializeSALOME():
-    import SALOMERuntime
-    global my_runtime_yacs
-    if my_runtime_yacs:
-      return
-    salome.salome_init()
-    flags = SALOMERuntime.RuntimeSALOME.UsePython + SALOMERuntime.RuntimeSALOME.UseCorba + SALOMERuntime.RuntimeSALOME.UseXml + SALOMERuntime.RuntimeSALOME.UseCpp + SALOMERuntime.RuntimeSALOME.UseSalome
-    SALOMERuntime.RuntimeSALOME.setRuntime( flags )
-    my_runtime_yacs = SALOMERuntime.getSALOMERuntime()
-    anIOR = salome.orb.object_to_string ( salome.modulcat )
-    aCatalog = my_runtime_yacs.loadCatalog( "session", anIOR )
-    my_runtime_yacs.addCatalog( aCatalog )
+proc = None
+ior_file = None
 
-def SALOMEInitializationNeeded(func):
-    def decaratedFunc(*args,**kwargs):
-      initializeSALOME()
-      return func(*args,**kwargs)
-    return decaratedFunc
-
-@SALOMEInitializationNeeded
-def loadGraph( xmlFileName ):
-    """
-    Args:
-    -----
-    xmlFileName : XML file containing YACS schema
-
-    Returns
-    -------
-
-    SALOMERuntime.SalomeProc : YACS graph instance
-    """
-    import loader
-    l=loader.YACSLoader()
-    p=l.load( xmlFileName )
-    return p
-
-def patchGraph( proc, squeezeMemory, initPorts, xmlSchema, loadStateXmlFile, reset, display):
-    """
-    Args:
-    -----
-
-    proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
-    squeezeMemory ( bool ) : squeezememory to be activated
-    initPorts (list<string>) : list of bloc.node.port=value.
-    xmlSchema (string) :
-    loadStateXmlFile (string) : file if any of state to be loaded inside proc
-    reset (int) : 
-    display (int) :
-    """
-    import SALOMERuntime
-    import loader
-    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}")
-    #
-    if xmlSchema:
-      SALOMERuntime.VisitorSaveSalomeSchemaUnsafe(proc,xmlSchema)
-      pass
-    #
-    if loadStateXmlFile:
-      loader.loadState( proc, loadStateXmlFile )
-      if reset > 0:
-        proc.resetState(reset)
-        proc.exUpdateState()
-    #
-    if display > 0:
-       proc.writeDotInFile("toto")
-         
-@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( executor, xmlfilename, proc, dump, finalDump, display, shutdown ):
-    """
-    Args:
-    -----
-  
-    executor (pilot.ExecutorSwig) : Executor in charge of evaluation.
-    proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
-    xmlfilename (string)
-    dump (int) : time interval between 2 dump state
-    finalDump ( string ) : filename containing final result of graph, if any.
-    display (int) :
-    shutdown (int) : shutdown level
-    """
-    import signal
-    import SALOMERuntime
-    def handler(signum, frame):
-      print('Signal handler called with signal', signum)
-      proc.cleanNodes()
-      if finalDump:
-        SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
-      if shutdown < 999:
-        print(100*"shutdown")
-        proc.shutdown(shutdown)
-    
-    signal.signal(signal.SIGINT, handler)
-    signal.signal(signal.SIGTERM, handler)
-    dump_thread = None
-    import pilot
-    import os
-
-    if dump != 0:
-       dumpFile = "dumpState_{}".format( os.path.basename(xmlfilename) )
-       lockFile = "{}.lock".format( os.path.splitext( os.path.basename(xmlfilename) )[0] )
-       dump_thread = SALOMERuntime.ThreadDumpState(proc,dump,dumpFile,lockFile)
-       dump_thread.start()
-
-    executor.RunPy(proc,display,isPyThread=True,fromscratch=True) # same as RunW but releasing GIL
-    if proc.getEffectiveState() != pilot.DONE:
-      raise RuntimeError( proc.getErrorReport() )
-    #
-    if display > 0:
-       proc.writeDotInFile("titi")
-    #
-    if dump_thread:
-       dump_thread.join()
-    #
-    if finalDump:
-      logging.info(f"Final dump requested : {finalDump}")
-      SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
-
-@SALOMEInitializationNeeded
-def destroyElementsGeneratedByExecutionOfGraph( proc, shutdown ):
-    """
-    Args:
-    -----
-
-    shutdown (int) : shutdown level
-
-    """
-    if shutdown < 999:
-      proc.shutdown(shutdown)
-    salome.dsm.shutdownScopes()
-    my_runtime_yacs.fini( False )
+def handler(signum, frame):
+  global proc
+  print('Signal handler called with signal', signum, proc.pid)
+  ns = SALOME_Embedded_NamingService_ClientPy.SALOME_Embedded_NamingService_ClientPy( salome.naming_service.LoadIORInFile( ior_file ) )
+  print( ns.repr() )
+  cm = ns.Resolve(salome.CM_NAME_IN_NS)
+  cm.ShutdownContainers()
+  os.kill( proc.pid, signal.SIGKILL )
 
 if __name__ == "__main__":
-    from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
-    import argparse
-    parser = argparse.ArgumentParser()
-    parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
-    parser.add_argument("-d", "--display", dest = "display", type=int, default=[0], nargs=1, help="Display dot files: 0=never to 3=very often")
-    parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
-    parser.add_argument("-s","--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
-    parser.add_argument("-e","--dump-on-error",dest="dumpErrorFile", type=str, const='dumpErrorState.xml', default="", nargs='?', help="Stop on first error and dump state")
-    parser.add_argument("-g","--dump",dest="dump", type=int, const=60, default=0, nargs='?', help="dump state")
-    parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
-    parser.add_argument("-f","--dump-final", dest ="finalDump", type=str, const='finalDumpState.xml', default="", nargs='?', help="dump final state")
-    parser.add_argument("-l","--load-state", dest="loadState", type=str, default="", help="Load State from a previous partial execution")
-    parser.add_argument("-x","--save-xml-schema", dest="saveXMLSchema", type=str, const="saveSchema.xml", nargs='?', default="", help = "dump xml schema")
-    parser.add_argument("-t","--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
-    parser.add_argument("-r","--reset", dest = "reset", type=int , default = 0, help="Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state")
-    parser.add_argument("-i","--init-port", dest = 'init_port', type=str, default ="", help="Initialisation value of a port, specified as bloc.node.port=value.")
-    parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
-    args = parser.parse_args()
-    args.display = args.display[0]
-    #
-    if args.verbose:
-      setVerbose( args.kerneltrace )
-      setVerboseLevel(logging.INFO)
-      positionVerbosityOfLoggerRegardingState()
-    #
-    proc = loadGraph( args.xmlfilename )
-    patchGraph( proc, not args.donotsqueeze, [elt for elt in args.init_port.split(",") if elt !=""], args.saveXMLSchema, args.loadState, args.reset, args.display)
-    executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
-    #
-    executeGraph( executor, args.xmlfilename, proc, args.dump, args.finalDump, args.display, args.shutdown)
-    #
-    destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )
+  salome.salome_init()
+  import sys
+  signal.signal(signal.SIGINT, handler)
+  signal.signal(signal.SIGTERM, handler)
+  ior_file = "toto.ior"
+  iorStuff = "{}={}".format( driver_internal.IOREntryInCMD, ior_file)
+  argv = [elt for elt in sys.argv[1:] if elt != ""]
+  proc = sp.Popen( ["python3",driver_internal.__file__] + [ iorStuff ] + argv  )
+  proc.communicate()
index 49f8e1e4063fbcf83525bc4ce112224d1c4db403..38f6804315c1176f5b7bf6550774e6bff5dcf8d1 100644 (file)
 import salome
 import logging
 
+IOREntryInCMD = "--ior-ns"
+
 my_runtime_yacs = None
 
+my_ior_ns = None
+
 def initializeSALOME():
     import SALOMERuntime
     global my_runtime_yacs
     if my_runtime_yacs:
       return
     salome.salome_init()
+    if my_ior_ns:
+      salome.naming_service.DumpIORInFile( my_ior_ns )
     flags = SALOMERuntime.RuntimeSALOME.UsePython + SALOMERuntime.RuntimeSALOME.UseCorba + SALOMERuntime.RuntimeSALOME.UseXml + SALOMERuntime.RuntimeSALOME.UseCpp + SALOMERuntime.RuntimeSALOME.UseSalome
     SALOMERuntime.RuntimeSALOME.setRuntime( flags )
     my_runtime_yacs = SALOMERuntime.getSALOMERuntime()
@@ -141,19 +147,7 @@ def executeGraph( executor, xmlfilename, proc, dump, finalDump, display, shutdow
     display (int) :
     shutdown (int) : shutdown level
     """
-    import signal
     import SALOMERuntime
-    def handler(signum, frame):
-      print('Signal handler called with signal', signum)
-      proc.cleanNodes()
-      if finalDump:
-        SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
-      if shutdown < 999:
-        print(100*"shutdown")
-        proc.shutdown(shutdown)
-    
-    signal.signal(signal.SIGINT, handler)
-    signal.signal(signal.SIGTERM, handler)
     dump_thread = None
     import pilot
     import os
@@ -192,36 +186,49 @@ def destroyElementsGeneratedByExecutionOfGraph( proc, shutdown ):
     salome.dsm.shutdownScopes()
     my_runtime_yacs.fini( False )
 
+def getArgumentParser():
+  import argparse
+  parser = argparse.ArgumentParser()
+  parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
+  parser.add_argument("-d", "--display", dest = "display", type=int, default=[0], nargs=1, help="Display dot files: 0=never to 3=very often")
+  parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
+  parser.add_argument("-s","--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
+  parser.add_argument("-e","--dump-on-error",dest="dumpErrorFile", type=str, const='dumpErrorState.xml', default="", nargs='?', help="Stop on first error and dump state")
+  parser.add_argument("-g","--dump",dest="dump", type=int, const=60, default=0, nargs='?', help="dump state")
+  parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
+  parser.add_argument("-f","--dump-final", dest ="finalDump", type=str, const='finalDumpState.xml', default="", nargs='?', help="dump final state")
+  parser.add_argument("-l","--load-state", dest="loadState", type=str, default="", help="Load State from a previous partial execution")
+  parser.add_argument("-x","--save-xml-schema", dest="saveXMLSchema", type=str, const="saveSchema.xml", nargs='?', default="", help = "dump xml schema")
+  parser.add_argument("-t","--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
+  parser.add_argument("-r","--reset", dest = "reset", type=int , default = 0, help="Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state")
+  parser.add_argument("-i","--init-port", dest = 'init_port', type=str, default ="", help="Initialisation value of a port, specified as bloc.node.port=value.")
+  parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
+  parser.add_argument(IOREntryInCMD, dest = "iorNS", type=str, default ="", help="file inside which the ior of NS will be stored")
+  return parser
+
+def mainRun( args ):
+  global my_ior_ns
+  from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
+  args.display = args.display[0]
+  #
+  if args.iorNS:
+    my_ior_ns = args.iorNS
+  #
+  if args.verbose:
+    setVerbose( args.kerneltrace )
+    setVerboseLevel(logging.INFO)
+    positionVerbosityOfLoggerRegardingState()
+  #
+  proc = loadGraph( args.xmlfilename )
+  patchGraph( proc, not args.donotsqueeze, [elt for elt in args.init_port.split(",") if elt !=""], args.saveXMLSchema, args.loadState, args.reset, args.display)
+  executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
+  #
+  executeGraph( executor, args.xmlfilename, proc, args.dump, args.finalDump, args.display, args.shutdown)
+  #
+  destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )
+
+
 if __name__ == "__main__":
-    from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
-    import argparse
-    parser = argparse.ArgumentParser()
-    parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
-    parser.add_argument("-d", "--display", dest = "display", type=int, default=[0], nargs=1, help="Display dot files: 0=never to 3=very often")
-    parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
-    parser.add_argument("-s","--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
-    parser.add_argument("-e","--dump-on-error",dest="dumpErrorFile", type=str, const='dumpErrorState.xml', default="", nargs='?', help="Stop on first error and dump state")
-    parser.add_argument("-g","--dump",dest="dump", type=int, const=60, default=0, nargs='?', help="dump state")
-    parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
-    parser.add_argument("-f","--dump-final", dest ="finalDump", type=str, const='finalDumpState.xml', default="", nargs='?', help="dump final state")
-    parser.add_argument("-l","--load-state", dest="loadState", type=str, default="", help="Load State from a previous partial execution")
-    parser.add_argument("-x","--save-xml-schema", dest="saveXMLSchema", type=str, const="saveSchema.xml", nargs='?', default="", help = "dump xml schema")
-    parser.add_argument("-t","--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
-    parser.add_argument("-r","--reset", dest = "reset", type=int , default = 0, help="Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state")
-    parser.add_argument("-i","--init-port", dest = 'init_port', type=str, default ="", help="Initialisation value of a port, specified as bloc.node.port=value.")
-    parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
-    args = parser.parse_args()
-    args.display = args.display[0]
-    #
-    if args.verbose:
-      setVerbose( args.kerneltrace )
-      setVerboseLevel(logging.INFO)
-      positionVerbosityOfLoggerRegardingState()
-    #
-    proc = loadGraph( args.xmlfilename )
-    patchGraph( proc, not args.donotsqueeze, [elt for elt in args.init_port.split(",") if elt !=""], args.saveXMLSchema, args.loadState, args.reset, args.display)
-    executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
-    #
-    executeGraph( executor, args.xmlfilename, proc, args.dump, args.finalDump, args.display, args.shutdown)
-    #
-    destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )
+  parser = getArgumentParser()
+  args = parser.parse_args()
+  mainRun( args )