Salome HOME
[EDF29576] : clean management of ior-ns parameter
authorAnthony Geay <anthony.geay@edf.fr>
Tue, 5 Mar 2024 08:15:54 +0000 (09:15 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Tue, 5 Mar 2024 08:15:54 +0000 (09:15 +0100)
src/yacsloader/driver
src/yacsloader/driver_internal.py

index f0c9d0ea8e1af0f50a68f979381ea53577ad7846..3b431266aef62bad4ddbd04d5f7496d3f2ce2679 100644 (file)
@@ -24,7 +24,7 @@ import subprocess as sp
 import salome
 import SALOME_Embedded_NamingService_ClientPy
 import NamingService
-from SALOME_PyNode import FileDeleter
+from SALOME_PyNode import FileDeleter,FileHolder
 
 import signal
 import os
@@ -37,22 +37,37 @@ def handler(signum, frame):
   try:
     ns = SALOME_Embedded_NamingService_ClientPy.SALOME_Embedded_NamingService_ClientPy( NamingService.NamingService.LoadIORInFile( ior_file.filename ) )
     del ior_file
+    ior_file = None # to avoid raises in __main__ function
     cm = ns.Resolve(salome.CM_NAME_IN_NS)
     cm.ShutdownContainersNow()
   except:
     pass
   os.kill( proc.pid, signal.SIGKILL )
 
-if __name__ == "__main__":
+def generateCmdForInternal():
   import sys
   import tempfile
+  global ior_file
+  args, _ = driver_internal.parseArgs()
+  iorNS = args[ driver_internal.IORKeyInARGS ]
+  firstPart = ["python3",driver_internal.__file__] 
+  lastPart = [elt for elt in sys.argv[1:] if elt != ""]
+  middlePart = []
+  #
+  if not iorNS:
+    with tempfile.NamedTemporaryFile(prefix="ior_driver_",suffix=".ior") as f:
+      ior_file = FileDeleter( f.name )
+    middlePart = [ "{}={}".format( driver_internal.IOREntryInCMD, ior_file.filename) ]
+  else:
+    ior_file = FileHolder( iorNS )
+  print(100*"*")
+  print( firstPart + middlePart + lastPart )
+  return firstPart + middlePart + lastPart
+
+if __name__ == "__main__":
   signal.signal(signal.SIGINT, handler)
   signal.signal(signal.SIGTERM, handler)
-  with tempfile.NamedTemporaryFile(prefix="ior_driver_",suffix=".ior") as f:
-    ior_file = FileDeleter( f.name )
-  iorStuff = "{}={}".format( driver_internal.IOREntryInCMD, ior_file.filename)
-  argv = [elt for elt in sys.argv[1:] if elt != ""]
-  cmd = ["python3",driver_internal.__file__] + [ iorStuff ] + argv
+  cmd = generateCmdForInternal()
   proc = sp.Popen( cmd )
   proc.communicate()
   del ior_file
index 37ca72b054a787197a49d31ca2fb375ec03a0a5d..33b9aac17864be856ce88d9b968f83913cd681be 100644 (file)
@@ -341,7 +341,7 @@ def getArgumentParser():
   parser.add_argument("--options_from_json", dest = "options_from_json", type=str, default ="", help="Json file of options. If defined options in json will override those specified in command line.")
   return parser
 
-def mainRun( args, iorNS, xmlFileName):
+def mainRun( args, xmlFileName):
   """
   Args:
   -----
@@ -352,10 +352,10 @@ def mainRun( args, iorNS, xmlFileName):
   global my_ior_ns
   from salome_utils import positionVerbosityOfLoggerRegardingState,setVerboseLevel,setVerbose
   #
+  iorNS = args[IORKeyInARGS]
+  #
   if iorNS:
     my_ior_ns = iorNS
-  # change key of args from entryCMD to KeyInARGS
-  args = {key:args[EntryFromCoarseEntry(entry)] for entry,key in KeyValnARGS}
   #
   if args[VerboseKeyInARGS]:
     setVerbose( args[ KernelTraceKeyInARGS ] )
@@ -373,8 +373,15 @@ def mainRun( args, iorNS, xmlFileName):
   #
   destroyElementsGeneratedByExecutionOfGraph( proc, args[ShutdownKeyInARGS] )
 
+def parseArgs():
+  """
+  Returns
+  -------
 
-if __name__ == "__main__":
+  - args (dict) : dictionnary containing all args taken into account. If json, the params in json will override entries
+  - xmlFileName (str) : XML YACS schema
+  
+  """
   import json
   parser = getArgumentParser()
   args = parser.parse_args()
@@ -387,5 +394,12 @@ if __name__ == "__main__":
     with open( optionFromJSon ) as f:
       opts_from_json = json.load( f )
     for k,v in opts_from_json.items():
-      args[k] = v
-  mainRun( args, iorNS, xmlFileName)
+      if k != EntryFromCoarseEntry(IOREntryInCMD) or v:# for IOR if v is null -> do not override
+        args[k] = v
+  # change key of args from entryCMD to KeyInARGS
+  args = {key:args[EntryFromCoarseEntry(entry)] for entry,key in KeyValnARGS}
+  return args, xmlFileName
+
+if __name__ == "__main__":
+  args, xmlFileName = parseArgs()
+  mainRun( args, xmlFileName)