Salome HOME
correction bug spns #16713
[tools/sat.git] / commands / job.py
index da85234192958240896ef1f2cb28ce49e0a33ae6..f5805feaa557dcaf65007cdf09ed75c8a5f1ef6d 100644 (file)
 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 
 import os
-import sys
-import traceback
-import tempfile
 
 import src
+import src.salomeTools
 
 # Define all possible option for the make command :  sat make <options>
 parser = src.options.Options()
@@ -37,9 +35,12 @@ def description():
     :return: The text to display for the job command description.
     :rtype: str
     '''
-    return _("Executes the commands of the job defined"
-             " in the jobs configuration file\n\nexample:\nsat job "
-             "--jobs_config my_jobs --name my_job")
+    return _("""\
+The job command executes the commands of the job defined in the jobs configuration file
+
+example:
+>> sat job --jobs_config my_jobs --name my_job
+""")
   
 def run(args, runner, logger):
     '''method that is called when salomeTools is called with job parameter.
@@ -111,17 +112,32 @@ def run(args, runner, logger):
     res = 0
     nb_pass = 0
     for command in commands:
+        specific_option = False
         # Determine if it is a sat command or a shell command
         cmd_exe = command.split(" ")[0] # first part
         if cmd_exe == "sat":
-            sat_command_name = command.split(" ")[1]
-            end_cmd = command.replace(cmd_exe + " " + sat_command_name, "")
+            # use the salomeTools parser to get the options of the command
+            sat_parser = src.salomeTools.parser
+            input_parser = src.remove_item_from_list(command.split(' ')[1:], "")
+            (options, argus) = sat_parser.parse_args(input_parser)
+            # Verify if there is a changed option
+            for attr in dir(options):
+                if attr.startswith("__"):
+                    continue
+                if options.__getattr__(attr) != None:
+                    specific_option = True
+            sat_command_name = argus[0]
+            end_cmd = " ".join(argus[1:])
         else:
             sat_command_name = "shell"
-            end_cmd = "--command " + command
-        
-        # Get dynamically the command function to call 
+            end_cmd = ["--command", command]
+        # Do not change the options if no option was called in the command
+        if not(specific_option):
+            options = None
+
+        # Get dynamically the command function to call
         sat_command = runner.__getattr__(sat_command_name)
+
         logger.write("Executing " + 
                      src.printcolors.printcLabel(command) + " ", 3)
         logger.write("." * (len_max_command - len(command)) + " ", 3)
@@ -129,33 +145,24 @@ def run(args, runner, logger):
         
         error = ""
         stack = ""
-        try:
-            # Execute the command
-            code = sat_command(end_cmd,
-                               batch = True,
-                               verbose = 0,
-                               logger_add_link = logger)
-        except Exception as e:
-            code = 1
-            # Get error
-            error = str(e)
-            # get stack
-            __, __, exc_traceback = sys.exc_info()
-            fp = tempfile.TemporaryFile()
-            traceback.print_tb(exc_traceback, limit=1, file=fp)
-            fp.seek(0)
-            stack = fp.read()
+        # Execute the command
+        code = sat_command(end_cmd,
+                           options = options,
+                           batch = True,
+                           verbose = 0,
+                           logger_add_link = logger)
             
-
         # Print the status of the command
         if code == 0:
             nb_pass += 1
             logger.write('%s\n' % src.printcolors.printc(src.OK_STATUS), 3)
         else:
-            res = 1
+            if sat_command_name != "test":
+                res = 1
             logger.write('%s %s\n' % (src.printcolors.printc(src.KO_STATUS),
                                       error), 3)
-            logger.write('stack: %s\n' % stack, 3)
+            if len(stack) > 0:
+                logger.write('stack: %s\n' % stack, 3)
     
     # Print the final state
     if res == 0: