Salome HOME
Fix return statement for 'salome context'
[modules/kernel.git] / bin / launchConfigureParser.py
index 647e992308819e44d3e0560e8a01ad3cb7f5e055..57c492797c978a1bb50f293b790b5fdb32688f70 100755 (executable)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -28,8 +28,6 @@ import types
 
 from salome_utils import verbose, getPortNumber, getHomeDir
 
-from salomeContextUtils import getScriptsAndArgs
-
 # names of tags in XML configuration file
 doc_tag = "document"
 sec_tag = "section"
@@ -62,16 +60,13 @@ pinter_nam     = "pinter"
 batch_nam      = "batch"
 test_nam       = "test"
 play_nam       = "play"
+lang_nam       = "language"
 gdb_session_nam = "gdb_session"
 ddd_session_nam = "ddd_session"
 valgrind_session_nam = "valgrind_session"
 shutdown_servers_nam = "shutdown_servers"
 foreground_nam = "foreground"
 wake_up_session_nam = "wake_up_session"
-siman_nam = "siman"
-siman_study_nam = "siman_study"
-siman_scenario_nam = "siman_scenario"
-siman_user_nam = "siman_user"
 
 # values in XML configuration file giving specific module parameters (<module_name> section)
 # which are stored in opts with key <module_name>_<parameter> (eg SMESH_plugins)
@@ -128,7 +123,13 @@ def version():
 def version_id(fname):
     major = minor = release = dev1 = dev2 = 0
     vers = fname.split(".")
-    if len(vers) > 0: major = int(vers[0])
+    if len(vers) > 0:
+      try:
+        major = int(vers[0])
+      except ValueError:
+        # If salome version given is DEV, the call to int('DEV') will fail with
+        # a ValueError exception
+        pass
     try:
       if len(vers) > 1: minor = int(vers[1])
     except ValueError:
@@ -309,6 +310,15 @@ class xml_parser:
         return strloc
         pass
 
+    def strValue( self, str ):
+        strloc = str
+        try:
+            if isinstance(strloc, types.UnicodeType): strloc = strloc.encode().strip()
+            else: strloc = strloc.strip()
+        except:
+            pass
+        return strloc
+
     def startElement(self, name, attrs):
         self.space.append(name)
         self.current = None
@@ -321,7 +331,7 @@ class xml_parser:
         # either "launch" or module name -- set section_name
         if self.space == [doc_tag, sec_tag] and nam_att in attrs.getNames():
             section_name = attrs.getValue( nam_att )
-            if section_name == lanch_nam:
+            if section_name in [lanch_nam, lang_nam]:
                 self.section = section_name # launch section
             elif self.opts.has_key( modules_nam ) and \
                  section_name in self.opts[ modules_nam ]:
@@ -343,14 +353,15 @@ class xml_parser:
                 key = nam
             else:                         # key for <module> section
                 key = self.section + "_" + nam
+            key = self.strValue( key )
             if nam in boolKeys:
                 self.opts[key] = self.boolValue( val )  # assign boolean value: 0 or 1
             elif nam in intKeys:
                 self.opts[key] = self.intValue( val )   # assign integer value
             elif nam in listKeys:
-                self.opts[key] = filter( lambda a: a.strip(), re.split( "[:;,]", val ) ) # assign list value: []
+                self.opts[key] = [ self.strValue( a ) for a in re.split( "[:;,]", val ) ] # assign list value: []
             else:
-                self.opts[key] = val
+                self.opts[key] = self.strValue( val ) # string value
             pass
         pass
 
@@ -486,7 +497,7 @@ def store_boolean (option, opt, value, parser, *args):
         for attribute in args:
             setattr(parser.values, attribute, value)
 
-def CreateOptionParser (theAdditionalOptions=None):
+def CreateOptionParser (theAdditionalOptions=None, exeName=None):
     if theAdditionalOptions is None:
         theAdditionalOptions = []
     # GUI/Terminal. Default: GUI
@@ -783,39 +794,13 @@ def CreateOptionParser (theAdditionalOptions=None):
                              dest="use_port",
                                    help=help_str)
 
-    # SIMAN launch mode
-    help_str = "Special mode for interacting with SIMAN."
-    o_siman = optparse.Option("--siman",
-                              action="store_true",
-                              dest="siman",
-                              help=help_str)
-
-    # SIMAN study
-    help_str = "SIMAN study identifier."
-    o_siman_study = optparse.Option("--siman-study",
-                                    metavar="<id>",
-                                    type="string",
-                                    action="store",
-                                    dest="siman_study",
-                                    help=help_str)
-
-    # SIMAN scenario
-    help_str = "SIMAN scenario identifier."
-    o_siman_scenario = optparse.Option("--siman-scenario",
-                                       metavar="<id>",
-                                       type="string",
-                                       action="store",
-                                       dest="siman_scenario",
-                                       help=help_str)
-
-    # SIMAN user
-    help_str = "SIMAN user identifier."
-    o_siman_user = optparse.Option("--siman-user",
-                                   metavar="<id>",
-                                   type="string",
-                                   action="store",
-                                   dest="siman_user",
-                                   help=help_str)
+    help_str  = "Force application language. By default, a language specified in "
+    help_str += "the user's preferences is used."
+    o_lang = optparse.Option("-a",
+                             "--language",
+                             action="store",
+                             dest="language",
+                             help=help_str)
 
     # All options
     opt_list = [o_t,o_g, # GUI/Terminal
@@ -846,10 +831,7 @@ def CreateOptionParser (theAdditionalOptions=None):
                 o_wake_up,
                 o_slm,   # Server launch mode
                 o_port,  # Use port
-                o_siman,         # Siman launch mode
-                o_siman_study,   # Siman study
-                o_siman_scenario,# Siman scenario
-                o_siman_user,    # Siman user
+                o_lang,  # Language
                 ]
 
     #std_options = ["gui", "desktop", "log_file", "resources",
@@ -859,9 +841,12 @@ def CreateOptionParser (theAdditionalOptions=None):
 
     opt_list += theAdditionalOptions
 
-    a_usage = """%prog [options] [STUDY_FILE] [PYTHON_FILE [args] [PYTHON_FILE [args]...]]
+    if not exeName:
+      exeName = "%prog"
+
+    a_usage = """%s [options] [STUDY_FILE] [PYTHON_FILE [args] [PYTHON_FILE [args]...]]
 Python file arguments, if any, must be comma-separated (without blank characters) and prefixed by "args:" (without quotes), e.g. myscript.py args:arg1,arg2=val,...
-"""
+"""%exeName
     version_str = "Salome %s" % version()
     pars = optparse.OptionParser(usage=a_usage, version=version_str, option_list=opt_list)
 
@@ -877,7 +862,7 @@ Python file arguments, if any, must be comma-separated (without blank characters
 args = {}
 #def get_env():
 #args = []
-def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgname):
+def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgname, exeName=None):
     ###
     # Collect launch configuration files:
     # - The environment variable "<appname>Config" (SalomeAppConfig) which can
@@ -917,7 +902,7 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
 
     ############################
     # parse command line options
-    pars = CreateOptionParser(theAdditionalOptions)
+    pars = CreateOptionParser(theAdditionalOptions, exeName=exeName)
     (cmd_opts, cmd_args) = pars.parse_args(sys.argv[1:])
     ############################
 
@@ -1073,10 +1058,10 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
             args["study_hdf"] = arg
 
     # Python scripts
+    from salomeContextUtils import getScriptsAndArgs, ScriptAndArgs
     args[script_nam] = getScriptsAndArgs(cmd_args)
-    new_args = []
     if args[gui_nam] and args["session_gui"]:
-        from salomeContextUtils import ScriptAndArgs
+        new_args = []
         for sa_obj in args[script_nam]: # args[script_nam] is a list of ScriptAndArgs objects
             script = re.sub(r'^python.*\s+', r'', sa_obj.script)
             new_args.append(ScriptAndArgs(script=script, args=sa_obj.args, out=sa_obj.out))
@@ -1165,16 +1150,6 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
     if cmd_opts.wake_up_session is not None:
         args[wake_up_session_nam] = cmd_opts.wake_up_session
 
-    # siman options
-    if cmd_opts.siman is not None:
-        args[siman_nam] = cmd_opts.siman
-    if cmd_opts.siman_study is not None:
-        args[siman_study_nam] = cmd_opts.siman_study
-    if cmd_opts.siman_scenario is not None:
-        args[siman_scenario_nam] = cmd_opts.siman_scenario
-    if cmd_opts.siman_user is not None:
-        args[siman_user_nam] = cmd_opts.siman_user
-
     ####################################################
     # Add <theAdditionalOptions> values to args
     for add_opt in theAdditionalOptions:
@@ -1232,6 +1207,13 @@ def get_env(theAdditionalOptions=None, appname=salomeappname, cfgname=salomecfgn
             sys.exit(1)
         args[useport_nam] = cmd_opts.use_port
 
+    if cmd_opts.language is not None:
+        langs = args["language_languages"] if "language_languages" in args else []
+        if cmd_opts.language not in langs:
+            print "Error: unsupported language: %s" % cmd_opts.language
+            sys.exit(1)
+        args[lang_nam] = cmd_opts.language
+
     # return arguments
     os.environ[config_var] = os.pathsep.join(dirs)
     #print "Args: ", args