X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=bin%2FlaunchConfigureParser.py;h=57c492797c978a1bb50f293b790b5fdb32688f70;hb=873ec599707c3abbea2c3203aa4d8c1e98e2dcd2;hp=99db4a7cd4f4de5f6d16c34616535e44bc8a594f;hpb=2040dac9febbf6fe0eb1b6b10818be2027953441;p=modules%2Fkernel.git diff --git a/bin/launchConfigureParser.py b/bin/launchConfigureParser.py index 99db4a7cd..57c492797 100755 --- a/bin/launchConfigureParser.py +++ b/bin/launchConfigureParser.py @@ -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 ( section) # which are stored in opts with key _ (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: @@ -197,16 +198,19 @@ def userFile(appname, cfgname): if not id0: return None # bad version id -> can't detect appropriate file # ... get all existing user preferences files - filetmpl = sys.platform == "win32" and "{0}.xml.*" or "{0}rc.*" + filetmpl1 = sys.platform == "win32" and "{0}.xml.*" or "{0}rc.*" + filetmpl2 = sys.platform == "win32" and filetmpl1 or "." + filetmpl1 files = [] if cfgname: # Since v6.6.0 - in ~/.config/salome directory, without dot prefix - files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, filetmpl.format(appname))) - # Since v6.5.0 - in ~/.config/salome directory, dot-prefixed (backward compatibility) - files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, filetmpl.format(appname))) + files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, filetmpl1.format(appname))) + # Since v6.5.0 - in ~/.config/salome directory, dot-prefixed (backward compatibility) + if filetmpl2 and filetmpl2 != filetmpl1: + files += glob.glob(os.path.join(getHomeDir(), ".config", cfgname, filetmpl2.format(appname))) pass # old style (before v6.5.0) - in ~ directory, dot-prefixed - files += glob.glob(os.path.join(getHomeDir(), filetmpl.format(appname))) + if filetmpl2 and filetmpl2 != filetmpl1: + files += glob.glob(os.path.join(getHomeDir(), filetmpl2.format(appname))) pass # ... loop through all files and find most appopriate file (with closest id) @@ -306,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 @@ -318,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 ]: @@ -340,14 +353,15 @@ class xml_parser: key = nam else: # key for 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 @@ -483,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 @@ -780,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="", - 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="", - 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="", - 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 @@ -843,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", @@ -856,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) @@ -874,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 "Config" (SalomeAppConfig) which can @@ -914,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:]) ############################ @@ -1070,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)) @@ -1162,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 values to args for add_opt in theAdditionalOptions: @@ -1229,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