--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2008-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org or email : webmaster.salome@opencascade.com
+
+
+"""
+Test all SAT unittest files (test*.py) existing in subdirectories of a root directory
+
+| Example:
+| >> AllTestLauncherSat.py --rootPath='.' --pattern='test_???_*.py'
+"""
+
+"""
+#### base of algorithm functionality
+
+#see http://www.voidspace.org.uk/python/articles/introduction-to-unittest.shtml
+
+import unittest
+
+import test_something
+import test_something2
+import test_something3
+
+loader = unittest.TestLoader()
+
+suite = loader.loadTestsFromModule(test_something)
+suite.addTests(loader.loadTestsFromModule(test_something2))
+suite.addTests(loader.loadTestsFromModule(test_something3))
+
+runner = unittest.TextTestRunner(verbosity=2)
+result = runner.run(suite)
+"""
+
+
+import os
+import sys
+import unittest
+import traceback
+import argparse as AP
+
+import glob
+import fnmatch
+import pprint as PP #pretty print
+
+debug = False
+verboseImport = True
+
+
+# get path to origin sources
+defaultdir = os.path.dirname(os.path.realpath(__file__))
+# get path to salomeTools sources
+satdir = defaultdir
+srcdir = os.path.join(satdir, 'src')
+cmdsdir = os.path.join(satdir, 'commands')
+
+# Make the src & commands package accessible from all code
+sys.path.insert(0, satdir)
+sys.path.insert(0, srcdir) # TODO remove that
+sys.path.insert(0, cmdsdir) # TODO remove that
+
+_user = os.environ['USER']
+# wambeke is christian at home
+_developpers = ["christian", "wambeke",] # ...who wants
+
+def errPrint(aStr):
+ """stderr to avoid write in html or xml file log message"""
+ sys.stderr.write(aStr + '\n')
+
+try:
+ import unittestpy.HTMLTestRunner as HTST
+except:
+ HTST = None
+ errPrint("""
+WARNING: no HTML output available.
+ try find 'test/unittestpy/HTMLTestRunner.py'.
+""")
+
+
+try:
+ import xmlrunner as XTST
+except:
+ XTST = None
+ errPrint("""
+WARNING: no XML output available for unittest.
+ try 'pip install unittest-xml-reporting'.
+""")
+
+
+###################################################################
+def locate(pattern, root=os.curdir):
+ """
+ Locate all files matching supplied filename pattern in and below
+ supplied root directory.
+ """
+ result = []
+ for path, dirs, files in os.walk(os.path.abspath(root)):
+ for filename in fnmatch.filter(files, pattern):
+ result.append( os.path.join(path, filename) )
+ return result
+
+def printEnv(search=""):
+ """
+ list all environment variables which name contains search string
+ example:
+ import AllTestLauncher as ATL
+ ATL.printEnv("ROOT_")
+ """
+ env=os.environ
+ for i in sorted(env):
+ if search in i:
+ print(i)
+
+def grepInEnv(search=""):
+ """
+ list all environment variables which contains search string
+ example:
+ import AllTestLauncher as ATL
+ ATL.grepInEnv("XDATA")
+ """
+ env=os.environ
+ for i in sorted(env):
+ done=False
+ for j in env[i].split(":"):
+ if search in j:
+ if not done:
+ print(i+" contains ")
+ done=True
+ print(" "+j)
+
+def format_exception(msg, limit=None, trace=None):
+ """
+ Format a stack trace and the exception information.
+ as traceback.format_exception(),
+ with all traceback only if user in ._developpers
+ """
+ etype, value, tb = sys.exc_info()
+ if _user in _developpers:
+ res = "\n" + msg
+ if tb:
+ res += "\nTraceback (most recent call last):\n"
+ res += "".join(traceback.format_tb(tb, limit)) #[:-1])
+ res += "\n<"
+ res += "\n".join(traceback.format_exception_only(etype, value))
+ return res
+ else:
+ res = "\n" + msg
+ if tb:
+ res += "\nTraceback:\n"
+ res += "".join(traceback.format_tb(tb, limit)[-1:]) #[:-1])
+ res += "\n<"
+ res += "".join(traceback.format_exception_only(etype, value))
+ return res
+
+###################################################################
+def runOnArgs(args):
+ """
+ launch tests on args.pattern files
+ """
+ fromFileOrPath = args.rootPath
+ fileTestPattern = args.pattern
+ if fromFileOrPath == None:
+ directory, name = os.path.split( os.path.realpath( __file__ ) )
+ else:
+ if os.path.isdir(fromFileOrPath):
+ directory, name = (fromFileOrPath, None)
+ fileTestPatternCurrent = fileTestPattern
+ elif os.path.isfile(fromFileOrPath):
+ directory, name = os.path.split( os.path.realpath( fromFileOrPath ) )
+ fileTestPatternCurrent = name
+ else:
+ mess = "Cannot get file or directory '%s'" % fromFileOrPath
+ errPrint("ERROR: " + mess)
+ return None
+ #raise Exception("Cannot get file or directory '%s'" % fromFileOrPath)
+
+ #files = glob.glob(os.path.join(directory, "*Test.py"))
+ files = sorted(locate(fileTestPatternCurrent, directory))
+
+ filesForTest={}
+
+ for aFile in files:
+ aDir, aName = os.path.split(aFile)
+ aImport, ext = os.path.splitext(aName)
+
+ try:
+ if aFile in list(filesForTest.keys()):
+ print("WARNING: imported yet: "+aFile)
+ else:
+ sys.path.insert(0, aDir)
+ done = True
+ if verboseImport: errPrint("try import '%s'" % aImport)
+ aModule = __import__(aImport, globals(), locals(), [])
+ del sys.path[0]
+ done = False
+ filesForTest[aFile] = (aImport, aModule)
+ except Exception as e:
+ if done:
+ del sys.path[0] #attention of sys.path appends
+ done = False
+ msg = "ERROR: AllTestLauncher: import '%s':" % aFile
+ err = format_exception(msg)
+ errPrint(err)
+ continue
+
+ listfilesForTest = sorted(filesForTest.keys())
+ result = None
+
+ errPrint("AllTestLauncher test files:\n %s" % PP.pformat(listfilesForTest))
+
+ if len(listfilesForTest) == 0:
+ if debug: errPrint("WARNING: AllTestLauncher: empty list of test files")
+ return None
+
+ loader = unittest.TestLoader()
+ suite = None
+
+ for i,k in enumerate(listfilesForTest):
+ if debug: errPrint("Test: %s %s" % (i, k))
+ if i == 0:
+ suite = loader.loadTestsFromModule( filesForTest[k][1] )
+ pass
+ else:
+ suite.addTests( loader.loadTestsFromModule( filesForTest[k][1] ) )
+ pass
+
+ if args.type == "std":
+ runner = unittest.TextTestRunner(verbosity=args.verbosity)
+ elif args.type == "html":
+ runner = HTST.HTMLTestRunner(verbosity=args.verbosity, )
+ elif args.type == "xml":
+ if args.name == 'stdout':
+ #all-in-one xml output at 'sys.stdout' for pipe redirection
+ runner = XTST.XMLTestRunner(verbosity=args.verbosity, output=sys.stdout)
+ else:
+ #one file xml per test in suite in args.name directory
+ runner = XTST.XMLTestRunner(verbosity=args.verbosity, output=args.name)
+ else:
+ errPrint("ERROR: unknown type of output: '%s'" % args.type)
+ return None
+
+ if suite != None: result = runner.run(suite)
+ return result
+
+###################################################################
+def runFromEnvVar(envVar, fileTestPattern="*Test.py"):
+ """
+ example:
+ import AllTestLauncher as ATL
+ ATL.runFromEnvVar("MICROGEN_ROOT_DIR")
+ ATL.runFromEnvVar("MICROGEN_ROOT_DIR", "aggregate_*GJKTest.py")
+ """
+ env=os.environ
+ res = []
+ for i in sorted(env):
+ if envVar in i:
+ res.append(i)
+ if len(res) > 1:
+ mess = "multiple environment variable for '%s': %s" % (envVar, str(res))
+ errPrint("ERROR: " + mess)
+ return None
+ if len(res) < 1:
+ mess = "no environment variable for '%s'" % (envVar)
+ errPrint("ERROR: " + mess)
+ return None
+ res = res[0]
+ tmp = env[res].split(":")
+ if len(tmp) > 1:
+ mess = "need only one path in environment variable '%s'" % (res)
+ errPrint("ERROR: " + mess)
+ return None
+ run(fromFileOrPath=env[res], fileTestPattern=fileTestPattern)
+
+
+###################################################################
+def getParser():
+ parser = AP.ArgumentParser(description='launch All salomeTools python tests', argument_default=None)
+
+ parser.add_argument(
+ '-d', '--debug',
+ help='set debug mode, more verbose',
+ action='store_true',
+ )
+ parser.add_argument(
+ '-v', '--verbosity',
+ help='set verbosity of unittests [0|1|2...]',
+ default=2,
+ metavar='int'
+ )
+ parser.add_argument(
+ '-r', '--rootPath',
+ help="""\
+dir name with absolute or relative path stand for root directory
+of recursive searching unittest python files
+""",
+ default=defaultdir,
+ metavar='dirPath'
+ )
+ parser.add_argument(
+ '-p', '--pattern',
+ help="file pattern for unittest files ['test_*.py'|'*Test.py'...]",
+ default="test_???_*.py", # as alphabetical ordered test site
+ metavar='filePattern'
+ )
+ parser.add_argument(
+ '-t', '--type',
+ help="type of output: ['std'(standart ascii)|'xml'|'html']",
+ default="std",
+ choices=['std', 'xml', 'html'],
+ metavar='outputType'
+ )
+ parser.add_argument(
+ '-n', '--name',
+ help="""\
+(only for type xml)
+name of directory output: ['test_reports'|...].
+If name = 'stdout' then all-in-one xml output at 'sys.stdout'. For pipe redirection:
+'>> AllTestLauncher.py -t xml -n stdout > tmp.xml'
+""",
+ default="test_reports",
+ metavar='dirName'
+ )
+ return parser
+
+#export PATH=defaultdir:${PATH}
+
+###################################################################
+if __name__ == '__main__':
+ # Make the src & command package accessible from all code
+ # as export PYTHONPATH=defaultdir:${PYTHONPATH}
+ # https://docs.python.org/2/library/os.html
+ # On some platforms, including FreeBSD and Mac OS X,
+ # setting environ may cause memory leak
+ # so use sys.path
+ # errPrint("INFO : AllTestLauncher sys.path:\n'%s'" % PP.pformat(sys.path)
+ if defaultdir not in sys.path[0]:
+ sys.path.insert(0, defaultdir)
+ errPrint("WARNING : sys.path prepend '%s'\n" % defaultdir)
+
+ args = getParser().parse_args(sys.argv[1:])
+ debug = args.debug
+ directory = os.path.realpath(args.rootPath)
+ if debug: print("INFO: args:\n %s" % PP.pformat(args))
+ sys.path.insert(0, directory) #supposed to be root of a package
+
+ runOnArgs(args)
+
+
--- /dev/null
+__all__ = ['src', 'commands', "test", "unittestpy", ]
\ No newline at end of file
--- /dev/null
+
+"""
+import os
+import gettext
+
+# get path to salomeTools sources
+satdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+srcdir = os.path.join(satdir, 'src')
+cmdsdir = os.path.join(satdir, 'commands')
+
+# load resources for internationalization
+gettext.install("salomeTools", os.path.join(srcdir, "i18n"))
+
+import application
+import check
+import clean
+import compile
+import config
+import configure
+import doc
+import environ
+import find_duplicates
+import generate
+import init
+import job
+import jobs
+import launcher
+import log
+import make
+import makeinstall
+import package
+import patch
+import prepare
+import profile
+import run
+import script
+import shell
+import source
+import template
+import test
+"""
import src.debug as DBG
# internationalization
-satdir = os.path.dirname(os.path.realpath(__file__))
+satdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
gettext.install('salomeTools', os.path.join(satdir, 'src', 'i18n'))
# Define all possible option for config command : sat config <options>
cfg.addMapping("PATHS", src.pyconf.Mapping(cfg), "The paths\n")
cfg.PATHS["APPLICATIONPATH"] = src.pyconf.Sequence(cfg.PATHS)
cfg.PATHS.APPLICATIONPATH.append(cfg.VARS.personal_applications_dir, "")
+
cfg.PATHS["PRODUCTPATH"] = src.pyconf.Sequence(cfg.PATHS)
cfg.PATHS.PRODUCTPATH.append(cfg.VARS.personal_products_dir, "")
for rule in self.get_command_line_overrides(options, ["PATHS"]):
exec('cfg.' + rule) # this cannot be factorized because of the exec
+ # AT END append APPLI_TEST directory in APPLICATIONPATH, for unittest
+ appli_test_dir = os.path.join(satdir, "test", "APPLI_TEST")
+ if appli_test_dir not in cfg.PATHS.APPLICATIONPATH:
+ cfg.PATHS.APPLICATIONPATH.append(appli_test_dir, "unittest APPLI_TEST path")
+
# =====================================================================
# Load APPLICATION config file
if application is not None:
try:
application_cfg = src.pyconf.Config(application + '.pyconf')
except IOError as e:
- raise src.SatException(_("%s, use 'config --list' to get the"
- " list of available applications.") %e)
+ raise src.SatException(
+ _("%s, use 'config --list' to get the list of available applications.") % e)
except src.pyconf.ConfigError as e:
if (not ('-e' in parser.parse_args()[1])
or ('--edit' in parser.parse_args()[1])
'open_application' not in runner.cfg): # edit user pyconf
usercfg = os.path.join(runner.cfg.VARS.personalDir,
'SAT.pyconf')
- logger.write(_("Openning %s\n" % usercfg), 3)
+ logger.write(_("Opening %s\n" % usercfg), 3)
src.system.show_in_editor(editor, usercfg, logger)
else:
# search for file <application>.pyconf and open it
pyconf_path = os.path.join(path,
runner.cfg.VARS.application + ".pyconf")
if os.path.exists(pyconf_path):
- logger.write(_("Openning %s\n" % pyconf_path), 3)
+ logger.write(_("Opening %s\n" % pyconf_path), 3)
src.system.show_in_editor(editor, pyconf_path, logger)
break
# Define all possible option for log command : sat doc <options>
parser = src.options.Options()
-parser.add_option('h', 'html', 'boolean', 'html', "Open sat html documentation in browser", None)
+parser.add_option('x', 'xml', 'boolean', 'xml', "Open sat xml/html documentation in browser (x as firefoX)", None)
parser.add_option('p', 'pdf', 'boolean', 'pdf', "Open sat pdf documentation in viewer", False)
parser.add_option('e', 'edit', 'boolean', 'edit', "edit/modify source dodumentation rst files", False)
parser.add_option('c', 'compile', 'boolean', 'compile', "how to compile html/pdf doc", False)
:rtype: str
"""
return _("""\
- Gives access to the sat documentation.
+The doc command gives access to the sat documentation.
- example:
- >> sat doc # --html as default
- >> sat doc --html
- >> sat doc --pdf""")
+example:
+>> sat doc # --xml as default
+>> sat doc --xml
+>> sat doc --pdf
+""")
def run(args, runner, logger):
'''method that is called when salomeTools is called with log parameter.
logger.write("docdir %s\n" % docDir, 6)
logger.write("options %s\n" % options, 6)
- if options.html:
+ if options.xml:
src.system.show_in_editor(runner.cfg.USER.browser, htmlFile, logger)
if options.pdf:
src.system.show_in_editor(runner.cfg.USER.pdf_viewer, pdfFile, logger)
:return: The text to display for the init command description.
:rtype: str
'''
- return _("Changes the local settings of SAT.")
+ return _("The init command Changes the local settings of SAT.")
def run(args, runner, logger):
'''method that is called when salomeTools is called with init parameter.
import os
import src
-import salomeTools
+import src.salomeTools
# Define all possible option for the make command : sat make <options>
parser = src.options.Options()
: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.
cmd_exe = command.split(" ")[0] # first part
if cmd_exe == "sat":
# use the salomeTools parser to get the options of the command
- sat_parser = salomeTools.parser
+ 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
import shutil
import itertools
import re
-import paramiko
+
+# generate problem
+try:
+ import paramiko
+except:
+ paramiko = "import paramiko impossible"
+ pass
import src
import src.ElementTree as etree
:return: The text to display for the log command description.
:rtype: str
'''
- return _("Gives access to the logs produced by the salomeTools commands.\n"
- "\nexample:\nsat log")
+ return _("""\
+The log command gives access to the logs produced by the salomeTools commands.
+
+example:
+>> sat log
+""")
def run(args, runner, logger):
'''method that is called when salomeTools is called with log parameter.
shutil.rmtree(tmp_local_working_dir)
# to decide...
- DBG.tofix("make shutil.rmtree(%s) effective" % tmp_working_dir, "", True)
+ DBG.tofix("make shutil.rmtree('%s') effective" % tmp_working_dir, "", True)
# Print again the path of the package
logger.write("\n", 2)
import src
+# Define all possible option for log command : sat run <options>
+parser = src.options.Options()
+# no option more than -h as generic default
def description():
'''method that is called when salomeTools is called with --help option.
:return: The text to display for the run command description.
:rtype: str
'''
- return _("This command runs the application launcher"
- " with the given arguments.\n\nexample:\nsat run SALOME-master")
+ return _("""\
+The run command runs the application launcher with the given arguments.
+
+example:
+>> sat run SALOME-master
+""")
def run(args, runner, logger):
'''method that is called when salomeTools is called with run parameter.
:return: The text to display for the shell command description.
:rtype: str
'''
- return _("Executes the shell command passed as argument.\n\nexample:"
- "\nsat shell --command \"ls \\-l /tmp\"")
+ return _("""\
+The shell command executes the shell commands passed as argument.
+
+example:
+>> sat shell --command "ls -l /tmp" """)
def run(args, runner, logger):
'''method that is called when salomeTools is called with shell parameter.
--- /dev/null
+
+ LOCAL :
+ {
+ base : 'default'
+ workdir : 'default'
+ log_dir : 'default'
+ archive_dir : 'default'
+ VCS : None
+ tag : None
+ }
+ PROJECTS :
+ {
+ project_file_paths :
+ [
+ ]
+ }
--- /dev/null
+
+ LOCAL :
+ {
+ base : 'default'
+ workdir : 'default'
+ log_dir : 'default'
+ archive_dir : 'default'
+ VCS : None
+ tag : None
+ }
+ PROJECTS :
+ {
+ project_file_paths :
+ [
+ "/volatile/wambeke/SAT5/SAT5_S840_MATIX24/SAT_SALOME/salome.pyconf",
+ # "/home/uranietm/proJET/saTJOBS/saT5/uranie.pyconf",
+ # cloned 2017/12 for matix
+ # "/home/matix/GitRepo/uranie/saT5/uranie.pyconf",
+ # "/volatile/wambeke/SAT5/SAT_MATIX/matix.pyconf"
+ ]
+ }
--- /dev/null
+
+ LOCAL :
+ {
+ base : 'default'
+ workdir : 'default'
+ log_dir : 'default'
+ archive_dir : 'default'
+ VCS : None
+ tag : None
+ }
+ PROJECTS :
+ {
+ project_file_paths :
+ [
+ "/home/christian/SAT_SALOME/salome.pyconf"
+ "/home/christian/SAT_MATIX/matix.pyconf"
+ ]
+ }
<span class="c1"># License along with this library; if not, write to the Free Software</span>
<span class="c1"># Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span>
-<span class="sd">"""\</span>
-<span class="sd">This file assume DEBUG functionalities use</span>
-
-<span class="sd">- print debug messages in sys.stderr for salomeTools</span>
-<span class="sd">- show pretty print debug representation from instances of SAT classes</span>
-<span class="sd"> (pretty print src.pyconf.Config), and python dict/list etc. (as 'aVariable')</span>
-
-<span class="sd">WARNING: obviously supposedly show messages in SAT development phase, not production</span>
-
-<span class="sd">usage:</span>
-<span class="sd">>> import debug as DBG</span>
-<span class="sd">>> DBG.write("aTitle", aVariable) # not shown in production </span>
-<span class="sd">>> DBG.write("aTitle", aVariable, True) # unconditionaly shown (as show=True)</span>
-
-<span class="sd">to set show message as development phase:</span>
-<span class="sd">>> DBG.push_debug(True)</span>
-
-<span class="sd">to set no show message as production phase:</span>
-<span class="sd">>> DBG.push_debug(False)</span>
-
-<span class="sd">to set show message temporary as development phase, only in a method:</span>
-<span class="sd">>> def aMethodToDebug(...):</span>
-<span class="sd">>> DBG.push_debug(True) #force show as appended status</span>
-<span class="sd">>> etc. method code with some DBG.write()</span>
-<span class="sd">>> DBG.pop_debug() #restore previous status (show or not show)</span>
-<span class="sd">>> return</span>
-
-<span class="sd">to set a message for future fix, as temporary problem to not forget:</span>
-<span class="sd">DBG.tofix("aTitle", aVariable, True/False) #True/False in production shown, or not</span>
-
-<span class="sd">in command line interface you could redirect stderr to file 'myDebug.log':</span>
-<span class="sd">>> sat compile ... 2> myDebug.log # only stderr</span>
-<span class="sd">>> sat compile ... &> myDebug.log # stdout and stderr</span>
+<span class="sd">"""</span>
+<span class="sd">This file assume DEBUG functionalities use.</span>
+<span class="sd">Print salomeTools debug messages in sys.stderr.</span>
+<span class="sd">Show pretty print debug representation from instances of SAT classes </span>
+<span class="sd">(pretty print src.pyconf.Config)</span>
+
+<span class="sd">| Warning: supposedly show messages in SAT development phase, not production</span>
+<span class="sd">| </span>
+<span class="sd">| Usage:</span>
+<span class="sd">| >> import debug as DBG</span>
+<span class="sd">| >> DBG.write("aTitle", aVariable) # not shown in production </span>
+<span class="sd">| >> DBG.write("aTitle", aVariable, True) # unconditionaly shown (as show=True)</span>
+<span class="sd">| </span>
+<span class="sd">| to set show message as development phase:</span>
+<span class="sd">| >> DBG.push_debug(True)</span>
+<span class="sd">| </span>
+<span class="sd">| to set no show message as production phase:</span>
+<span class="sd">| >> DBG.push_debug(False)</span>
+<span class="sd">| </span>
+<span class="sd">| to set show message temporary as development phase, only in a method:</span>
+<span class="sd">| >> def aMethodToDebug(...):</span>
+<span class="sd">| >> DBG.push_debug(True) #force show as appended status</span>
+<span class="sd">| >> etc. method code with some DBG.write()</span>
+<span class="sd">| >> DBG.pop_debug() #restore previous status (show or not show)</span>
+<span class="sd">| >> return</span>
+<span class="sd">| </span>
+<span class="sd">| to set a message for future fix, as temporary problem to not forget:</span>
+<span class="sd">| DBG.tofix("aTitle", aVariable, True/False) #True/False in production shown, or not</span>
+<span class="sd">| </span>
+<span class="sd">| in command line interface you could redirect stderr to file 'myDebug.log':</span>
+<span class="sd">| >> sat compile ... 2> myDebug.log # only stderr</span>
+<span class="sd">| >> sat compile ... &> myDebug.log # stdout and stderr</span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">StringIO</span> <span class="k">as</span> <span class="nn">SIO</span>
<span class="kn">import</span> <span class="nn">pprint</span> <span class="k">as</span> <span class="nn">PP</span>
<span class="n">_debug</span> <span class="o">=</span> <span class="p">[</span><span class="kc">False</span><span class="p">]</span> <span class="c1">#support push/pop for temporary activate debug outputs</span>
+<span class="n">_user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">'USER'</span><span class="p">]</span>
+<span class="c1"># wambeke is christian at home</span>
+<span class="n">_developpers</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"christian"</span><span class="p">,</span> <span class="s2">"wambeke"</span><span class="p">,</span> <span class="s2">"crouzet"</span><span class="p">]</span> <span class="c1"># crouzet, kloss ...</span>
+
+
<div class="viewcode-block" id="indent"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.indent">[docs]</a><span class="k">def</span> <span class="nf">indent</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">amount</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">ch</span><span class="o">=</span><span class="s1">' '</span><span class="p">):</span>
<span class="sd">"""indent multi lines message"""</span>
<span class="n">padding</span> <span class="o">=</span> <span class="n">amount</span> <span class="o">*</span> <span class="n">ch</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">padding</span> <span class="o">+</span> <span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">splitlines</span><span class="p">(</span><span class="kc">True</span><span class="p">))</span></div>
+<div class="viewcode-block" id="isTypeConfig"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.isTypeConfig">[docs]</a><span class="k">def</span> <span class="nf">isTypeConfig</span><span class="p">(</span><span class="n">var</span><span class="p">):</span>
+ <span class="sd">"""To know if var is instance from Config/pyconf"""</span>
+ <span class="n">typ</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">var</span><span class="p">))</span>
+ <span class="c1"># print "isTypeConfig" ,type, dir(var)</span>
+ <span class="k">if</span> <span class="s2">".pyconf.Config"</span> <span class="ow">in</span> <span class="n">typ</span><span class="p">:</span> <span class="k">return</span> <span class="kc">True</span>
+ <span class="k">if</span> <span class="s2">".pyconf.Mapping"</span> <span class="ow">in</span> <span class="n">typ</span><span class="p">:</span> <span class="k">return</span> <span class="kc">True</span>
+ <span class="k">if</span> <span class="s2">".pyconf.Sequence"</span> <span class="ow">in</span> <span class="n">typ</span><span class="p">:</span> <span class="k">return</span> <span class="kc">True</span>
+ <span class="c1"># print "NOT isTypeConfig %s" % typ</span>
+ <span class="k">return</span> <span class="kc">False</span></div>
+
<div class="viewcode-block" id="write"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.write">[docs]</a><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">var</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s2">"</span><span class="se">\n</span><span class="s2">#### DEBUG: </span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span><span class="p">):</span>
<span class="sd">"""write sys.stderr a message if _debug[-1]==True or optionaly force=True"""</span>
<span class="k">if</span> <span class="n">_debug</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">force</span><span class="p">:</span>
- <span class="k">if</span> <span class="s1">'src.pyconf.'</span> <span class="ow">in</span> <span class="nb">str</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">var</span><span class="p">)):</span>
- <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">getStrConfigDbg</span><span class="p">(</span><span class="n">var</span><span class="p">))))</span>
- <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">var</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="nb">str</span><span class="p">:</span>
- <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">PP</span><span class="o">.</span><span class="n">pformat</span><span class="p">(</span><span class="n">var</span><span class="p">))))</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">var</span><span class="p">)))</span>
+ <span class="n">tvar</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">var</span><span class="p">)</span>
+ <span class="n">typ</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">tvar</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">isTypeConfig</span><span class="p">(</span><span class="n">var</span><span class="p">):</span>
+ <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">COLS</span><span class="o">.</span><span class="n">toColor</span><span class="p">(</span><span class="n">getStrConfigDbg</span><span class="p">(</span><span class="n">var</span><span class="p">)))))</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="s1">'UnittestStream'</span> <span class="ow">in</span> <span class="n">typ</span><span class="p">:</span>
+ <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">var</span><span class="o">.</span><span class="n">getLogs</span><span class="p">())))</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">tvar</span> <span class="ow">is</span> <span class="ow">not</span> <span class="nb">str</span> <span class="ow">and</span> <span class="n">tvar</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">unicode</span><span class="p">:</span>
+ <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">PP</span><span class="o">.</span><span class="n">pformat</span><span class="p">(</span><span class="n">var</span><span class="p">))))</span>
+ <span class="k">return</span>
+ <span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fmt</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">indent</span><span class="p">(</span><span class="n">var</span><span class="p">)))</span>
+ <span class="k">return</span>
<span class="k">return</span></div>
<div class="viewcode-block" id="tofix"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.tofix">[docs]</a><span class="k">def</span> <span class="nf">tofix</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">var</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
- <span class="sd">"""\</span>
+ <span class="sd">"""</span>
<span class="sd"> write sys.stderr a message if _debug[-1]==True or optionaly force=True</span>
-<span class="sd"> use this only if no logger accessible for classic </span>
-<span class="sd"> logger.warning(message) or logger.debug(message)</span>
+<span class="sd"> use this only if no logger accessible for classic logger.warning(message)</span>
<span class="sd"> """</span>
<span class="n">fmt</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">#### TOFIX: </span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span>
<span class="n">write</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">var</span><span class="p">,</span> <span class="n">force</span><span class="p">,</span> <span class="n">fmt</span><span class="p">)</span></div>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">ERROR: pop_debug: too much pop."</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span></div>
+
+<div class="viewcode-block" id="format_exception"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.format_exception">[docs]</a><span class="k">def</span> <span class="nf">format_exception</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">trace</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+ <span class="sd">"""</span>
+<span class="sd"> Format a stack trace and the exception information.</span>
+<span class="sd"> as traceback.format_exception(), without color</span>
+<span class="sd"> with traceback only if (_debug) or (DBG._user in DBG._developpers)</span>
+<span class="sd"> """</span>
+ <span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">tb</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">_debug</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="ow">or</span> <span class="p">(</span><span class="n">_user</span> <span class="ow">in</span> <span class="n">_developpers</span><span class="p">):</span>
+ <span class="n">res</span> <span class="o">=</span> <span class="n">msg</span>
+ <span class="k">if</span> <span class="n">tb</span><span class="p">:</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Traceback (most recent call last):</span><span class="se">\n</span><span class="s2">"</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_tb</span><span class="p">(</span><span class="n">tb</span><span class="p">,</span> <span class="n">limit</span><span class="p">))</span> <span class="c1"># [:-1])</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exception_only</span><span class="p">(</span><span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+ <span class="k">return</span> <span class="n">res</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">res</span> <span class="o">=</span> <span class="n">msg</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exception_only</span><span class="p">(</span><span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+ <span class="k">return</span> <span class="n">res</span></div>
+
+<div class="viewcode-block" id="format_color_exception"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.format_color_exception">[docs]</a><span class="k">def</span> <span class="nf">format_color_exception</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">trace</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+ <span class="sd">"""</span>
+<span class="sd"> Format a stack trace and the exception information.</span>
+<span class="sd"> as traceback.format_exception(), with color</span>
+<span class="sd"> with traceback only if (_debug) or (DBG._user in DBG._developpers)</span>
+<span class="sd"> """</span>
+ <span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">tb</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">_debug</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span> <span class="ow">or</span> <span class="p">(</span><span class="n">_user</span> <span class="ow">in</span> <span class="n">_developpers</span><span class="p">):</span>
+ <span class="n">res</span> <span class="o">=</span> <span class="s2">"<red>"</span> <span class="o">+</span> <span class="n">msg</span>
+ <span class="k">if</span> <span class="n">tb</span><span class="p">:</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">"<yellow></span><span class="se">\n</span><span class="s2">Traceback (most recent call last):</span><span class="se">\n</span><span class="s2">"</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_tb</span><span class="p">(</span><span class="n">tb</span><span class="p">,</span> <span class="n">limit</span><span class="p">))</span> <span class="c1"># [:-1])</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"><red>"</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exception_only</span><span class="p">(</span><span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+ <span class="k">return</span> <span class="n">res</span> <span class="o">+</span> <span class="s2">"<reset>"</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">res</span> <span class="o">=</span> <span class="s2">"<red>"</span> <span class="o">+</span> <span class="n">msg</span> <span class="c1"># + "<bright>"</span>
+ <span class="n">res</span> <span class="o">+=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exception_only</span><span class="p">(</span><span class="n">etype</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
+ <span class="k">return</span> <span class="n">res</span> <span class="o">+</span> <span class="s2">"<reset>"</span></div>
+
+
<span class="c1">###############################################</span>
<span class="c1"># utilitaires divers pour debug</span>
<span class="c1">###############################################</span>
<div class="viewcode-block" id="OutStream"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.OutStream">[docs]</a><span class="k">class</span> <span class="nc">OutStream</span><span class="p">(</span><span class="n">SIO</span><span class="o">.</span><span class="n">StringIO</span><span class="p">):</span>
- <span class="sd">"""utility class for pyconf.Config output iostream"""</span>
+ <span class="sd">"""</span>
+<span class="sd"> utility class for pyconf.Config output iostream</span>
+<span class="sd"> """</span>
<div class="viewcode-block" id="OutStream.close"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.OutStream.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="sd">"""because Config.__save__ calls close() stream as file</span>
+ <span class="sd">"""</span>
+<span class="sd"> because Config.__save__ calls close() stream as file</span>
<span class="sd"> keep value before lost as self.value</span>
<span class="sd"> """</span>
<span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
<span class="k">return</span> <span class="n">outStream</span><span class="o">.</span><span class="n">value</span></div>
<div class="viewcode-block" id="getStrConfigDbg"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.getStrConfigDbg">[docs]</a><span class="k">def</span> <span class="nf">getStrConfigDbg</span><span class="p">(</span><span class="n">config</span><span class="p">):</span>
- <span class="sd">"""\</span>
+ <span class="sd">"""</span>
<span class="sd"> set string as saveConfigDbg, </span>
<span class="sd"> as (path expression evaluation) for debug</span>
<span class="sd"> """</span>
<div class="viewcode-block" id="saveConfigDbg"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.debug.saveConfigDbg">[docs]</a><span class="k">def</span> <span class="nf">saveConfigDbg</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
<span class="sd">"""pyconf returns multilines (path expression evaluation) for debug"""</span>
- <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
+ <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">aStream</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="c1"># as config.__save__()</span></div>
-<span class="k">def</span> <span class="nf">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
+<span class="k">def</span> <span class="nf">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indent</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">nb</span><span class="p">):</span>
<span class="sd">"""pyconf inspired from Mapping.__save__"""</span>
<span class="n">debug</span> <span class="o">=</span> <span class="kc">False</span>
+ <span class="n">nbp</span> <span class="o">=</span> <span class="n">nb</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># depth recursive</span>
<span class="k">if</span> <span class="n">indent</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">indentp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
- <span class="n">indentp</span> <span class="o">=</span> <span class="n">indentp</span> <span class="o">+</span> <span class="mi">2</span>
+ <span class="n">indentp</span> <span class="o">=</span> <span class="n">indent</span> <span class="o">+</span> <span class="mi">2</span>
+
+ <span class="k">if</span> <span class="n">nbp</span> <span class="o">></span> <span class="mi">10</span><span class="p">:</span> <span class="c1"># protection</span>
+ <span class="c1"># raise Exception("!!! ERROR: Circular reference after %s" % aStream.getvalue())</span>
+ <span class="c1"># raise Exception("!!! ERROR: Circular reference %s" % path)</span>
+ <span class="n">aStream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"<red>!!! ERROR: Circular reference after </span><span class="si">%s</span><span class="s2"><reset></span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">path</span><span class="p">)</span>
+ <span class="k">return</span>
+
<span class="n">indstr</span> <span class="o">=</span> <span class="n">indent</span> <span class="o">*</span> <span class="s1">' '</span> <span class="c1"># '':no indent, ' ':indent</span>
<span class="n">strType</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">config</span><span class="p">))</span>
+ <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="nb">print</span> <span class="s2">"saveDbg Type"</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">strType</span>
+
<span class="k">if</span> <span class="s2">"Sequence"</span> <span class="ow">in</span> <span class="n">strType</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">config</span><span class="p">)):</span>
- <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">config</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"[</span><span class="si">%i</span><span class="s2">]"</span> <span class="o">%</span> <span class="n">i</span><span class="p">)</span>
+ <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">config</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"[</span><span class="si">%i</span><span class="s2">]"</span> <span class="o">%</span> <span class="n">i</span><span class="p">,</span> <span class="n">nbp</span><span class="p">)</span>
<span class="k">return</span>
- <span class="k">try</span><span class="p">:</span>
+ <span class="sd">'''</span>
+<span class="sd"> if "Reference" in strType:</span>
+<span class="sd"> try:</span>
+<span class="sd"> #evaluate = value.resolve(config)</span>
+<span class="sd"> aStream.write("<header>%s%s<reset> : %s <yellow>--> '%s'<reset>\n" % (indstr, path, config, str(config)))</span>
+<span class="sd"> except Exception as e: </span>
+<span class="sd"> aStream.write("<header>%s%s<reset> : <red>!!! ERROR: %s !!!<reset>\n" % (indstr, path, e.message)) </span>
+<span class="sd"> return</span>
+<span class="sd"> '''</span>
+
+ <span class="k">try</span><span class="p">:</span> <span class="c1">#type config, mapping</span>
<span class="n">order</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="s1">'order'</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="s1">'data'</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">aStream</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"</span><span class="si">%s%s</span><span class="s2"> : '</span><span class="si">%s</span><span class="s2">'</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">indstr</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">config</span><span class="p">)))</span>
<span class="k">return</span>
- <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">order</span><span class="p">):</span>
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">data</span><span class="p">):</span> <span class="c1">#order): # data as sort alphabetical, order as initial order</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="n">strType</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
- <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="nb">print</span> <span class="n">indstr</span> <span class="o">+</span> <span class="s1">'strType = </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">strType</span><span class="p">,</span> <span class="n">key</span>
+ <span class="k">if</span> <span class="n">debug</span><span class="p">:</span> <span class="nb">print</span> <span class="s1">'strType'</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">strType</span>
<span class="k">if</span> <span class="s2">"Config"</span> <span class="ow">in</span> <span class="n">strType</span><span class="p">:</span>
- <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">key</span><span class="p">)</span>
+ <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">key</span><span class="p">,</span> <span class="n">nbp</span><span class="p">)</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="s2">"Mapping"</span> <span class="ow">in</span> <span class="n">strType</span><span class="p">:</span>
- <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">key</span><span class="p">)</span>
+ <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">key</span><span class="p">,</span> <span class="n">nbp</span><span class="p">)</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="s2">"Sequence"</span> <span class="ow">in</span> <span class="n">strType</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)):</span>
- <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">value</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">key</span><span class="o">+</span><span class="s2">"[</span><span class="si">%i</span><span class="s2">]"</span> <span class="o">%</span> <span class="n">i</span><span class="p">)</span>
+ <span class="n">_saveConfigRecursiveDbg</span><span class="p">(</span><span class="n">value</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">aStream</span><span class="p">,</span> <span class="n">indentp</span><span class="p">,</span> <span class="n">path</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">key</span><span class="o">+</span><span class="s2">"[</span><span class="si">%i</span><span class="s2">]"</span> <span class="o">%</span> <span class="n">i</span><span class="p">,</span> <span class="n">nbp</span><span class="p">)</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="s2">"Expression"</span> <span class="ow">in</span> <span class="n">strType</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">tempfile</span>
<span class="kn">import</span> <span class="nn">src</span>
-<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">printcolors</span>
-<span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">xmlManager</span>
+<span class="kn">import</span> <span class="nn">printcolors</span>
+<span class="kn">import</span> <span class="nn">xmlManager</span>
+
+<span class="kn">import</span> <span class="nn">src.debug</span> <span class="k">as</span> <span class="nn">DBG</span>
<span class="n">log_macro_command_file_expression</span> <span class="o">=</span> <span class="s2">"^[0-9]</span><span class="si">{8}</span><span class="s2">_+[0-9]</span><span class="si">{6}</span><span class="s2">_+.*\.xml$"</span>
<span class="n">log_all_command_file_expression</span> <span class="o">=</span> <span class="s2">"^.*[0-9]</span><span class="si">{8}</span><span class="s2">_+[0-9]</span><span class="si">{6}</span><span class="s2">_+.*\.xml$"</span>
<span class="sd"> Class to handle log mechanism.</span>
<span class="sd"> """</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
- <span class="n">config</span><span class="p">,</span>
+ <span class="n">config</span><span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">silent_sysstd</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">all_in_terminal</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">micro_command</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
<span class="sd"> :param silent_sysstd boolean: if True, do not write anything</span>
<span class="sd"> in terminal.</span>
<span class="sd"> """</span>
+ <span class="n">DBG</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"src.logger.Logger"</span><span class="p">,</span> <span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">config</span>
<span class="bp">self</span><span class="o">.</span><span class="n">default_level</span> <span class="o">=</span> <span class="mi">3</span>
<span class="bp">self</span><span class="o">.</span><span class="n">silentSysStd</span> <span class="o">=</span> <span class="n">silent_sysstd</span>
<span class="sd"> to the message 0 < level < 6.</span>
<span class="sd"> :param screenOnly boolean: if True, do not write in log file.</span>
<span class="sd"> """</span>
+ <span class="c1"># avoid traces if unittest</span>
+ <span class="k">if</span> <span class="n">isCurrentLoggerUnittest</span><span class="p">():</span>
+ <span class="c1"># print("doing unittest")</span>
+ <span class="n">sendMessageToCurrentLogger</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span>
+ <span class="k">return</span>
+
<span class="c1"># do not write message starting with \r to log file</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"</span><span class="se">\r</span><span class="s2">"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">screenOnly</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">xmlFile</span><span class="o">.</span><span class="n">append_node_text</span><span class="p">(</span><span class="s2">"Log"</span><span class="p">,</span>
<span class="c1"># Write the file on the hard drive</span>
<span class="n">xmlHat</span><span class="o">.</span><span class="n">write_tree</span><span class="p">(</span><span class="s1">'hat.xsl'</span><span class="p">)</span></div>
+
+
+<span class="c1"># TODO for future</span>
+<span class="c1"># prepare skip to logging logger sat5.1</span>
+<span class="c1"># suppose only one logger in sat5.1</span>
+<span class="n">_currentLogger</span> <span class="o">=</span> <span class="p">[]</span>
+
+<div class="viewcode-block" id="getCurrentLogger"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.logger.getCurrentLogger">[docs]</a><span class="k">def</span> <span class="nf">getCurrentLogger</span><span class="p">():</span>
+ <span class="sd">"""get current logging logger, set as DefaultLogger if not set yet"""</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">_currentLogger</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">src.loggingSimple</span> <span class="k">as</span> <span class="nn">LOGSI</span>
+ <span class="n">logger</span> <span class="o">=</span> <span class="n">LOGSI</span><span class="o">.</span><span class="n">getDefaultLogger</span><span class="p">()</span>
+ <span class="n">_currentLogger</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"set by default current logger as </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">logger</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">_currentLogger</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
+
+<div class="viewcode-block" id="getDefaultLogger"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.logger.getDefaultLogger">[docs]</a><span class="k">def</span> <span class="nf">getDefaultLogger</span><span class="p">():</span>
+ <span class="sd">"""get simple logging logger DefaultLogger, set it as current"""</span>
+ <span class="kn">import</span> <span class="nn">src.loggingSimple</span> <span class="k">as</span> <span class="nn">LOGSI</span>
+ <span class="n">logger</span> <span class="o">=</span> <span class="n">LOGSI</span><span class="o">.</span><span class="n">getDefaultLogger</span><span class="p">()</span>
+ <span class="n">setCurrentLogger</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span> <span class="c1"># set it as current</span>
+ <span class="k">return</span> <span class="n">logger</span></div>
+
+<div class="viewcode-block" id="getUnittestLogger"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.logger.getUnittestLogger">[docs]</a><span class="k">def</span> <span class="nf">getUnittestLogger</span><span class="p">():</span>
+ <span class="sd">"""get simple logging logger UnittestLogger, set it as current"""</span>
+ <span class="kn">import</span> <span class="nn">src.loggingSimple</span> <span class="k">as</span> <span class="nn">LOGSI</span>
+ <span class="n">logger</span> <span class="o">=</span> <span class="n">LOGSI</span><span class="o">.</span><span class="n">getUnittestLogger</span><span class="p">()</span>
+ <span class="n">setCurrentLogger</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span> <span class="c1"># set it as current</span>
+ <span class="k">return</span> <span class="n">logger</span></div>
+
+<div class="viewcode-block" id="setCurrentLogger"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.logger.setCurrentLogger">[docs]</a><span class="k">def</span> <span class="nf">setCurrentLogger</span><span class="p">(</span><span class="n">logger</span><span class="p">):</span>
+ <span class="sd">"""temporary send all in stdout as simple logging logger"""</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">_currentLogger</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">_currentLogger</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">logger</span><span class="p">)</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"set current logger as </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">logger</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">_currentLogger</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">logger</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+ <span class="c1"># logger.debug("quit current logger as default %s" % _currentLogger[0].name)</span>
+ <span class="n">_currentLogger</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">logger</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"change current logger as </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">logger</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">_currentLogger</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
+
+<div class="viewcode-block" id="isCurrentLoggerUnittest"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.logger.isCurrentLoggerUnittest">[docs]</a><span class="k">def</span> <span class="nf">isCurrentLoggerUnittest</span><span class="p">():</span>
+ <span class="n">logger</span> <span class="o">=</span> <span class="n">getCurrentLogger</span><span class="p">()</span>
+ <span class="k">if</span> <span class="s2">"Unittest"</span> <span class="ow">in</span> <span class="n">logger</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+ <span class="n">res</span> <span class="o">=</span> <span class="kc">True</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">res</span> <span class="o">=</span> <span class="kc">False</span>
+ <span class="n">DBG</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"isCurrentLoggerUnittest </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">logger</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">res</span></div>
+
+<div class="viewcode-block" id="sendMessageToCurrentLogger"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.logger.sendMessageToCurrentLogger">[docs]</a><span class="k">def</span> <span class="nf">sendMessageToCurrentLogger</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">level</span><span class="p">):</span>
+ <span class="sd">"""</span>
+<span class="sd"> assume relay from obsolescent</span>
+<span class="sd"> logger.write(msg, 1/2/3...) to future</span>
+<span class="sd"> logging.critical/warning/info...(msg) (as logging package tips)</span>
+<span class="sd"> """</span>
+ <span class="n">logger</span> <span class="o">=</span> <span class="n">getCurrentLogger</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">level</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">lev</span> <span class="o">=</span> <span class="mi">2</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">lev</span> <span class="o">=</span> <span class="n">level</span>
+ <span class="k">if</span> <span class="n">lev</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">critical</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">lev</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">lev</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">lev</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">lev</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="n">lev</span> <span class="o">>=</span> <span class="mi">6</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="s2">"What is this level: '</span><span class="si">%s</span><span class="s2">' for message:</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">level</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
+ <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+ <span class="k">return</span></div>
</pre></div>
</div>
<span class="sd"> """</span>
<span class="n">msg</span> <span class="o">=</span> <span class="s2">""</span>
<span class="c1"># Do nothing if there are no options</span>
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s2">"No available options."</span><span class="p">)</span>
+
+ <span class="c1">#there is -h option, always</span>
+ <span class="c1">#if len(self.options) == 0:</span>
+ <span class="c1"># return _("No available options.")</span>
<span class="c1"># for all options, gets its values. </span>
<span class="c1"># "shortname" is an mandatory field of the options, could be '' </span>
<span class="n">msg</span> <span class="o">+=</span> <span class="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="n">ooh</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="k">return</span> <span class="n">msg</span></div>
-<div class="viewcode-block" id="Options.print_help"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.options.Options.print_help">[docs]</a> <span class="k">def</span> <span class="nf">print_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="sd">"""</span>
-<span class="sd"> Method that display all options stored in self.options and there help</span>
-<span class="sd"> </span>
-<span class="sd"> :return: None</span>
-<span class="sd"> """</span>
- <span class="nb">print</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_help</span><span class="p">())</span>
- <span class="k">return</span></div>
-
<div class="viewcode-block" id="Options.indent"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.options.Options.indent">[docs]</a> <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">amount</span><span class="p">,</span> <span class="n">car</span><span class="o">=</span><span class="s2">" "</span><span class="p">):</span>
<span class="sd">"""indent multi lines message"""</span>
<span class="n">padding</span> <span class="o">=</span> <span class="n">amount</span> <span class="o">*</span> <span class="n">car</span>
<div class="viewcode-block" id="Options.filterLevel"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.options.Options.filterLevel">[docs]</a> <span class="k">def</span> <span class="nf">filterLevel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aLevel</span><span class="p">):</span>
<span class="sd">"""filter level logging values"""</span>
- <span class="kn">import</span> <span class="nn">src.loggingSat</span> <span class="k">as</span> <span class="nn">LOG</span>
+ <span class="kn">import</span> <span class="nn">src.loggingSimple</span> <span class="k">as</span> <span class="nn">LOG</span>
<span class="n">aLev</span> <span class="o">=</span> <span class="n">aLevel</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="n">knownLevels</span> <span class="o">=</span> <span class="n">LOG</span><span class="o">.</span><span class="n">_knownLevels</span>
<span class="n">maxLen</span> <span class="o">=</span> <span class="nb">max</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">knownLevels</span><span class="p">])</span>
<div class="viewcode-block" id="Options.filterList2"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.options.Options.filterList2">[docs]</a> <span class="k">def</span> <span class="nf">filterList2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aStr</span><span class="p">):</span>
<span class="sd">"""filter a list as 'KERNEL,YACS,etc.'"""</span>
<span class="n">aList</span> <span class="o">=</span> <span class="n">aStr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)</span>
+ <span class="c1"># fix list leading ',' as ',KERNEL,...'</span>
+ <span class="n">aList</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">aList</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s2">""</span><span class="p">]</span> <span class="c1"># split old list leadin "," as ",KERNEL,ETC..."</span>
<span class="k">return</span> <span class="n">aList</span></div>
Usage
=====
-* Show (in a web browser) the sat documentation: ::
+* Show (in a web browser) the sat documentation in format xml/html: ::
- sat doc --html
+ sat doc --xml
* Show (in evince, for example) the (same) sat documentation in format pdf: ::
</div>
<div class="section" id="module-src.debug">
<span id="src-debug-module"></span><h2>src.debug module<a class="headerlink" href="#module-src.debug" title="Permalink to this headline">¶</a></h2>
-<p>This file assume DEBUG functionalities use</p>
-<ul class="simple">
-<li>print debug messages in sys.stderr for salomeTools</li>
-<li>show pretty print debug representation from instances of SAT classes
-(pretty print src.pyconf.Config), and python dict/list etc. (as ‘aVariable’)</li>
-</ul>
-<p>WARNING: obviously supposedly show messages in SAT development phase, not production</p>
-<p>usage:
->> import debug as DBG
->> DBG.write(“aTitle”, aVariable) # not shown in production
->> DBG.write(“aTitle”, aVariable, True) # unconditionaly shown (as show=True)</p>
-<p>to set show message as development phase:
->> DBG.push_debug(True)</p>
-<p>to set no show message as production phase:
->> DBG.push_debug(False)</p>
-<p>to set show message temporary as development phase, only in a method:
->> def aMethodToDebug(…):
->> DBG.push_debug(True) #force show as appended status
->> etc. method code with some DBG.write()
->> DBG.pop_debug() #restore previous status (show or not show)
->> return</p>
-<p>to set a message for future fix, as temporary problem to not forget:
-DBG.tofix(“aTitle”, aVariable, True/False) #True/False in production shown, or not</p>
-<p>in command line interface you could redirect stderr to file ‘myDebug.log’:
->> sat compile … 2> myDebug.log # only stderr
->> sat compile … &> myDebug.log # stdout and stderr</p>
+<p>This file assume DEBUG functionalities use.
+Print salomeTools debug messages in sys.stderr.
+Show pretty print debug representation from instances of SAT classes
+(pretty print src.pyconf.Config)</p>
+<div class="line-block">
+<div class="line">Warning: supposedly show messages in SAT development phase, not production</div>
+<div class="line"><br /></div>
+<div class="line">Usage:</div>
+<div class="line">>> import debug as DBG</div>
+<div class="line">>> DBG.write(“aTitle”, aVariable) # not shown in production </div>
+<div class="line">>> DBG.write(“aTitle”, aVariable, True) # unconditionaly shown (as show=True)</div>
+<div class="line"><br /></div>
+<div class="line">to set show message as development phase:</div>
+<div class="line">>> DBG.push_debug(True)</div>
+<div class="line"><br /></div>
+<div class="line">to set no show message as production phase:</div>
+<div class="line">>> DBG.push_debug(False)</div>
+<div class="line"><br /></div>
+<div class="line">to set show message temporary as development phase, only in a method:</div>
+<div class="line">>> def aMethodToDebug(…):</div>
+<div class="line">>> DBG.push_debug(True) #force show as appended status</div>
+<div class="line">>> etc. method code with some DBG.write()</div>
+<div class="line">>> DBG.pop_debug() #restore previous status (show or not show)</div>
+<div class="line">>> return</div>
+<div class="line"><br /></div>
+<div class="line">to set a message for future fix, as temporary problem to not forget:</div>
+<div class="line">DBG.tofix(“aTitle”, aVariable, True/False) #True/False in production shown, or not</div>
+<div class="line"><br /></div>
+<div class="line">in command line interface you could redirect stderr to file ‘myDebug.log’:</div>
+<div class="line">>> sat compile … 2> myDebug.log # only stderr</div>
+<div class="line">>> sat compile … &> myDebug.log # stdout and stderr</div>
+</div>
<dl class="class">
<dt id="src.debug.InStream">
<em class="property">class </em><code class="descclassname">src.debug.</code><code class="descname">InStream</code><span class="sig-paren">(</span><em>buf=''</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#InStream"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.InStream" title="Permalink to this definition">¶</a></dt>
</dd></dl>
+<dl class="function">
+<dt id="src.debug.format_color_exception">
+<code class="descclassname">src.debug.</code><code class="descname">format_color_exception</code><span class="sig-paren">(</span><em>msg</em>, <em>limit=None</em>, <em>trace=None</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#format_color_exception"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.format_color_exception" title="Permalink to this definition">¶</a></dt>
+<dd><p>Format a stack trace and the exception information.
+as traceback.format_exception(), with color
+with traceback only if (_debug) or (DBG._user in DBG._developpers)</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="src.debug.format_exception">
+<code class="descclassname">src.debug.</code><code class="descname">format_exception</code><span class="sig-paren">(</span><em>msg</em>, <em>limit=None</em>, <em>trace=None</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#format_exception"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.format_exception" title="Permalink to this definition">¶</a></dt>
+<dd><p>Format a stack trace and the exception information.
+as traceback.format_exception(), without color
+with traceback only if (_debug) or (DBG._user in DBG._developpers)</p>
+</dd></dl>
+
<dl class="function">
<dt id="src.debug.getLocalEnv">
<code class="descclassname">src.debug.</code><code class="descname">getLocalEnv</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#getLocalEnv"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.getLocalEnv" title="Permalink to this definition">¶</a></dt>
<dd><p>indent multi lines message</p>
</dd></dl>
+<dl class="function">
+<dt id="src.debug.isTypeConfig">
+<code class="descclassname">src.debug.</code><code class="descname">isTypeConfig</code><span class="sig-paren">(</span><em>var</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#isTypeConfig"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.isTypeConfig" title="Permalink to this definition">¶</a></dt>
+<dd><p>To know if var is instance from Config/pyconf</p>
+</dd></dl>
+
<dl class="function">
<dt id="src.debug.pop_debug">
<code class="descclassname">src.debug.</code><code class="descname">pop_debug</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#pop_debug"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.pop_debug" title="Permalink to this definition">¶</a></dt>
<dt id="src.debug.tofix">
<code class="descclassname">src.debug.</code><code class="descname">tofix</code><span class="sig-paren">(</span><em>title</em>, <em>var=''</em>, <em>force=None</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/debug.html#tofix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.debug.tofix" title="Permalink to this definition">¶</a></dt>
<dd><p>write sys.stderr a message if _debug[-1]==True or optionaly force=True
-use this only if no logger accessible for classic
-logger.warning(message) or logger.debug(message)</p>
+use this only if no logger accessible for classic logger.warning(message)</p>
</dd></dl>
<dl class="function">
<p>Implements the classes and method relative to the logging</p>
<dl class="class">
<dt id="src.logger.Logger">
-<em class="property">class </em><code class="descclassname">src.logger.</code><code class="descname">Logger</code><span class="sig-paren">(</span><em>config</em>, <em>silent_sysstd=False</em>, <em>all_in_terminal=False</em>, <em>micro_command=False</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#Logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.Logger" title="Permalink to this definition">¶</a></dt>
+<em class="property">class </em><code class="descclassname">src.logger.</code><code class="descname">Logger</code><span class="sig-paren">(</span><em>config=None</em>, <em>silent_sysstd=False</em>, <em>all_in_terminal=False</em>, <em>micro_command=False</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#Logger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.Logger" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Class to handle log mechanism.</p>
<dl class="method">
</table>
</dd></dl>
+<dl class="function">
+<dt id="src.logger.getCurrentLogger">
+<code class="descclassname">src.logger.</code><code class="descname">getCurrentLogger</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#getCurrentLogger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.getCurrentLogger" title="Permalink to this definition">¶</a></dt>
+<dd><p>get current logging logger, set as DefaultLogger if not set yet</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="src.logger.getDefaultLogger">
+<code class="descclassname">src.logger.</code><code class="descname">getDefaultLogger</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#getDefaultLogger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.getDefaultLogger" title="Permalink to this definition">¶</a></dt>
+<dd><p>get simple logging logger DefaultLogger, set it as current</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="src.logger.getUnittestLogger">
+<code class="descclassname">src.logger.</code><code class="descname">getUnittestLogger</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#getUnittestLogger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.getUnittestLogger" title="Permalink to this definition">¶</a></dt>
+<dd><p>get simple logging logger UnittestLogger, set it as current</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="src.logger.isCurrentLoggerUnittest">
+<code class="descclassname">src.logger.</code><code class="descname">isCurrentLoggerUnittest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#isCurrentLoggerUnittest"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.isCurrentLoggerUnittest" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
<dl class="function">
<dt id="src.logger.list_log_file">
<code class="descclassname">src.logger.</code><code class="descname">list_log_file</code><span class="sig-paren">(</span><em>dirPath</em>, <em>expression</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#list_log_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.list_log_file" title="Permalink to this definition">¶</a></dt>
</table>
</dd></dl>
+<dl class="function">
+<dt id="src.logger.sendMessageToCurrentLogger">
+<code class="descclassname">src.logger.</code><code class="descname">sendMessageToCurrentLogger</code><span class="sig-paren">(</span><em>message</em>, <em>level</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#sendMessageToCurrentLogger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.sendMessageToCurrentLogger" title="Permalink to this definition">¶</a></dt>
+<dd><p>assume relay from obsolescent
+logger.write(msg, 1/2/3…) to future
+logging.critical/warning/info…(msg) (as logging package tips)</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="src.logger.setCurrentLogger">
+<code class="descclassname">src.logger.</code><code class="descname">setCurrentLogger</code><span class="sig-paren">(</span><em>logger</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#setCurrentLogger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.setCurrentLogger" title="Permalink to this definition">¶</a></dt>
+<dd><p>temporary send all in stdout as simple logging logger</p>
+</dd></dl>
+
<dl class="function">
<dt id="src.logger.show_command_log">
<code class="descclassname">src.logger.</code><code class="descname">show_command_log</code><span class="sig-paren">(</span><em>logFilePath</em>, <em>cmd</em>, <em>application</em>, <em>notShownCommands</em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/logger.html#show_command_log"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.logger.show_command_log" title="Permalink to this definition">¶</a></dt>
</table>
</dd></dl>
-<dl class="method">
-<dt id="src.options.Options.print_help">
-<code class="descname">print_help</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/src/options.html#Options.print_help"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#src.options.Options.print_help" title="Permalink to this definition">¶</a></dt>
-<dd><p>Method that display all options stored in self.options and there help</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
</dd></dl>
</div>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Command prepare" href="prepare.html" />
- <link rel="prev" title="Usage of SAlomeTools" href="../usage_of_sat.html" />
+ <link rel="prev" title="Command doc" href="doc.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
- <li>Previous: <a href="../usage_of_sat.html" title="previous chapter">Usage of SAlomeTools</a></li>
+ <li>Previous: <a href="doc.html" title="previous chapter">Command doc</a></li>
<li>Next: <a href="prepare.html" title="next chapter">Command prepare</a></li>
</ul></li>
</ul>
<div class="section" id="usage">
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this headline">¶</a></h2>
<ul>
-<li><p class="first">Show (in a web browser) the sat documentation:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sat</span> <span class="n">doc</span> <span class="o">--</span><span class="n">html</span>
+<li><p class="first">Show (in a web browser) the sat documentation in format xml/html:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">sat</span> <span class="n">doc</span> <span class="o">--</span><span class="n">xml</span>
</pre></div>
</div>
</li>
</li>
<li><a href="commands/apidoc/src.html#src.ElementTree.ElementTree.findtext">findtext() (src.ElementTree.ElementTree method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="commands/apidoc/src.html#src.environment.SalomeEnviron.finish">finish() (src.environment.SalomeEnviron method)</a>
<ul>
<li><a href="commands/apidoc/src.html#src.fileEnviron.LauncherFileEnviron.finish">(src.fileEnviron.LauncherFileEnviron method)</a>
</li>
</ul></li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="commands/apidoc/src.html#src.logger.Logger.flush">flush() (src.logger.Logger method)</a>
<ul>
</li>
</ul></li>
<li><a href="commands/apidoc/src.colorama.html#src.colorama.winterm.WinTerm.fore">fore() (src.colorama.winterm.WinTerm method)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.debug.format_color_exception">format_color_exception() (in module src.debug)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.debug.format_exception">format_exception() (in module src.debug)</a>
</li>
<li><a href="commands/apidoc/src.colorama.html#src.colorama.ansi.AnsiCursor.FORWARD">FORWARD() (src.colorama.ansi.AnsiCursor method)</a>
</li>
</li>
<li><a href="commands/apidoc/src.html#src.product.get_product_config">get_product_config() (in module src.product)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="commands/apidoc/src.html#src.product.get_product_dependencies">get_product_dependencies() (in module src.product)</a>
</li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="commands/apidoc/src.html#src.product.get_product_section">get_product_section() (in module src.product)</a>
</li>
<li><a href="commands/apidoc/src.html#src.product.get_products_infos">get_products_infos() (in module src.product)</a>
</li>
</ul></li>
<li><a href="commands/apidoc/src.html#src.pyconf.ConfigReader.getChar">getChar() (src.pyconf.ConfigReader method)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.logger.getCurrentLogger">getCurrentLogger() (in module src.logger)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.logger.getDefaultLogger">getDefaultLogger() (in module src.logger)</a>
</li>
<li><a href="commands/apidoc/src.html#src.options.Options.getDetailOption">getDetailOption() (src.options.Options method)</a>
</li>
<li><a href="commands/apidoc/src.html#src.test_module.getTmpDirDEFAULT">getTmpDirDEFAULT() (in module src.test_module)</a>
</li>
<li><a href="commands/apidoc/src.html#src.pyconf.ConfigReader.getToken">getToken() (src.pyconf.ConfigReader method)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.logger.getUnittestLogger">getUnittestLogger() (in module src.logger)</a>
</li>
<li><a href="commands/apidoc/src.html#src.system.git_extract">git_extract() (in module src.system)</a>
</li>
<li><a href="commands/apidoc/src.colorama.html#src.colorama.ansitowin32.is_stream_closed">is_stream_closed() (in module src.colorama.ansitowin32)</a>
</li>
<li><a href="commands/apidoc/src.html#src.architecture.is_windows">is_windows() (in module src.architecture)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.logger.isCurrentLoggerUnittest">isCurrentLoggerUnittest() (in module src.logger)</a>
</li>
<li><a href="commands/apidoc/src.html#src.Path.isdir">isdir() (src.Path method)</a>
</li>
<li><a href="commands/apidoc/src.html#src.Path.isfile">isfile() (src.Path method)</a>
</li>
<li><a href="commands/apidoc/src.html#src.Path.islink">islink() (src.Path method)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.debug.isTypeConfig">isTypeConfig() (in module src.debug)</a>
</li>
<li><a href="commands/apidoc/src.html#src.pyconf.isWord">isWord() (in module src.pyconf)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="commands/apidoc/src.html#src.printcolors.print_color_range">print_color_range() (in module src.printcolors)</a>
-</li>
- <li><a href="commands/apidoc/src.html#src.options.Options.print_help">print_help() (src.options.Options method)</a>
</li>
<li><a href="commands/apidoc/src.html#src.print_info">print_info() (in module src)</a>
</li>
<li><a href="commands/apidoc/src.html#src.fileEnviron.ScreenEnviron">ScreenEnviron (class in src.fileEnviron)</a>
</li>
<li><a href="commands/apidoc/src.html#src.test_module.Test.search_known_errors">search_known_errors() (src.test_module.Test method)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.logger.sendMessageToCurrentLogger">sendMessageToCurrentLogger() (in module src.logger)</a>
</li>
<li><a href="commands/apidoc/src.html#src.pyconf.Sequence">Sequence (class in src.pyconf)</a>
</li>
</li>
</ul></li>
<li><a href="commands/apidoc/src.colorama.html#src.colorama.win32.SetConsoleTextAttribute">SetConsoleTextAttribute() (in module src.colorama.win32)</a>
+</li>
+ <li><a href="commands/apidoc/src.html#src.logger.setCurrentLogger">setCurrentLogger() (in module src.logger)</a>
</li>
<li><a href="commands/apidoc/src.html#src.pyconf.Container.setPath">setPath() (src.pyconf.Container method)</a>
</li>
<li><a href="commands/apidoc/src.html#src.pyconf.ConfigReader.setStream">setStream() (src.pyconf.ConfigReader method)</a>
</li>
<li><a href="commands/apidoc/src.html#src.environment.Shell">Shell (class in src.environment)</a>
-</li>
- <li><a href="commands/apidoc/src.colorama.html#src.colorama.ansitowin32.AnsiToWin32.should_wrap">should_wrap() (src.colorama.ansitowin32.AnsiToWin32 method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="commands/apidoc/src.colorama.html#src.colorama.ansitowin32.AnsiToWin32.should_wrap">should_wrap() (src.colorama.ansitowin32.AnsiToWin32 method)</a>
+</li>
<li><a href="commands/apidoc/src.html#src.logger.show_command_log">show_command_log() (in module src.logger)</a>
</li>
<li><a href="commands/apidoc/src.html#src.system.show_in_editor">show_in_editor() (in module src.system)</a>
-Search.setIndex({docnames:["commands/apidoc/modules","commands/apidoc/src","commands/apidoc/src.colorama","commands/application","commands/clean","commands/compile","commands/config","commands/doc","commands/environ","commands/generate","commands/launcher","commands/log","commands/package","commands/prepare","configuration","index","installation_of_sat","release_notes/release_notes_5.0.0","usage_of_sat","write_command"],envversion:52,filenames:["commands/apidoc/modules.rst","commands/apidoc/src.rst","commands/apidoc/src.colorama.rst","commands/application.rst","commands/clean.rst","commands/compile.rst","commands/config.rst","commands/doc.rst","commands/environ.rst","commands/generate.rst","commands/launcher.rst","commands/log.rst","commands/package.rst","commands/prepare.rst","configuration.rst","index.rst","installation_of_sat.rst","release_notes/release_notes_5.0.0.rst","usage_of_sat.rst","write_command.rst"],objects:{"":{src:[1,0,0,"-"]},"src.ElementTree":{Comment:[1,1,1,""],Element:[1,1,1,""],ElementTree:[1,2,1,""],PI:[1,1,1,""],ProcessingInstruction:[1,1,1,""],QName:[1,2,1,""],SubElement:[1,1,1,""],TreeBuilder:[1,2,1,""],XML:[1,1,1,""],XMLTreeBuilder:[1,2,1,""],dump:[1,1,1,""],fromstring:[1,1,1,""],iselement:[1,1,1,""],iterparse:[1,2,1,""],parse:[1,1,1,""],tostring:[1,1,1,""]},"src.ElementTree.ElementTree":{find:[1,3,1,""],findall:[1,3,1,""],findtext:[1,3,1,""],getiterator:[1,3,1,""],getroot:[1,3,1,""],parse:[1,3,1,""],write:[1,3,1,""]},"src.ElementTree.TreeBuilder":{close:[1,3,1,""],data:[1,3,1,""],end:[1,3,1,""],start:[1,3,1,""]},"src.ElementTree.XMLTreeBuilder":{close:[1,3,1,""],doctype:[1,3,1,""],feed:[1,3,1,""]},"src.ElementTree.iterparse":{next:[1,3,1,""]},"src.Path":{base:[1,3,1,""],chmod:[1,3,1,""],copy:[1,3,1,""],copydir:[1,3,1,""],copyfile:[1,3,1,""],copylink:[1,3,1,""],dir:[1,3,1,""],exists:[1,3,1,""],isdir:[1,3,1,""],isfile:[1,3,1,""],islink:[1,3,1,""],list:[1,3,1,""],make:[1,3,1,""],readlink:[1,3,1,""],rm:[1,3,1,""],smartcopy:[1,3,1,""],symlink:[1,3,1,""]},"src.architecture":{get_distrib_version:[1,1,1,""],get_distribution:[1,1,1,""],get_nb_proc:[1,1,1,""],get_python_version:[1,1,1,""],get_user:[1,1,1,""],is_windows:[1,1,1,""]},"src.colorama":{ansi:[2,0,0,"-"],ansitowin32:[2,0,0,"-"],initialise:[2,0,0,"-"],win32:[2,0,0,"-"],winterm:[2,0,0,"-"]},"src.colorama.ansi":{AnsiBack:[2,2,1,""],AnsiCodes:[2,2,1,""],AnsiCursor:[2,2,1,""],AnsiFore:[2,2,1,""],AnsiStyle:[2,2,1,""],clear_line:[2,1,1,""],clear_screen:[2,1,1,""],code_to_chars:[2,1,1,""],set_title:[2,1,1,""]},"src.colorama.ansi.AnsiBack":{BLACK:[2,5,1,""],BLUE:[2,5,1,""],CYAN:[2,5,1,""],GREEN:[2,5,1,""],LIGHTBLACK_EX:[2,5,1,""],LIGHTBLUE_EX:[2,5,1,""],LIGHTCYAN_EX:[2,5,1,""],LIGHTGREEN_EX:[2,5,1,""],LIGHTMAGENTA_EX:[2,5,1,""],LIGHTRED_EX:[2,5,1,""],LIGHTWHITE_EX:[2,5,1,""],LIGHTYELLOW_EX:[2,5,1,""],MAGENTA:[2,5,1,""],RED:[2,5,1,""],RESET:[2,5,1,""],WHITE:[2,5,1,""],YELLOW:[2,5,1,""]},"src.colorama.ansi.AnsiCursor":{BACK:[2,3,1,""],DOWN:[2,3,1,""],FORWARD:[2,3,1,""],POS:[2,3,1,""],UP:[2,3,1,""]},"src.colorama.ansi.AnsiFore":{BLACK:[2,5,1,""],BLUE:[2,5,1,""],CYAN:[2,5,1,""],GREEN:[2,5,1,""],LIGHTBLACK_EX:[2,5,1,""],LIGHTBLUE_EX:[2,5,1,""],LIGHTCYAN_EX:[2,5,1,""],LIGHTGREEN_EX:[2,5,1,""],LIGHTMAGENTA_EX:[2,5,1,""],LIGHTRED_EX:[2,5,1,""],LIGHTWHITE_EX:[2,5,1,""],LIGHTYELLOW_EX:[2,5,1,""],MAGENTA:[2,5,1,""],RED:[2,5,1,""],RESET:[2,5,1,""],WHITE:[2,5,1,""],YELLOW:[2,5,1,""]},"src.colorama.ansi.AnsiStyle":{BRIGHT:[2,5,1,""],DIM:[2,5,1,""],NORMAL:[2,5,1,""],RESET_ALL:[2,5,1,""]},"src.colorama.ansitowin32":{AnsiToWin32:[2,2,1,""],StreamWrapper:[2,2,1,""],is_a_tty:[2,1,1,""],is_stream_closed:[2,1,1,""]},"src.colorama.ansitowin32.AnsiToWin32":{ANSI_CSI_RE:[2,5,1,""],ANSI_OSC_RE:[2,5,1,""],call_win32:[2,3,1,""],convert_ansi:[2,3,1,""],convert_osc:[2,3,1,""],extract_params:[2,3,1,""],get_win32_calls:[2,3,1,""],reset_all:[2,3,1,""],should_wrap:[2,3,1,""],write:[2,3,1,""],write_and_convert:[2,3,1,""],write_plain_text:[2,3,1,""]},"src.colorama.ansitowin32.StreamWrapper":{write:[2,3,1,""]},"src.colorama.initialise":{colorama_text:[2,1,1,""],deinit:[2,1,1,""],init:[2,1,1,""],reinit:[2,1,1,""],reset_all:[2,1,1,""],wrap_stream:[2,1,1,""]},"src.colorama.win32":{SetConsoleTextAttribute:[2,1,1,""],winapi_test:[2,1,1,""]},"src.colorama.winterm":{WinColor:[2,2,1,""],WinStyle:[2,2,1,""],WinTerm:[2,2,1,""]},"src.colorama.winterm.WinColor":{BLACK:[2,5,1,""],BLUE:[2,5,1,""],CYAN:[2,5,1,""],GREEN:[2,5,1,""],GREY:[2,5,1,""],MAGENTA:[2,5,1,""],RED:[2,5,1,""],YELLOW:[2,5,1,""]},"src.colorama.winterm.WinStyle":{BRIGHT:[2,5,1,""],BRIGHT_BACKGROUND:[2,5,1,""],NORMAL:[2,5,1,""]},"src.colorama.winterm.WinTerm":{back:[2,3,1,""],cursor_adjust:[2,3,1,""],erase_line:[2,3,1,""],erase_screen:[2,3,1,""],fore:[2,3,1,""],get_attrs:[2,3,1,""],get_position:[2,3,1,""],reset_all:[2,3,1,""],set_attrs:[2,3,1,""],set_console:[2,3,1,""],set_cursor_position:[2,3,1,""],set_title:[2,3,1,""],style:[2,3,1,""]},"src.compilation":{Builder:[1,2,1,""]},"src.compilation.Builder":{build_configure:[1,3,1,""],check:[1,3,1,""],cmake:[1,3,1,""],complete_environment:[1,3,1,""],configure:[1,3,1,""],do_batch_script_build:[1,3,1,""],do_default_build:[1,3,1,""],do_python_script_build:[1,3,1,""],do_script_build:[1,3,1,""],hack_libtool:[1,3,1,""],install:[1,3,1,""],log:[1,3,1,""],log_command:[1,3,1,""],make:[1,3,1,""],prepare:[1,3,1,""],put_txt_log_in_appli_log_dir:[1,3,1,""],wmake:[1,3,1,""]},"src.debug":{InStream:[1,2,1,""],OutStream:[1,2,1,""],getLocalEnv:[1,1,1,""],getStrConfigDbg:[1,1,1,""],getStrConfigStd:[1,1,1,""],indent:[1,1,1,""],pop_debug:[1,1,1,""],push_debug:[1,1,1,""],saveConfigDbg:[1,1,1,""],saveConfigStd:[1,1,1,""],tofix:[1,1,1,""],write:[1,1,1,""]},"src.debug.OutStream":{close:[1,3,1,""]},"src.environment":{Environ:[1,2,1,""],FileEnvWriter:[1,2,1,""],SalomeEnviron:[1,2,1,""],Shell:[1,2,1,""],load_environment:[1,1,1,""]},"src.environment.Environ":{append:[1,3,1,""],append_value:[1,3,1,""],command_value:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.environment.FileEnvWriter":{write_cfgForPy_file:[1,3,1,""],write_env_file:[1,3,1,""]},"src.environment.SalomeEnviron":{add_comment:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],dump:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],get_names:[1,3,1,""],is_defined:[1,3,1,""],load_cfg_environment:[1,3,1,""],prepend:[1,3,1,""],run_env_script:[1,3,1,""],run_simple_env_script:[1,3,1,""],set:[1,3,1,""],set_a_product:[1,3,1,""],set_application_env:[1,3,1,""],set_cpp_env:[1,3,1,""],set_full_environ:[1,3,1,""],set_products:[1,3,1,""],set_python_libdirs:[1,3,1,""],set_salome_generic_product_env:[1,3,1,""],set_salome_minimal_product_env:[1,3,1,""]},"src.fileEnviron":{BashFileEnviron:[1,2,1,""],BatFileEnviron:[1,2,1,""],ContextFileEnviron:[1,2,1,""],FileEnviron:[1,2,1,""],LauncherFileEnviron:[1,2,1,""],ScreenEnviron:[1,2,1,""],get_file_environ:[1,1,1,""],special_path_separator:[1,1,1,""]},"src.fileEnviron.BashFileEnviron":{command_value:[1,3,1,""],finish:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.BatFileEnviron":{add_comment:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.ContextFileEnviron":{add_echo:[1,3,1,""],add_warning:[1,3,1,""],append_value:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.FileEnviron":{add_comment:[1,3,1,""],add_echo:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],append_value:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.LauncherFileEnviron":{add:[1,3,1,""],add_comment:[1,3,1,""],add_echo:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],append_value:[1,3,1,""],change_to_launcher:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.ScreenEnviron":{add_comment:[1,3,1,""],add_echo:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],command_value:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],run_env_script:[1,3,1,""],set:[1,3,1,""],write:[1,3,1,""]},"src.fork":{batch:[1,1,1,""],batch_salome:[1,1,1,""],launch_command:[1,1,1,""],show_progress:[1,1,1,""],write_back:[1,1,1,""]},"src.logger":{Logger:[1,2,1,""],date_to_datetime:[1,1,1,""],list_log_file:[1,1,1,""],show_command_log:[1,1,1,""],timedelta_total_seconds:[1,1,1,""],update_hat_xml:[1,1,1,""]},"src.logger.Logger":{add_link:[1,3,1,""],end_write:[1,3,1,""],error:[1,3,1,""],flush:[1,3,1,""],put_initial_xml_fields:[1,3,1,""],write:[1,3,1,""]},"src.options":{OptResult:[1,2,1,""],Options:[1,2,1,""]},"src.options.Options":{add_option:[1,3,1,""],debug_write:[1,3,1,""],filterLevel:[1,3,1,""],filterList2:[1,3,1,""],getDetailOption:[1,3,1,""],get_help:[1,3,1,""],indent:[1,3,1,""],parse_args:[1,3,1,""],print_help:[1,3,1,""]},"src.printcolors":{cleancolor:[1,1,1,""],print_color_map:[1,1,1,""],print_color_range:[1,1,1,""],print_value:[1,1,1,""],printc:[1,1,1,""],printcError:[1,1,1,""],printcHeader:[1,1,1,""],printcHighlight:[1,1,1,""],printcInfo:[1,1,1,""],printcLabel:[1,1,1,""],printcSuccess:[1,1,1,""],printcWarning:[1,1,1,""]},"src.product":{check_config_exists:[1,1,1,""],check_installation:[1,1,1,""],check_source:[1,1,1,""],get_base_install_dir:[1,1,1,""],get_install_dir:[1,1,1,""],get_product_components:[1,1,1,""],get_product_config:[1,1,1,""],get_product_dependencies:[1,1,1,""],get_product_section:[1,1,1,""],get_products_infos:[1,1,1,""],product_compiles:[1,1,1,""],product_has_env_script:[1,1,1,""],product_has_logo:[1,1,1,""],product_has_patches:[1,1,1,""],product_has_salome_gui:[1,1,1,""],product_has_script:[1,1,1,""],product_is_autotools:[1,1,1,""],product_is_cmake:[1,1,1,""],product_is_cpp:[1,1,1,""],product_is_debug:[1,1,1,""],product_is_dev:[1,1,1,""],product_is_fixed:[1,1,1,""],product_is_generated:[1,1,1,""],product_is_mpi:[1,1,1,""],product_is_native:[1,1,1,""],product_is_salome:[1,1,1,""],product_is_smesh_plugin:[1,1,1,""],product_is_vcs:[1,1,1,""],product_is_verbose:[1,1,1,""]},"src.pyconf":{Config:[1,2,1,""],ConfigError:[1,4,1,""],ConfigFormatError:[1,4,1,""],ConfigInputStream:[1,2,1,""],ConfigList:[1,2,1,""],ConfigMerger:[1,2,1,""],ConfigOutputStream:[1,2,1,""],ConfigReader:[1,2,1,""],ConfigResolutionError:[1,4,1,""],Container:[1,2,1,""],Expression:[1,2,1,""],Mapping:[1,2,1,""],Reference:[1,2,1,""],Sequence:[1,2,1,""],deepCopyMapping:[1,1,1,""],defaultMergeResolve:[1,1,1,""],defaultStreamOpener:[1,1,1,""],isWord:[1,1,1,""],makePath:[1,1,1,""],overwriteMergeResolve:[1,1,1,""]},"src.pyconf.Config":{Namespace:[1,2,1,""],addNamespace:[1,3,1,""],getByPath:[1,3,1,""],load:[1,3,1,""],removeNamespace:[1,3,1,""]},"src.pyconf.ConfigInputStream":{close:[1,3,1,""],read:[1,3,1,""],readline:[1,3,1,""]},"src.pyconf.ConfigList":{getByPath:[1,3,1,""]},"src.pyconf.ConfigMerger":{handleMismatch:[1,3,1,""],merge:[1,3,1,""],mergeMapping:[1,3,1,""],mergeSequence:[1,3,1,""],overwriteKeys:[1,3,1,""]},"src.pyconf.ConfigOutputStream":{close:[1,3,1,""],flush:[1,3,1,""],write:[1,3,1,""]},"src.pyconf.ConfigReader":{getChar:[1,3,1,""],getToken:[1,3,1,""],load:[1,3,1,""],location:[1,3,1,""],match:[1,3,1,""],parseFactor:[1,3,1,""],parseKeyValuePair:[1,3,1,""],parseMapping:[1,3,1,""],parseMappingBody:[1,3,1,""],parseReference:[1,3,1,""],parseScalar:[1,3,1,""],parseSequence:[1,3,1,""],parseSuffix:[1,3,1,""],parseTerm:[1,3,1,""],parseValue:[1,3,1,""],setStream:[1,3,1,""]},"src.pyconf.Container":{evaluate:[1,3,1,""],setPath:[1,3,1,""],writeToStream:[1,3,1,""],writeValue:[1,3,1,""]},"src.pyconf.Expression":{evaluate:[1,3,1,""]},"src.pyconf.Mapping":{addMapping:[1,3,1,""],get:[1,3,1,""],iteritems:[1,3,1,""],iterkeys:[1,3,1,""],keys:[1,3,1,""],writeToStream:[1,3,1,""]},"src.pyconf.Reference":{addElement:[1,3,1,""],findConfig:[1,3,1,""],resolve:[1,3,1,""]},"src.pyconf.Sequence":{SeqIter:[1,2,1,""],append:[1,3,1,""],writeToStream:[1,3,1,""]},"src.pyconf.Sequence.SeqIter":{next:[1,3,1,""]},"src.system":{archive_extract:[1,1,1,""],cvs_extract:[1,1,1,""],git_extract:[1,1,1,""],show_in_editor:[1,1,1,""],svn_extract:[1,1,1,""]},"src.template":{MyTemplate:[1,2,1,""],substitute:[1,1,1,""]},"src.template.MyTemplate":{delimiter:[1,5,1,""],pattern:[1,5,1,""]},"src.test_module":{Test:[1,2,1,""],getTmpDirDEFAULT:[1,1,1,""]},"src.test_module.Test":{generate_launching_commands:[1,3,1,""],generate_script:[1,3,1,""],get_test_timeout:[1,3,1,""],get_tmp_dir:[1,3,1,""],prepare_testbase:[1,3,1,""],prepare_testbase_from_dir:[1,3,1,""],prepare_testbase_from_git:[1,3,1,""],prepare_testbase_from_svn:[1,3,1,""],read_results:[1,3,1,""],run_all_tests:[1,3,1,""],run_grid_tests:[1,3,1,""],run_script:[1,3,1,""],run_session_tests:[1,3,1,""],run_testbase_tests:[1,3,1,""],run_tests:[1,3,1,""],search_known_errors:[1,3,1,""],write_test_margin:[1,3,1,""]},"src.xmlManager":{ReadXmlFile:[1,2,1,""],XmlLogFile:[1,2,1,""],add_simple_node:[1,1,1,""],append_node_attrib:[1,1,1,""],find_node_by_attrib:[1,1,1,""],write_report:[1,1,1,""]},"src.xmlManager.ReadXmlFile":{getRootAttrib:[1,3,1,""],get_attrib:[1,3,1,""],get_node_text:[1,3,1,""]},"src.xmlManager.XmlLogFile":{add_simple_node:[1,3,1,""],append_node_attrib:[1,3,1,""],append_node_text:[1,3,1,""],write_tree:[1,3,1,""]},src:{ElementTree:[1,0,0,"-"],Path:[1,2,1,""],SatException:[1,4,1,""],activate_mesa_property:[1,1,1,""],architecture:[1,0,0,"-"],check_config_has_application:[1,1,1,""],check_config_has_profile:[1,1,1,""],colorama:[2,0,0,"-"],compilation:[1,0,0,"-"],config_has_application:[1,1,1,""],debug:[1,0,0,"-"],deepcopy_list:[1,1,1,""],ensure_path_exists:[1,1,1,""],environment:[1,0,0,"-"],fileEnviron:[1,0,0,"-"],find_file_in_lpath:[1,1,1,""],fork:[1,0,0,"-"],get_base_path:[1,1,1,""],get_cfg_param:[1,1,1,""],get_launcher_name:[1,1,1,""],get_log_path:[1,1,1,""],get_property_in_product_cfg:[1,1,1,""],get_salome_version:[1,1,1,""],get_tmp_filename:[1,1,1,""],handleRemoveReadonly:[1,1,1,""],logger:[1,0,0,"-"],merge_dicts:[1,1,1,""],only_numbers:[1,1,1,""],options:[1,0,0,"-"],parse_date:[1,1,1,""],print_info:[1,1,1,""],printcolors:[1,0,0,"-"],product:[1,0,0,"-"],pyconf:[1,0,0,"-"],read_config_from_a_file:[1,1,1,""],remove_item_from_list:[1,1,1,""],replace_in_file:[1,1,1,""],system:[1,0,0,"-"],template:[1,0,0,"-"],test_module:[1,0,0,"-"],xmlManager:[1,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","exception","Python exception"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:exception","5":"py:attribute"},terms:{"0x36fa5f0":[],"0x37b8f90":[],"0x37f8420":[],"0x44e4620":[],"0x4986ff0":[],"16be":1,"16le":1,"9abc":1,"boolean":[1,19],"case":1,"char":1,"class":[1,2,19],"default":[1,3,5,6,8,10,11,12,13,18,19],"export":13,"final":[1,6,13],"float":1,"function":[1,2,19],"import":[1,8,19],"int":[1,11],"long":[1,4],"new":[1,13,19],"return":[1,8,19],"short":1,"true":[1,2],"try":1,"var":[1,8,19],And:[1,6,8],But:19,CVS:12,For:[1,8,13,15,19],Has:1,One:1,POS:2,The:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19],Then:[13,14],There:14,These:8,Theses:4,Use:[3,4,5,6,8,9,10,13],Used:1,Useful:18,VCS:[4,12],__init__:[],__save__:1,__setattr__:1,_appli:3,_blank:1,_build:8,_debug:1,_launch:8,_ld_library_path:8,_sre:[1,2],a_b_c_:1,abool:1,about:[1,14],absolut:12,access:[1,2,11],account:8,act:[1,2],action:1,activ:[1,13],activate_mesa_properti:1,actual:[1,2,16],add:[1,5,15],add_com:1,add_echo:1,add_lin:1,add_link:1,add_opt:[1,19],add_simple_nod:1,add_warn:1,added:1,addel:1,adding:19,addit:[1,5,14],additional_dir:1,additional_env:1,addmap:1,addnamespac:1,adequ:1,adot:1,advanc:1,affect:2,afil:1,after:[1,5,16],again:1,agent:13,aim:1,alevel:1,algorithm:19,all:[1,2,4,6,8,9,13,14,18,19],all_in_termin:1,allow:[1,5,6,9,15,18],alphanumer:1,alreadi:[12,19],also:[1,8,13,14,19],alter:13,amethodtodebug:1,amount:1,ani:[1,2,6,11,13],anoth:[1,14],ansi:[0,1],ansi_csi_r:2,ansi_escape_cod:2,ansi_osc_r:2,ansiback:2,ansicod:2,ansicursor:2,ansifor:2,ansistyl:2,ansitowin32:[0,1],apart:2,api:1,append:[1,8,12],append_node_attrib:1,append_node_text:1,append_valu:1,appli:[1,6,9,13],applic:[1,4,5,6,8,9,10,11,13,15,19],application_nam:3,appropri:1,arch:12,architectur:[0,12,14],archiv:[1,12,13],archive_extract:1,archive_info:13,arg:[1,2,19],arglist:1,argument:[1,19],ascii:[1,7],ask:1,assign:1,assum:1,astr:1,astream:1,atitl:1,attibut:1,attr:[1,2],attrib:1,attribut:[1,2],authent:13,author:1,automat:[6,8],autoreset:2,autotool:[1,5],avail:6,avari:1,avoid:13,award:1,back:2,backtick:1,base:[1,2,14],bash:[1,8,13],bashfileenviron:1,bat:[1,8],batch:1,batch_salom:1,batfileenviron:1,becaus:1,been:[1,2],befor:[1,5],begin:1,behavior:19,being:1,belong:1,below:8,between:[1,19],bienvenu:1,big:5,bigger:1,bin:8,binari:12,black:2,blogmatrix:1,blue:2,bom:1,bonjour:19,bool:1,both:[1,8,9],bracket:1,branch:13,bright:2,bright_background:2,bring:[9,13],browser:[1,6,7,11,14],buf:1,build:[1,4,5,8,14],build_conf_opt:1,build_configur:1,build_sourc:5,builder:1,built:1,call:[1,2,8,10,19],call_win32:2,callabl:1,can:[1,3,8,13,14,15,19],cannot:1,car:1,care:4,carri:1,catalog:[3,10],cfg:[1,8,19],cfg_env:1,cfgforpi:1,chang:[1,3,18,19],change_to_launch:1,charact:[1,2],charg:10,check:[1,5,8],check_config_exist:1,check_config_has_appl:1,check_config_has_profil:1,check_instal:1,check_sourc:1,check_src:1,checkout:[1,13],chmod:1,choic:6,circumst:1,clash:1,classic:1,clean:[1,5,11,15],clean_al:[5,18],clean_build_aft:5,clean_instal:5,cleancolor:1,clear_lin:2,clear_screen:2,cli:[11,18],cli_:19,client:1,clone:13,close:1,closest:1,cmake:[1,5],cmake_opt:5,cmd:1,co7:12,code:[1,2,8],code_to_char:2,color:[1,2],colorama:[0,1],colorama_text:2,column:1,com:1,come:6,command:[1,2,14,16,18],command_nam:1,command_opt:18,command_r:1,command_valu:1,comment:[1,14],commentari:1,commit:4,common:1,commonli:1,compat:1,compil:[0,7,8,9,11,13,15],compil_script:5,complementari:8,complet:[5,6,13,14],complete_environ:1,compon:[1,3,9],componon:9,compress:12,comput:[1,9,12],concaten:1,concern:13,config:[1,13,14,15,18],config_has_appl:1,configerror:1,configformaterror:1,configinputstream:1,configlist:1,configmerg:1,configoutputstream:1,configread:1,configresolutionerror:1,configur:[1,15,19],configure_opt:1,configut:3,conflict:1,conform:9,consist:1,consol:1,construct:[1,15,17],contain:[1,14,19],content:0,context:[1,18],contextfileenviron:1,continu:1,control:12,conveni:1,convert:2,convert_ansi:2,convert_osc:2,copi:[1,3,6,10,18],copydir:1,copyfil:1,copylink:1,copyright:1,corba:9,correct:1,correl:1,correspond:[1,8,11,13],could:[1,4,8,16],cpp:[1,9],creat:[1,3,4,8,10,12,13,14,15],creation:12,current:[1,6,14,18,19],cursor_adjust:2,cvs:1,cvs_extract:1,cvs_info:13,cvspass:13,cwd:1,cyan:2,dai:1,data:[1,6,19],date:[1,14],date_to_datetim:1,datetim:1,david:1,dbg:1,debug:[0,6,8,13],debug_writ:1,decid:1,declar:13,deep:1,deepcopy_list:1,deepcopymap:1,def:[1,8,19],default_valu:1,defaultmergeresolv:1,defaultstreamopen:1,defin:[1,4,5,6,8,9,14,19],definit:1,deinit:2,delai:1,delaiapp:1,deleg:2,delet:12,delimit:1,delta:1,depend:[1,5,12],deriv:1,describ:1,descript:[1,19],design:1,destnam:1,detail:1,detar:16,detect:1,determin:1,dev:1,develop:[1,4,6,8,13,19],dict:1,dict_arg:1,dictionari:[1,14],differ:8,dim:2,dir:[1,6,13],dir_info:13,directli:[8,11,16],directori:[1,3,4,5,6,8,10,11,12,13,14,16,18,19],dirpath:1,displai:[1,5,6,7,11,19],distant:3,distinguish:8,distrib:1,distribut:[1,3,9],divis:1,dixt:1,do_batch_script_build:1,do_default_build:1,do_python_script_build:1,do_script_build:1,doc:15,doctyp:1,document:[7,9,14,19],doe:[1,8,13],dollar:1,don:9,done:[8,18],dot:1,dove:1,down:2,download:[1,13],drive:1,dst:1,due:1,dump:1,duplic:5,dure:13,dynam:14,each:[1,3,10,13,14],earlier:1,earliest:1,echo:1,edit:[6,7,13],editor:[1,6,7,14],eearch:1,either:[1,8],eleg:1,elem:1,element:1,element_factori:1,elementtre:0,els:[1,19],embed:12,empti:1,enable_simple_env_script:1,enclos:1,encod:1,end:[1,2,8],end_writ:1,ensur:1,ensure_path_exist:1,entri:1,env:8,env_build:8,env_info:1,env_launch:8,env_script:8,environ:[0,9,14,15],equal:5,eras:11,erase_lin:2,erase_screen:2,error:1,etc:[1,14,15],etre:1,eval:1,evalu:1,event:1,everyth:5,evinc:7,exactli:1,exampl:[1,4,5,6,7,8,12,13,15,18],exc:1,except:[1,13,18],execut:[1,5,13,18],exhaust:[14,18],exist:[1,12,13,18],exot:1,expect:1,explain:8,explicitli:1,explor:6,express:[1,6],extens:[1,19],extra:1,extract:1,extract_param:2,fact:19,factor:1,factori:1,fail:[1,5],fals:[1,2],far:1,favorit:6,feed:1,field:1,file:[1,3,5,6,7,8,10,11,12,13,14,15,19],file_nam:1,file_path:1,fileenviron:0,fileenvwrit:1,filein:1,filenam:1,filepath:1,filter:[1,4],filterlevel:1,filterlist2:1,fin:1,find:[1,6,15,16],find_file_in_lpath:1,find_node_by_attrib:1,findal:1,findconfig:1,findtext:1,finish:1,firefox:[7,11,14],first:[1,8,13,19],fix:1,flag:5,flush:1,fmt:1,follow:[1,8,19],for_packag:1,forbuild:1,forc:[1,12,13],force_patch:13,fore:2,forget:1,fork:0,form:1,format:[1,7,8,14],forward:[2,3,10],found:1,four:8,french:19,from:[1,2,6,7,8,9,12,13,19],from_what:1,fromstr:1,full:1,full_launched_command:1,fun:6,func:1,futur:1,gdb:8,gedit:7,gencat:[3,10],gener:[1,2,3,8,10,15,18],generate_launching_command:1,generate_script:1,generic_opt:18,geom:5,get:[1,6,7,13,14,19],get_attr:2,get_attrib:1,get_base_install_dir:1,get_base_path:1,get_cfg_param:1,get_distrib_vers:1,get_distribut:1,get_file_environ:1,get_help:1,get_install_dir:1,get_launcher_nam:1,get_log_path:1,get_method:13,get_nam:1,get_nb_proc:1,get_node_text:1,get_posit:2,get_product_compon:1,get_product_config:1,get_product_depend:1,get_product_sect:1,get_products_info:1,get_property_in_product_cfg:1,get_python_vers:1,get_salome_vers:1,get_test_timeout:1,get_tmp_dir:1,get_tmp_filenam:1,get_us:1,get_win32_cal:2,getbypath:1,getchar:1,getdetailopt:1,getiter:1,getlocalenv:1,getroot:1,getrootattrib:1,getstrconfigdbg:1,getstrconfigstd:1,gettmpdir:1,gettmpdirdefault:1,gettoken:1,git:[1,12],git_extract:1,git_info:13,gitconfig:13,give:[1,3,14,19],given:[1,2,3,8,10],global:1,goe:1,green:2,grei:2,grep:6,grid:1,gui:1,hack_libtool:1,had:1,handl:[1,2,8],handlemismatch:1,handleremovereadonli:1,hard:1,harri:1,has:[1,2,8,19],has_salome_hui:1,has_timed_out:1,hat:1,have:[1,3,4,9,10,13],header:1,help:[1,19],helpstr:1,here:[1,8,14,19],hierarchi:1,highlight:1,himself:8,hold:10,home:6,hour:1,how:[1,7,8,13,14],html:[1,7],http:[1,2],hxx2salom:9,ident:1,identifi:1,ignor:[1,9],ignorelist:1,imag:13,implement:[1,2,8],includ:[1,8,12,14],indent:1,index:1,indic:1,indirect:1,info:[1,6,13],inform:[1,6,7,12,13,14],init:[1,2],initi:1,initialis:[0,1],inmap:1,input:1,input_list:1,insid:13,instal:[1,4,5,14,15,18],install_dir:8,instanc:[1,2,19],instanti:1,instead:1,instream:1,instruct:[1,14],intal:12,interact:11,interfac:[1,18],intern:1,invalid:1,ioerror:1,iostream:1,is_a_tti:2,is_defin:1,is_salome_modul:[4,8],is_stream_clos:2,is_window:1,isdir:1,isel:1,isfil:1,islink:1,issu:2,isword:1,item:1,iter:1,iteritem:1,iterkei:1,iterpars:1,its:[1,5,6,8,14],ivar:1,jane:1,job:5,join:8,just:[1,5],keep:1,kei:[1,8,13],kernel:[1,6,18],killsalom:1,know:[1,13],known:12,kwarg:2,kwd:2,label:[1,6],lanch:1,lapack:8,lapack_root_dir:8,last:[1,8,11],last_termin:11,later:12,latter:1,launch:[1,8],launch_command:1,launcher:[1,3,8,15],launcher_nam:10,launcherfileenviron:1,layer:9,ld_library_path:8,left:8,level:[1,18,19],lhs:1,lib:8,librari:1,light:2,lightblack_ex:2,lightblue_ex:2,lightcyan_ex:2,lightgreen_ex:2,lightmagenta_ex:2,lightred_ex:2,lightwhite_ex:2,lightyellow_ex:2,like:[1,2,3,5,6,10,14],line:[1,6,18],link:[1,13],list:[1,3,4,6,10,14],list_log_fil:1,list_of_product:9,listtest:1,llvm:[3,10],load:[1,14],load_cfg_environ:1,load_environ:1,local:[6,7],locat:1,log:[1,5,15,19],log_command:1,log_dir:11,log_file_nam:1,logdir:1,logfilepath:1,logger:0,login:13,logo:[1,10],lome:15,longnam:1,lost:1,lpath:1,lproduct:1,machin:[1,3,9,10,12],machine1:3,machine2:3,machine3:3,magenta:2,mai:13,main:5,make:[1,5],make_flag:5,make_opt:1,makepath:1,manag:[1,6,13],manipul:[1,6],map1:1,map2:1,map:1,match:1,max:1,mechan:[1,8],med:5,memori:[3,10],menu:11,merg:1,merge:1,merge_dict:1,mergemap:1,mergesequ:1,mesa:[1,3,10],messag:[1,19],method:[1,2,5,8,13,19],micro_command:1,minim:1,minut:1,mismatch:1,miss:[3,5],mistak:13,mode:[1,2,4,6,8,11,18],model:19,modifi:[1,7,8,13],modul:[0,3,5,9,10,13,14,15],mon:1,mond:19,more:[1,18],most:[1,8,19],multi:1,multilin:1,multipl:1,must:[1,19],my_application_directori:3,my_application_nam:3,my_tag:13,mycommand:19,mydebug:1,myoption:19,myspecificnam:12,mytempl:1,name:[1,3,4,6,8,10,12,13,14,18,19],name_nod:1,namespac:1,nativ:[1,8],nb_line:1,nb_proc:[1,5],need:[1,2,3,9,13],new_nam:6,next:1,nfirst:1,no_label:6,node:1,node_nam:1,non:2,none:[1,2],nor:2,normal:[1,2],note:[1,3,8,10,14],noth:[1,12],notimplementederror:1,notion:1,notshowncommand:1,number:[1,3,5,10,11],number_of_proc:1,obj1:1,obj2:1,object:[1,2,14],obtain:1,obvious:1,occur:1,ode:1,old:1,older:11,on_stderr:2,onc:13,one:[1,6],onli:[1,3,4,5,6,8,9,10,11,13,18],only_numb:1,ool:15,open:1,openggl:[3,10],openmpi:1,oper:[1,6,15],operand:1,opt_nb_proc:1,option:[0,2,3,5,6,8,9,10,11,12,13,14,19],optionali:1,optiontyp:1,optresult:1,order:[1,13,14,19],org:2,other:[1,8,12,14],otherwis:[1,13],our:2,out:1,out_dir:1,output:[1,2],output_verbose_level:1,outstream:1,overrid:[1,3],overwrit:1,overwritekei:1,overwritemergeresolv:1,overwritten:1,own:1,packag:[0,15,16],page:8,pair:1,param:[1,2],param_nam:1,paramet:[1,6,14,19],parameter_path:6,paramstr:2,paravi:[3,10],parent:1,parma:1,pars:[1,19],parse_arg:[1,19],parse_d:1,parseargu:1,parsefactor:1,parsekeyvaluepair:1,parsemap:1,parsemappingbodi:1,parser:[1,19],parserefer:1,parsescalar:1,parsesequ:1,parsesuffix:1,parseterm:1,parsevalu:1,part:[1,3,8,10],particular:1,pass:[1,14,19],passphras:13,password:13,patch:[1,6,13],path:[1,8,10],path_to_catalog:3,path_to_yacsgen:9,pattern:1,pdf:[6,7,15],pdf_viewer:7,pend:4,pendant:1,perform:[13,15],person:6,phase:1,platform:[2,8],pleas:[8,9],plugin:[1,5],pluma:[7,14],point:[1,19],pop_debug:1,popul:1,posit:2,possibl:[1,8,13,19],potenti:1,pprty:1,preced:1,prefer:[6,7,14],prefix:[1,8,14],prepar:[1,15,19],prepare_testbas:1,prepare_testbase_from_dir:1,prepare_testbase_from_git:1,prepare_testbase_from_svn:1,prepend:[1,8],prepend_valu:1,prereq_dir:8,prerequisit:[8,12,14,15,18],presenc:1,preset:1,pretti:1,previou:1,previous:4,print:[1,2,6,11],print_color_map:1,print_color_rang:1,print_help:1,print_info:1,print_valu:1,printc:1,printcerror:1,printchead:1,printchighlight:1,printcinfo:1,printclabel:1,printcolor:0,printcsuccess:1,printcwarn:1,problem:[1,3,10],procedur:1,process:13,processinginstruct:1,processor:[1,3,10],prod_dir:1,prod_info:1,produc:1,product1:[5,8,13],product2:[5,8,13],product:[0,4,5,6,8,9,10,12,13,15,19],product_cfg:1,product_compil:1,product_has_env_script:1,product_has_logo:1,product_has_patch:1,product_has_salome_gui:1,product_has_script:1,product_info:1,product_is_autotool:1,product_is_cmak:1,product_is_cpp:1,product_is_debug:1,product_is_dev:1,product_is_fix:1,product_is_gener:1,product_is_mpi:1,product_is_n:1,product_is_salom:1,product_is_sampl:[],product_is_smesh_plugin:1,product_is_vc:1,product_is_verbos:1,product_nam:1,profil:[1,10],program:1,programmat:8,progress:1,project:[6,8],properti:[1,4,8,9],protocol:[1,3],provid:[1,8,19],proxi:2,pubid:1,push:13,push_debug:1,put:1,put_initial_xml_field:1,put_txt_log_in_appli_log_dir:1,pv_plugin_path:1,pwd:1,pyconf:[0,5,6,8,13,14,19],python:[1,8,10,14,15,16,19],python_config:1,pythonpath:8,pythonpath_:8,qname:1,queri:[3,10],rais:[1,18],rang:1,raw:1,read:1,read_config_from_a_fil:1,read_result:1,reader:1,readi:13,readlin:1,readlink:1,readxmlfil:1,recurs:[1,6],red:[1,2],redefin:1,redirect:1,ref:1,refer:[1,9,14],reflect:1,regard:1,regular:1,reinit:[1,2],rel:[1,12],remain:[11,16],remainderarg:1,remark:3,remor:9,remot:[1,12],remov:[1,4,5,13],remove_item_from_list:1,removenamespac:1,renam:1,renint:1,replac:[1,3],replace_in_fil:1,report:1,repositori:[1,13],repres:1,represent:1,request:2,requir:[1,2,8,9],reserv:1,reset:2,reset_al:2,resolut:1,resolv:1,resourc:[3,10],respect:8,restor:[1,4],result:1,retriev:1,rhs:1,right:[1,8],root:[1,19],root_nod:1,rootnam:1,rst:7,rtype:1,run:[1,8,14,15,19],run_all_test:1,run_env_script:1,run_grid_test:1,run_script:1,run_session_test:1,run_simple_env_script:1,run_test:1,run_testbase_test:1,runappli:3,runner:19,ruud:1,sajip:1,salom:[1,3,4,5,6,8,9,10,12,14,16],salome_modul:1,salome_session_serv:1,salome_xx:[4,12,16,18],salome_xx_:12,salomecontext:1,salomeenviron:1,salometool:[1,3,6,8,12,14,15,16],same:[1,7],sampl:18,sat:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19],satexcept:1,save:8,saveconfigdbg:1,saveconfigstd:1,scalar:1,screenenviron:1,screenonli:1,script:[1,5,6,8,10,14,15,16],script_nam:1,script_path:1,search:1,search_known_error:1,second:[1,8,19],section:[1,3,8,13],secur:13,see:[1,2,14,18],seen:1,select:12,self:1,semant:1,sep:[1,8],separ:1,seq1:1,seq2:1,seq:1,seqit:1,sequenc:[1,2],server:[1,13],servic:19,session:1,set:[1,3,4,8,10,14,15,19],set_a_product:1,set_application_env:1,set_attr:2,set_consol:2,set_cpp_env:1,set_cursor_posit:2,set_env:[1,8],set_env_build:8,set_env_launch:8,set_full_environ:1,set_native_env:[1,8],set_product:1,set_python_libdir:1,set_salome_generic_product_env:1,set_salome_minimal_product_env:1,set_titl:2,setconsoletextattribut:2,setpath:1,setstream:1,sever:[8,14],shallow:1,shell:[1,8],shortcut:1,shortnam:1,should:[1,8,9],should_wrap:2,show:[1,5,7,11],show_command_log:1,show_desktop:1,show_in_editor:1,show_patch:6,show_progress:1,show_warn:1,showinfo:1,shown:[1,5],sign:1,silent_sysstd:1,similar:1,simpl:[1,18,19],sinc:1,site:1,size:1,smaller:1,smart:1,smartcopi:1,smesh:1,softwar:13,some:[1,8,10,14,19],someon:8,sometim:4,sommeil:1,soon:5,sourc:[1,2,4,6,7,12,13],sources_without_dev:4,special_path_separ:1,specif:[1,3,4,8,9,10,12,14,18],specifi:[1,3,8,9,10,13],splashscreen:10,src:19,src_root:1,sre_pattern:[1,2],ssh:[3,10,13],stack:18,start:[1,2,3,5,10],statu:1,stderr:1,stdout:[1,2],step:1,stop:5,stop_first_fail:5,store:[1,5,6,11,13,14],str:1,str_num:1,stream:[1,2],streamopen:1,streamorfil:1,streamwrapp:2,strin:1,string:1,stringio:1,strip:2,strout:1,structur:14,stuff:[1,10],style:[1,2],stylesheet:1,sub:[1,14],subclass:1,subel:1,submodul:0,subpackag:0,subsect:8,subset:12,subst_dic:1,substitut:1,subtract:1,success:[1,5],successfulli:1,suffici:8,suffix:1,suit:15,suitabl:1,support:1,supposedli:1,suppress:4,svn:[1,12],svn_extract:1,svn_info:13,symlink:1,syntax:[1,4],sys:1,system:[0,12],tab:1,tabl:1,tag:[1,13],take:[1,4],taken:[1,8],tar:[12,16],target:[1,3,8],tcllibpath:1,templat:0,template_fil:1,temporari:1,term:1,termin:[1,2,5,11,19],test:[1,5,15],test_base_nam:1,test_config:1,test_grid:1,test_modul:0,test_nam:1,test_sess:1,testbas:1,testbase_bas:1,testbase_dir:1,testbase_nam:1,testbase_tag:1,text:[1,2,7,18],text_or_uri:1,tgz:[12,16],thank:1,thei:[4,6,8,13],them:[2,13],thi:[1,2,3,5,6,8,9,10,12,13,14,15,19],thing:19,those:9,through:[3,8,10,11],thrown:1,time:[1,4,8,13,14],timedelta:1,timedelta_total_second:1,titl:[1,2],tklibpath:1,tmp_working_dir:1,tofix:1,token:1,token_typ:1,token_valu:1,top:1,tostr:1,total_second:1,tout:19,trace:18,transform:1,transpar:2,tree:1,treebuild:1,trust_root_dir:8,tty:2,tupl:1,turn:1,tutori:1,two:[1,8],txt:1,type:[1,13],typeerror:1,unabl:1,unchang:1,unconditionali:[1,18],under:[1,15],underscor:[1,8],unicod:1,unit:5,unless:[2,13],updat:1,update_hat_xml:1,updatehatxml:1,urllib2:1,urlopen:1,usag:[1,15],use:[1,3,5,8,10,11,12,13,14,16],use_mesa:[3,10],used:[1,3,5,6,7,8,11,12,13,14,15],useful:[8,10,19],user:[1,6,7,8,11,12,16,18],usernam:1,uses:[1,8,9,13,14],using:[1,2,9],usr:8,usual:[4,9,12,14,16,18],utf:[1,8],util:[1,12,15],valid:1,valu:[1,2,3,4,6,13,14],variabl:[1,8,9,19],vcs:1,verbos:[1,19],verifi:[1,13],version:[1,8,9,12,14,15],via:1,viewer:[6,7],vinai:1,virtual:[1,3],virtual_app:3,visualis:8,wai:[1,5,19],want:[1,4,8,19],warn:[1,5],web:[6,7,11,14],welcom:1,welkom:1,well:1,were:1,what:[1,4],when:[1,3,8,13,14,19],whenev:1,where:[1,3,5,6,12],which:[1,2,8,9,14,19],white:2,who:9,wiki:2,wikipedia:2,wil:8,win32:[0,1],winapi_test:2,wincolor:2,window:[1,2,8],winstyl:2,winterm:[0,1],with_children:5,with_commerci:1,with_fath:5,with_install_dir:1,with_vc:12,within:8,without:[1,6,13],without_properti:12,wmake:1,word:1,work:[1,6,12,13,14],workdir:[1,3,6,10,12,14,18,19],world:19,would:1,wrap:2,wrap_stream:2,writabl:1,write:[1,2,19],write_and_convert:2,write_back:1,write_cfgforpy_fil:1,write_env_fil:1,write_plain_text:2,write_report:1,write_test_margin:1,write_tre:1,writetostream:1,writevalu:1,written:19,www:1,xa4:1,xc2:1,xml:[1,19],xmllogfil:1,xmlmanag:0,xmlroot:1,xmltreebuild:1,xxx:[4,14],xxx_root_dir:1,xxx_src_dir:1,yac:1,yacsgen:[1,9],yacsgen_root_dir:9,year:1,yellow:2,yes:[1,4,8,9,13],yet:18,yield:1,you:[1,3,4,8,10,13,15,19],your:[1,7,8,13,18,19],yourspecificnam:12,yve:1,yyi:14,yyyi:1,yyyymmdd_hhmmss:1,yyyymmdd_hhmmss_namecmd:1,zelaunch:10,zero:1,zerodivideerror:1},titles:["src","src package","src.colorama package","Command application","Command clean","Command compile","Command config","Command doc","Command environ","Command generate","Command launcher","Command log","Command package","Command prepare","Configuration","Salome Tools","Installation","Release notes","Usage of SAlomeTools","Add a user custom command"],titleterms:{"var":14,VCS:13,access:19,add:19,ansi:2,ansitowin32:2,applic:[3,14],architectur:1,avail:[4,18],base:13,basic:19,build:18,clean:4,code:15,colorama:2,command:[3,4,5,6,7,8,9,10,11,12,13,15,19],compil:[1,5,18],config:[6,19],configur:[3,4,5,6,7,8,10,11,12,13,14],content:[1,2],custom:19,cvs:13,debug:[1,18],descript:[3,4,5,6,7,8,9,10,11,12,13,14],dev:13,develop:15,doc:7,document:15,elementtre:1,environ:[1,8],exampl:19,fileenviron:1,fork:1,gener:9,get:18,git:13,hello:19,help:18,howto:19,initialis:2,instal:16,introduct:19,launcher:10,list:[15,18],log:11,logger:[1,19],mode:13,modul:[1,2],note:[15,17],option:[1,4,18],other:19,packag:[1,2,12],path:[3,4,5,6,7,11,12,13],prepar:[13,18],printcolor:1,product:[1,14,18],pyconf:1,quick:15,releas:[15,17],remark:[9,13],requir:19,salom:[15,18],salometool:[18,19],sat:18,section:14,some:[3,4,5,6,7,11,12,13],sourc:18,src:[0,1,2],start:15,submodul:[1,2],subpackag:1,svn:13,syntax:14,system:1,templat:1,test_modul:1,tool:15,usag:[3,4,5,6,7,8,9,10,11,12,13,18],useful:[3,4,5,6,7,11,12,13],user:[14,19],verbos:18,win32:2,winterm:2,xmlmanag:1}})
\ No newline at end of file
+Search.setIndex({docnames:["commands/apidoc/modules","commands/apidoc/src","commands/apidoc/src.colorama","commands/application","commands/clean","commands/compile","commands/config","commands/doc","commands/environ","commands/generate","commands/launcher","commands/log","commands/package","commands/prepare","configuration","index","installation_of_sat","release_notes/release_notes_5.0.0","usage_of_sat","write_command"],envversion:52,filenames:["commands/apidoc/modules.rst","commands/apidoc/src.rst","commands/apidoc/src.colorama.rst","commands/application.rst","commands/clean.rst","commands/compile.rst","commands/config.rst","commands/doc.rst","commands/environ.rst","commands/generate.rst","commands/launcher.rst","commands/log.rst","commands/package.rst","commands/prepare.rst","configuration.rst","index.rst","installation_of_sat.rst","release_notes/release_notes_5.0.0.rst","usage_of_sat.rst","write_command.rst"],objects:{"":{src:[1,0,0,"-"]},"src.ElementTree":{Comment:[1,1,1,""],Element:[1,1,1,""],ElementTree:[1,2,1,""],PI:[1,1,1,""],ProcessingInstruction:[1,1,1,""],QName:[1,2,1,""],SubElement:[1,1,1,""],TreeBuilder:[1,2,1,""],XML:[1,1,1,""],XMLTreeBuilder:[1,2,1,""],dump:[1,1,1,""],fromstring:[1,1,1,""],iselement:[1,1,1,""],iterparse:[1,2,1,""],parse:[1,1,1,""],tostring:[1,1,1,""]},"src.ElementTree.ElementTree":{find:[1,3,1,""],findall:[1,3,1,""],findtext:[1,3,1,""],getiterator:[1,3,1,""],getroot:[1,3,1,""],parse:[1,3,1,""],write:[1,3,1,""]},"src.ElementTree.TreeBuilder":{close:[1,3,1,""],data:[1,3,1,""],end:[1,3,1,""],start:[1,3,1,""]},"src.ElementTree.XMLTreeBuilder":{close:[1,3,1,""],doctype:[1,3,1,""],feed:[1,3,1,""]},"src.ElementTree.iterparse":{next:[1,3,1,""]},"src.Path":{base:[1,3,1,""],chmod:[1,3,1,""],copy:[1,3,1,""],copydir:[1,3,1,""],copyfile:[1,3,1,""],copylink:[1,3,1,""],dir:[1,3,1,""],exists:[1,3,1,""],isdir:[1,3,1,""],isfile:[1,3,1,""],islink:[1,3,1,""],list:[1,3,1,""],make:[1,3,1,""],readlink:[1,3,1,""],rm:[1,3,1,""],smartcopy:[1,3,1,""],symlink:[1,3,1,""]},"src.architecture":{get_distrib_version:[1,1,1,""],get_distribution:[1,1,1,""],get_nb_proc:[1,1,1,""],get_python_version:[1,1,1,""],get_user:[1,1,1,""],is_windows:[1,1,1,""]},"src.colorama":{ansi:[2,0,0,"-"],ansitowin32:[2,0,0,"-"],initialise:[2,0,0,"-"],win32:[2,0,0,"-"],winterm:[2,0,0,"-"]},"src.colorama.ansi":{AnsiBack:[2,2,1,""],AnsiCodes:[2,2,1,""],AnsiCursor:[2,2,1,""],AnsiFore:[2,2,1,""],AnsiStyle:[2,2,1,""],clear_line:[2,1,1,""],clear_screen:[2,1,1,""],code_to_chars:[2,1,1,""],set_title:[2,1,1,""]},"src.colorama.ansi.AnsiBack":{BLACK:[2,5,1,""],BLUE:[2,5,1,""],CYAN:[2,5,1,""],GREEN:[2,5,1,""],LIGHTBLACK_EX:[2,5,1,""],LIGHTBLUE_EX:[2,5,1,""],LIGHTCYAN_EX:[2,5,1,""],LIGHTGREEN_EX:[2,5,1,""],LIGHTMAGENTA_EX:[2,5,1,""],LIGHTRED_EX:[2,5,1,""],LIGHTWHITE_EX:[2,5,1,""],LIGHTYELLOW_EX:[2,5,1,""],MAGENTA:[2,5,1,""],RED:[2,5,1,""],RESET:[2,5,1,""],WHITE:[2,5,1,""],YELLOW:[2,5,1,""]},"src.colorama.ansi.AnsiCursor":{BACK:[2,3,1,""],DOWN:[2,3,1,""],FORWARD:[2,3,1,""],POS:[2,3,1,""],UP:[2,3,1,""]},"src.colorama.ansi.AnsiFore":{BLACK:[2,5,1,""],BLUE:[2,5,1,""],CYAN:[2,5,1,""],GREEN:[2,5,1,""],LIGHTBLACK_EX:[2,5,1,""],LIGHTBLUE_EX:[2,5,1,""],LIGHTCYAN_EX:[2,5,1,""],LIGHTGREEN_EX:[2,5,1,""],LIGHTMAGENTA_EX:[2,5,1,""],LIGHTRED_EX:[2,5,1,""],LIGHTWHITE_EX:[2,5,1,""],LIGHTYELLOW_EX:[2,5,1,""],MAGENTA:[2,5,1,""],RED:[2,5,1,""],RESET:[2,5,1,""],WHITE:[2,5,1,""],YELLOW:[2,5,1,""]},"src.colorama.ansi.AnsiStyle":{BRIGHT:[2,5,1,""],DIM:[2,5,1,""],NORMAL:[2,5,1,""],RESET_ALL:[2,5,1,""]},"src.colorama.ansitowin32":{AnsiToWin32:[2,2,1,""],StreamWrapper:[2,2,1,""],is_a_tty:[2,1,1,""],is_stream_closed:[2,1,1,""]},"src.colorama.ansitowin32.AnsiToWin32":{ANSI_CSI_RE:[2,5,1,""],ANSI_OSC_RE:[2,5,1,""],call_win32:[2,3,1,""],convert_ansi:[2,3,1,""],convert_osc:[2,3,1,""],extract_params:[2,3,1,""],get_win32_calls:[2,3,1,""],reset_all:[2,3,1,""],should_wrap:[2,3,1,""],write:[2,3,1,""],write_and_convert:[2,3,1,""],write_plain_text:[2,3,1,""]},"src.colorama.ansitowin32.StreamWrapper":{write:[2,3,1,""]},"src.colorama.initialise":{colorama_text:[2,1,1,""],deinit:[2,1,1,""],init:[2,1,1,""],reinit:[2,1,1,""],reset_all:[2,1,1,""],wrap_stream:[2,1,1,""]},"src.colorama.win32":{SetConsoleTextAttribute:[2,1,1,""],winapi_test:[2,1,1,""]},"src.colorama.winterm":{WinColor:[2,2,1,""],WinStyle:[2,2,1,""],WinTerm:[2,2,1,""]},"src.colorama.winterm.WinColor":{BLACK:[2,5,1,""],BLUE:[2,5,1,""],CYAN:[2,5,1,""],GREEN:[2,5,1,""],GREY:[2,5,1,""],MAGENTA:[2,5,1,""],RED:[2,5,1,""],YELLOW:[2,5,1,""]},"src.colorama.winterm.WinStyle":{BRIGHT:[2,5,1,""],BRIGHT_BACKGROUND:[2,5,1,""],NORMAL:[2,5,1,""]},"src.colorama.winterm.WinTerm":{back:[2,3,1,""],cursor_adjust:[2,3,1,""],erase_line:[2,3,1,""],erase_screen:[2,3,1,""],fore:[2,3,1,""],get_attrs:[2,3,1,""],get_position:[2,3,1,""],reset_all:[2,3,1,""],set_attrs:[2,3,1,""],set_console:[2,3,1,""],set_cursor_position:[2,3,1,""],set_title:[2,3,1,""],style:[2,3,1,""]},"src.compilation":{Builder:[1,2,1,""]},"src.compilation.Builder":{build_configure:[1,3,1,""],check:[1,3,1,""],cmake:[1,3,1,""],complete_environment:[1,3,1,""],configure:[1,3,1,""],do_batch_script_build:[1,3,1,""],do_default_build:[1,3,1,""],do_python_script_build:[1,3,1,""],do_script_build:[1,3,1,""],hack_libtool:[1,3,1,""],install:[1,3,1,""],log:[1,3,1,""],log_command:[1,3,1,""],make:[1,3,1,""],prepare:[1,3,1,""],put_txt_log_in_appli_log_dir:[1,3,1,""],wmake:[1,3,1,""]},"src.debug":{InStream:[1,2,1,""],OutStream:[1,2,1,""],format_color_exception:[1,1,1,""],format_exception:[1,1,1,""],getLocalEnv:[1,1,1,""],getStrConfigDbg:[1,1,1,""],getStrConfigStd:[1,1,1,""],indent:[1,1,1,""],isTypeConfig:[1,1,1,""],pop_debug:[1,1,1,""],push_debug:[1,1,1,""],saveConfigDbg:[1,1,1,""],saveConfigStd:[1,1,1,""],tofix:[1,1,1,""],write:[1,1,1,""]},"src.debug.OutStream":{close:[1,3,1,""]},"src.environment":{Environ:[1,2,1,""],FileEnvWriter:[1,2,1,""],SalomeEnviron:[1,2,1,""],Shell:[1,2,1,""],load_environment:[1,1,1,""]},"src.environment.Environ":{append:[1,3,1,""],append_value:[1,3,1,""],command_value:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.environment.FileEnvWriter":{write_cfgForPy_file:[1,3,1,""],write_env_file:[1,3,1,""]},"src.environment.SalomeEnviron":{add_comment:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],dump:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],get_names:[1,3,1,""],is_defined:[1,3,1,""],load_cfg_environment:[1,3,1,""],prepend:[1,3,1,""],run_env_script:[1,3,1,""],run_simple_env_script:[1,3,1,""],set:[1,3,1,""],set_a_product:[1,3,1,""],set_application_env:[1,3,1,""],set_cpp_env:[1,3,1,""],set_full_environ:[1,3,1,""],set_products:[1,3,1,""],set_python_libdirs:[1,3,1,""],set_salome_generic_product_env:[1,3,1,""],set_salome_minimal_product_env:[1,3,1,""]},"src.fileEnviron":{BashFileEnviron:[1,2,1,""],BatFileEnviron:[1,2,1,""],ContextFileEnviron:[1,2,1,""],FileEnviron:[1,2,1,""],LauncherFileEnviron:[1,2,1,""],ScreenEnviron:[1,2,1,""],get_file_environ:[1,1,1,""],special_path_separator:[1,1,1,""]},"src.fileEnviron.BashFileEnviron":{command_value:[1,3,1,""],finish:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.BatFileEnviron":{add_comment:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.ContextFileEnviron":{add_echo:[1,3,1,""],add_warning:[1,3,1,""],append_value:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.FileEnviron":{add_comment:[1,3,1,""],add_echo:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],append_value:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.LauncherFileEnviron":{add:[1,3,1,""],add_comment:[1,3,1,""],add_echo:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],append_value:[1,3,1,""],change_to_launcher:[1,3,1,""],command_value:[1,3,1,""],finish:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],prepend_value:[1,3,1,""],set:[1,3,1,""]},"src.fileEnviron.ScreenEnviron":{add_comment:[1,3,1,""],add_echo:[1,3,1,""],add_line:[1,3,1,""],add_warning:[1,3,1,""],append:[1,3,1,""],command_value:[1,3,1,""],get:[1,3,1,""],is_defined:[1,3,1,""],prepend:[1,3,1,""],run_env_script:[1,3,1,""],set:[1,3,1,""],write:[1,3,1,""]},"src.fork":{batch:[1,1,1,""],batch_salome:[1,1,1,""],launch_command:[1,1,1,""],show_progress:[1,1,1,""],write_back:[1,1,1,""]},"src.logger":{Logger:[1,2,1,""],date_to_datetime:[1,1,1,""],getCurrentLogger:[1,1,1,""],getDefaultLogger:[1,1,1,""],getUnittestLogger:[1,1,1,""],isCurrentLoggerUnittest:[1,1,1,""],list_log_file:[1,1,1,""],sendMessageToCurrentLogger:[1,1,1,""],setCurrentLogger:[1,1,1,""],show_command_log:[1,1,1,""],timedelta_total_seconds:[1,1,1,""],update_hat_xml:[1,1,1,""]},"src.logger.Logger":{add_link:[1,3,1,""],end_write:[1,3,1,""],error:[1,3,1,""],flush:[1,3,1,""],put_initial_xml_fields:[1,3,1,""],write:[1,3,1,""]},"src.options":{OptResult:[1,2,1,""],Options:[1,2,1,""]},"src.options.Options":{add_option:[1,3,1,""],debug_write:[1,3,1,""],filterLevel:[1,3,1,""],filterList2:[1,3,1,""],getDetailOption:[1,3,1,""],get_help:[1,3,1,""],indent:[1,3,1,""],parse_args:[1,3,1,""]},"src.printcolors":{cleancolor:[1,1,1,""],print_color_map:[1,1,1,""],print_color_range:[1,1,1,""],print_value:[1,1,1,""],printc:[1,1,1,""],printcError:[1,1,1,""],printcHeader:[1,1,1,""],printcHighlight:[1,1,1,""],printcInfo:[1,1,1,""],printcLabel:[1,1,1,""],printcSuccess:[1,1,1,""],printcWarning:[1,1,1,""]},"src.product":{check_config_exists:[1,1,1,""],check_installation:[1,1,1,""],check_source:[1,1,1,""],get_base_install_dir:[1,1,1,""],get_install_dir:[1,1,1,""],get_product_components:[1,1,1,""],get_product_config:[1,1,1,""],get_product_dependencies:[1,1,1,""],get_product_section:[1,1,1,""],get_products_infos:[1,1,1,""],product_compiles:[1,1,1,""],product_has_env_script:[1,1,1,""],product_has_logo:[1,1,1,""],product_has_patches:[1,1,1,""],product_has_salome_gui:[1,1,1,""],product_has_script:[1,1,1,""],product_is_autotools:[1,1,1,""],product_is_cmake:[1,1,1,""],product_is_cpp:[1,1,1,""],product_is_debug:[1,1,1,""],product_is_dev:[1,1,1,""],product_is_fixed:[1,1,1,""],product_is_generated:[1,1,1,""],product_is_mpi:[1,1,1,""],product_is_native:[1,1,1,""],product_is_salome:[1,1,1,""],product_is_smesh_plugin:[1,1,1,""],product_is_vcs:[1,1,1,""],product_is_verbose:[1,1,1,""]},"src.pyconf":{Config:[1,2,1,""],ConfigError:[1,4,1,""],ConfigFormatError:[1,4,1,""],ConfigInputStream:[1,2,1,""],ConfigList:[1,2,1,""],ConfigMerger:[1,2,1,""],ConfigOutputStream:[1,2,1,""],ConfigReader:[1,2,1,""],ConfigResolutionError:[1,4,1,""],Container:[1,2,1,""],Expression:[1,2,1,""],Mapping:[1,2,1,""],Reference:[1,2,1,""],Sequence:[1,2,1,""],deepCopyMapping:[1,1,1,""],defaultMergeResolve:[1,1,1,""],defaultStreamOpener:[1,1,1,""],isWord:[1,1,1,""],makePath:[1,1,1,""],overwriteMergeResolve:[1,1,1,""]},"src.pyconf.Config":{Namespace:[1,2,1,""],addNamespace:[1,3,1,""],getByPath:[1,3,1,""],load:[1,3,1,""],removeNamespace:[1,3,1,""]},"src.pyconf.ConfigInputStream":{close:[1,3,1,""],read:[1,3,1,""],readline:[1,3,1,""]},"src.pyconf.ConfigList":{getByPath:[1,3,1,""]},"src.pyconf.ConfigMerger":{handleMismatch:[1,3,1,""],merge:[1,3,1,""],mergeMapping:[1,3,1,""],mergeSequence:[1,3,1,""],overwriteKeys:[1,3,1,""]},"src.pyconf.ConfigOutputStream":{close:[1,3,1,""],flush:[1,3,1,""],write:[1,3,1,""]},"src.pyconf.ConfigReader":{getChar:[1,3,1,""],getToken:[1,3,1,""],load:[1,3,1,""],location:[1,3,1,""],match:[1,3,1,""],parseFactor:[1,3,1,""],parseKeyValuePair:[1,3,1,""],parseMapping:[1,3,1,""],parseMappingBody:[1,3,1,""],parseReference:[1,3,1,""],parseScalar:[1,3,1,""],parseSequence:[1,3,1,""],parseSuffix:[1,3,1,""],parseTerm:[1,3,1,""],parseValue:[1,3,1,""],setStream:[1,3,1,""]},"src.pyconf.Container":{evaluate:[1,3,1,""],setPath:[1,3,1,""],writeToStream:[1,3,1,""],writeValue:[1,3,1,""]},"src.pyconf.Expression":{evaluate:[1,3,1,""]},"src.pyconf.Mapping":{addMapping:[1,3,1,""],get:[1,3,1,""],iteritems:[1,3,1,""],iterkeys:[1,3,1,""],keys:[1,3,1,""],writeToStream:[1,3,1,""]},"src.pyconf.Reference":{addElement:[1,3,1,""],findConfig:[1,3,1,""],resolve:[1,3,1,""]},"src.pyconf.Sequence":{SeqIter:[1,2,1,""],append:[1,3,1,""],writeToStream:[1,3,1,""]},"src.pyconf.Sequence.SeqIter":{next:[1,3,1,""]},"src.system":{archive_extract:[1,1,1,""],cvs_extract:[1,1,1,""],git_extract:[1,1,1,""],show_in_editor:[1,1,1,""],svn_extract:[1,1,1,""]},"src.template":{MyTemplate:[1,2,1,""],substitute:[1,1,1,""]},"src.template.MyTemplate":{delimiter:[1,5,1,""],pattern:[1,5,1,""]},"src.test_module":{Test:[1,2,1,""],getTmpDirDEFAULT:[1,1,1,""]},"src.test_module.Test":{generate_launching_commands:[1,3,1,""],generate_script:[1,3,1,""],get_test_timeout:[1,3,1,""],get_tmp_dir:[1,3,1,""],prepare_testbase:[1,3,1,""],prepare_testbase_from_dir:[1,3,1,""],prepare_testbase_from_git:[1,3,1,""],prepare_testbase_from_svn:[1,3,1,""],read_results:[1,3,1,""],run_all_tests:[1,3,1,""],run_grid_tests:[1,3,1,""],run_script:[1,3,1,""],run_session_tests:[1,3,1,""],run_testbase_tests:[1,3,1,""],run_tests:[1,3,1,""],search_known_errors:[1,3,1,""],write_test_margin:[1,3,1,""]},"src.xmlManager":{ReadXmlFile:[1,2,1,""],XmlLogFile:[1,2,1,""],add_simple_node:[1,1,1,""],append_node_attrib:[1,1,1,""],find_node_by_attrib:[1,1,1,""],write_report:[1,1,1,""]},"src.xmlManager.ReadXmlFile":{getRootAttrib:[1,3,1,""],get_attrib:[1,3,1,""],get_node_text:[1,3,1,""]},"src.xmlManager.XmlLogFile":{add_simple_node:[1,3,1,""],append_node_attrib:[1,3,1,""],append_node_text:[1,3,1,""],write_tree:[1,3,1,""]},src:{ElementTree:[1,0,0,"-"],Path:[1,2,1,""],SatException:[1,4,1,""],activate_mesa_property:[1,1,1,""],architecture:[1,0,0,"-"],check_config_has_application:[1,1,1,""],check_config_has_profile:[1,1,1,""],colorama:[2,0,0,"-"],compilation:[1,0,0,"-"],config_has_application:[1,1,1,""],debug:[1,0,0,"-"],deepcopy_list:[1,1,1,""],ensure_path_exists:[1,1,1,""],environment:[1,0,0,"-"],fileEnviron:[1,0,0,"-"],find_file_in_lpath:[1,1,1,""],fork:[1,0,0,"-"],get_base_path:[1,1,1,""],get_cfg_param:[1,1,1,""],get_launcher_name:[1,1,1,""],get_log_path:[1,1,1,""],get_property_in_product_cfg:[1,1,1,""],get_salome_version:[1,1,1,""],get_tmp_filename:[1,1,1,""],handleRemoveReadonly:[1,1,1,""],logger:[1,0,0,"-"],merge_dicts:[1,1,1,""],only_numbers:[1,1,1,""],options:[1,0,0,"-"],parse_date:[1,1,1,""],print_info:[1,1,1,""],printcolors:[1,0,0,"-"],product:[1,0,0,"-"],pyconf:[1,0,0,"-"],read_config_from_a_file:[1,1,1,""],remove_item_from_list:[1,1,1,""],replace_in_file:[1,1,1,""],system:[1,0,0,"-"],template:[1,0,0,"-"],test_module:[1,0,0,"-"],xmlManager:[1,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","exception","Python exception"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:exception","5":"py:attribute"},terms:{"0x36fa5f0":[],"0x37b8f90":[],"0x37f8420":[],"0x44e4620":[],"0x4986ff0":[],"16be":1,"16le":1,"9abc":1,"boolean":[1,19],"case":1,"char":1,"class":[1,2,19],"default":[1,3,5,6,8,10,11,12,13,18,19],"export":13,"final":[1,6,13],"float":1,"function":[1,2,19],"import":[1,8,19],"int":[1,11],"long":[1,4],"new":[1,13,19],"return":[1,8,19],"short":1,"true":[1,2],"try":1,"var":[1,8,19],And:[1,6,8],But:19,CVS:12,For:[1,8,13,15,19],Has:1,One:1,POS:2,The:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19],Then:[13,14],There:14,These:8,Theses:4,Use:[3,4,5,6,8,9,10,13],Used:1,Useful:18,VCS:[4,12],__init__:[],__save__:1,__setattr__:1,_appli:3,_blank:1,_build:8,_debug:1,_developp:1,_launch:8,_ld_library_path:8,_sre:[1,2],_user:1,a_b_c_:1,abool:1,about:[1,14],absolut:12,access:[1,2,11],account:8,act:[1,2],action:1,activ:[1,13],activate_mesa_properti:1,actual:[1,2,16],add:[1,5,15],add_com:1,add_echo:1,add_lin:1,add_link:1,add_opt:[1,19],add_simple_nod:1,add_warn:1,added:1,addel:1,adding:19,addit:[1,5,14],additional_dir:1,additional_env:1,addmap:1,addnamespac:1,adequ:1,adot:1,advanc:1,affect:2,afil:1,after:[1,5,16],again:1,agent:13,aim:1,alevel:1,algorithm:19,all:[1,2,4,6,8,9,13,14,18,19],all_in_termin:1,allow:[1,5,6,9,15,18],alphanumer:1,alreadi:[12,19],also:[1,8,13,14,19],alter:13,amethodtodebug:1,amount:1,ani:[1,2,6,11,13],anoth:[1,14],ansi:[0,1],ansi_csi_r:2,ansi_escape_cod:2,ansi_osc_r:2,ansiback:2,ansicod:2,ansicursor:2,ansifor:2,ansistyl:2,ansitowin32:[0,1],apart:2,api:1,append:[1,8,12],append_node_attrib:1,append_node_text:1,append_valu:1,appli:[1,6,9,13],applic:[1,4,5,6,8,9,10,11,13,15,19],application_nam:3,appropri:1,arch:12,architectur:[0,12,14],archiv:[1,12,13],archive_extract:1,archive_info:13,arg:[1,2,19],arglist:1,argument:[1,19],ascii:[1,7],ask:1,assign:1,assum:1,astr:1,astream:1,atitl:1,attibut:1,attr:[1,2],attrib:1,attribut:[1,2],authent:13,author:1,automat:[6,8],autoreset:2,autotool:[1,5],avail:6,avari:1,avoid:13,award:1,back:2,backtick:1,base:[1,2,14],bash:[1,8,13],bashfileenviron:1,bat:[1,8],batch:1,batch_salom:1,batfileenviron:1,becaus:1,been:[1,2],befor:[1,5],begin:1,behavior:19,being:1,belong:1,below:8,between:[1,19],bienvenu:1,big:5,bigger:1,bin:8,binari:12,black:2,blogmatrix:1,blue:2,bom:1,bonjour:19,bool:1,both:[1,8,9],bracket:1,branch:13,bright:2,bright_background:2,bring:[9,13],browser:[1,6,7,11,14],buf:1,build:[1,4,5,8,14],build_conf_opt:1,build_configur:1,build_sourc:5,builder:1,built:1,call:[1,2,8,10,19],call_win32:2,callabl:1,can:[1,3,8,13,14,15,19],cannot:1,car:1,care:4,carri:1,catalog:[3,10],cfg:[1,8,19],cfg_env:1,cfgforpi:1,chang:[1,3,18,19],change_to_launch:1,charact:[1,2],charg:10,check:[1,5,8],check_config_exist:1,check_config_has_appl:1,check_config_has_profil:1,check_instal:1,check_sourc:1,check_src:1,checkout:[1,13],chmod:1,choic:6,circumst:1,clash:1,classic:1,clean:[1,5,11,15],clean_al:[5,18],clean_build_aft:5,clean_instal:5,cleancolor:1,clear_lin:2,clear_screen:2,cli:[11,18],cli_:19,client:1,clone:13,close:1,closest:1,cmake:[1,5],cmake_opt:5,cmd:1,co7:12,code:[1,2,8],code_to_char:2,color:[1,2],colorama:[0,1],colorama_text:2,column:1,com:1,come:6,command:[1,2,14,16,18],command_nam:1,command_opt:18,command_r:1,command_valu:1,comment:[1,14],commentari:1,commit:4,common:1,commonli:1,compat:1,compil:[0,7,8,9,11,13,15],compil_script:5,complementari:8,complet:[5,6,13,14],complete_environ:1,compon:[1,3,9],componon:9,compress:12,comput:[1,9,12],concaten:1,concern:13,config:[1,13,14,15,18],config_has_appl:1,configerror:1,configformaterror:1,configinputstream:1,configlist:1,configmerg:1,configoutputstream:1,configread:1,configresolutionerror:1,configur:[1,15,19],configure_opt:1,configut:3,conflict:1,conform:9,consist:1,consol:1,construct:[1,15,17],contain:[1,14,19],content:0,context:[1,18],contextfileenviron:1,continu:1,control:12,conveni:1,convert:2,convert_ansi:2,convert_osc:2,copi:[1,3,6,10,18],copydir:1,copyfil:1,copylink:1,copyright:1,corba:9,correct:1,correl:1,correspond:[1,8,11,13],could:[1,4,8,16],cpp:[1,9],creat:[1,3,4,8,10,12,13,14,15],creation:12,critic:1,current:[1,6,14,18,19],cursor_adjust:2,cvs:1,cvs_extract:1,cvs_info:13,cvspass:13,cwd:1,cyan:2,dai:1,data:[1,6,19],date:[1,14],date_to_datetim:1,datetim:1,david:1,dbg:1,debug:[0,6,8,13],debug_writ:1,decid:1,declar:13,deep:1,deepcopy_list:1,deepcopymap:1,def:[1,8,19],default_valu:1,defaultlogg:1,defaultmergeresolv:1,defaultstreamopen:1,defin:[1,4,5,6,8,9,14,19],definit:1,deinit:2,delai:1,delaiapp:1,deleg:2,delet:12,delimit:1,delta:1,depend:[1,5,12],deriv:1,describ:1,descript:[1,19],design:1,destnam:1,detail:1,detar:16,detect:1,determin:1,dev:1,develop:[1,4,6,8,13,19],dict:1,dict_arg:1,dictionari:[1,14],differ:8,dim:2,dir:[1,6,13],dir_info:13,directli:[8,11,16],directori:[1,3,4,5,6,8,10,11,12,13,14,16,18,19],dirpath:1,displai:[1,5,6,7,11,19],distant:3,distinguish:8,distrib:1,distribut:[1,3,9],divis:1,dixt:1,do_batch_script_build:1,do_default_build:1,do_python_script_build:1,do_script_build:1,doc:15,doctyp:1,document:[7,9,14,19],doe:[1,8,13],dollar:1,don:9,done:[8,18],dot:1,dove:1,down:2,download:[1,13],drive:1,dst:1,due:1,dump:1,duplic:5,dure:13,dynam:14,each:[1,3,10,13,14],earlier:1,earliest:1,echo:1,edit:[6,7,13],editor:[1,6,7,14],eearch:1,either:[1,8],eleg:1,elem:1,element:1,element_factori:1,elementtre:0,els:[1,19],embed:12,empti:1,enable_simple_env_script:1,enclos:1,encod:1,end:[1,2,8],end_writ:1,ensur:1,ensure_path_exist:1,entri:1,env:8,env_build:8,env_info:1,env_launch:8,env_script:8,environ:[0,9,14,15],equal:5,eras:11,erase_lin:2,erase_screen:2,error:1,etc:[1,14,15],etre:1,eval:1,evalu:1,event:1,everyth:5,evinc:7,exactli:1,exampl:[1,4,5,6,7,8,12,13,15,18],exc:1,except:[1,13,18],execut:[1,5,13,18],exhaust:[14,18],exist:[1,12,13,18],exot:1,expect:1,explain:8,explicitli:1,explor:6,express:[1,6],extens:[1,19],extra:1,extract:1,extract_param:2,fact:19,factor:1,factori:1,fail:[1,5],fals:[1,2],far:1,favorit:6,feed:1,field:1,file:[1,3,5,6,7,8,10,11,12,13,14,15,19],file_nam:1,file_path:1,fileenviron:0,fileenvwrit:1,filein:1,filenam:1,filepath:1,filter:[1,4],filterlevel:1,filterlist2:1,fin:1,find:[1,6,15,16],find_file_in_lpath:1,find_node_by_attrib:1,findal:1,findconfig:1,findtext:1,finish:1,firefox:[7,11,14],first:[1,8,13,19],fix:1,flag:5,flush:1,fmt:1,follow:[1,8,19],for_packag:1,forbuild:1,forc:[1,12,13],force_patch:13,fore:2,forget:1,fork:0,form:1,format:[1,7,8,14],format_color_except:1,format_except:1,forward:[2,3,10],found:1,four:8,french:19,from:[1,2,6,7,8,9,12,13,19],from_what:1,fromstr:1,full:1,full_launched_command:1,fun:6,func:1,futur:1,gdb:8,gedit:7,gencat:[3,10],gener:[1,2,3,8,10,15,18],generate_launching_command:1,generate_script:1,generic_opt:18,geom:5,get:[1,6,7,13,14,19],get_attr:2,get_attrib:1,get_base_install_dir:1,get_base_path:1,get_cfg_param:1,get_distrib_vers:1,get_distribut:1,get_file_environ:1,get_help:1,get_install_dir:1,get_launcher_nam:1,get_log_path:1,get_method:13,get_nam:1,get_nb_proc:1,get_node_text:1,get_posit:2,get_product_compon:1,get_product_config:1,get_product_depend:1,get_product_sect:1,get_products_info:1,get_property_in_product_cfg:1,get_python_vers:1,get_salome_vers:1,get_test_timeout:1,get_tmp_dir:1,get_tmp_filenam:1,get_us:1,get_win32_cal:2,getbypath:1,getchar:1,getcurrentlogg:1,getdefaultlogg:1,getdetailopt:1,getiter:1,getlocalenv:1,getroot:1,getrootattrib:1,getstrconfigdbg:1,getstrconfigstd:1,gettmpdir:1,gettmpdirdefault:1,gettoken:1,getunittestlogg:1,git:[1,12],git_extract:1,git_info:13,gitconfig:13,give:[1,3,14,19],given:[1,2,3,8,10],global:1,goe:1,green:2,grei:2,grep:6,grid:1,gui:1,hack_libtool:1,had:1,handl:[1,2,8],handlemismatch:1,handleremovereadonli:1,hard:1,harri:1,has:[1,2,8,19],has_salome_hui:1,has_timed_out:1,hat:1,have:[1,3,4,9,10,13],header:1,help:[1,19],helpstr:1,here:[1,8,14,19],hierarchi:1,highlight:1,himself:8,hold:10,home:6,hour:1,how:[1,7,8,13,14],html:[1,7],http:[1,2],hxx2salom:9,ident:1,identifi:1,ignor:[1,9],ignorelist:1,imag:13,implement:[1,2,8],includ:[1,8,12,14],indent:1,index:1,indic:1,indirect:1,info:[1,6,13],inform:[1,6,7,12,13,14],init:[1,2],initi:1,initialis:[0,1],inmap:1,input:1,input_list:1,insid:13,instal:[1,4,5,14,15,18],install_dir:8,instanc:[1,2,19],instanti:1,instead:1,instream:1,instruct:[1,14],intal:12,interact:11,interfac:[1,18],intern:1,invalid:1,ioerror:1,iostream:1,is_a_tti:2,is_defin:1,is_salome_modul:[4,8],is_stream_clos:2,is_window:1,iscurrentloggerunittest:1,isdir:1,isel:1,isfil:1,islink:1,issu:2,istypeconfig:1,isword:1,item:1,iter:1,iteritem:1,iterkei:1,iterpars:1,its:[1,5,6,8,14],ivar:1,jane:1,job:5,join:8,just:[1,5],keep:1,kei:[1,8,13],kernel:[1,6,18],killsalom:1,know:[1,13],known:12,kwarg:2,kwd:2,label:[1,6],lanch:1,lapack:8,lapack_root_dir:8,last:[1,8,11],last_termin:11,later:12,latter:1,launch:[1,8],launch_command:1,launcher:[1,3,8,15],launcher_nam:10,launcherfileenviron:1,layer:9,ld_library_path:8,left:8,level:[1,18,19],lhs:1,lib:8,librari:1,light:2,lightblack_ex:2,lightblue_ex:2,lightcyan_ex:2,lightgreen_ex:2,lightmagenta_ex:2,lightred_ex:2,lightwhite_ex:2,lightyellow_ex:2,like:[1,2,3,5,6,10,14],limit:1,line:[1,6,18],link:[1,13],list:[1,3,4,6,10,14],list_log_fil:1,list_of_product:9,listtest:1,llvm:[3,10],load:[1,14],load_cfg_environ:1,load_environ:1,local:[6,7],locat:1,log:[1,5,15,19],log_command:1,log_dir:11,log_file_nam:1,logdir:1,logfilepath:1,logger:0,login:13,logo:[1,10],lome:15,longnam:1,lost:1,lpath:1,lproduct:1,machin:[1,3,9,10,12],machine1:3,machine2:3,machine3:3,magenta:2,mai:13,main:5,make:[1,5],make_flag:5,make_opt:1,makepath:1,manag:[1,6,13],manipul:[1,6],map1:1,map2:1,map:1,match:1,max:1,mechan:[1,8],med:5,memori:[3,10],menu:11,merg:1,merge:1,merge_dict:1,mergemap:1,mergesequ:1,mesa:[1,3,10],messag:[1,19],method:[1,2,5,8,13,19],micro_command:1,minim:1,minut:1,mismatch:1,miss:[3,5],mistak:13,mode:[1,2,4,6,8,11,18],model:19,modifi:[1,7,8,13],modul:[0,3,5,9,10,13,14,15],mon:1,mond:19,more:[1,18],most:[1,8,19],msg:1,multi:1,multilin:1,multipl:1,must:[1,19],my_application_directori:3,my_application_nam:3,my_tag:13,mycommand:19,mydebug:1,myoption:19,myspecificnam:12,mytempl:1,name:[1,3,4,6,8,10,12,13,14,18,19],name_nod:1,namespac:1,nativ:[1,8],nb_line:1,nb_proc:[1,5],need:[1,2,3,9,13],new_nam:6,next:1,nfirst:1,no_label:6,node:1,node_nam:1,non:2,none:[1,2],nor:2,normal:[1,2],note:[1,3,8,10,14],noth:[1,12],notimplementederror:1,notion:1,notshowncommand:1,number:[1,3,5,10,11],number_of_proc:1,obj1:1,obj2:1,object:[1,2,14],obsolesc:1,obtain:1,obvious:[],occur:1,ode:1,old:1,older:11,on_stderr:2,onc:13,one:[1,6],onli:[1,3,4,5,6,8,9,10,11,13,18],only_numb:1,ool:15,open:1,openggl:[3,10],openmpi:1,oper:[1,6,15],operand:1,opt_nb_proc:1,option:[0,2,3,5,6,8,9,10,11,12,13,14,19],optionali:1,optiontyp:1,optresult:1,order:[1,13,14,19],org:2,other:[1,8,12,14],otherwis:[1,13],our:2,out:1,out_dir:1,output:[1,2],output_verbose_level:1,outstream:1,overrid:[1,3],overwrit:1,overwritekei:1,overwritemergeresolv:1,overwritten:1,own:1,packag:[0,15,16],page:8,pair:1,param:[1,2],param_nam:1,paramet:[1,6,14,19],parameter_path:6,paramstr:2,paravi:[3,10],parent:1,parma:1,pars:[1,19],parse_arg:[1,19],parse_d:1,parseargu:1,parsefactor:1,parsekeyvaluepair:1,parsemap:1,parsemappingbodi:1,parser:[1,19],parserefer:1,parsescalar:1,parsesequ:1,parsesuffix:1,parseterm:1,parsevalu:1,part:[1,3,8,10],particular:1,pass:[1,14,19],passphras:13,password:13,patch:[1,6,13],path:[1,8,10],path_to_catalog:3,path_to_yacsgen:9,pattern:1,pdf:[6,7,15],pdf_viewer:7,pend:4,pendant:1,perform:[13,15],person:6,phase:1,platform:[2,8],pleas:[8,9],plugin:[1,5],pluma:[7,14],point:[1,19],pop_debug:1,popul:1,posit:2,possibl:[1,8,13,19],potenti:1,pprty:1,preced:1,prefer:[6,7,14],prefix:[1,8,14],prepar:[1,15,19],prepare_testbas:1,prepare_testbase_from_dir:1,prepare_testbase_from_git:1,prepare_testbase_from_svn:1,prepend:[1,8],prepend_valu:1,prereq_dir:8,prerequisit:[8,12,14,15,18],presenc:1,preset:1,pretti:1,previou:1,previous:4,print:[1,2,6,11],print_color_map:1,print_color_rang:1,print_help:[],print_info:1,print_valu:1,printc:1,printcerror:1,printchead:1,printchighlight:1,printcinfo:1,printclabel:1,printcolor:0,printcsuccess:1,printcwarn:1,problem:[1,3,10],procedur:1,process:13,processinginstruct:1,processor:[1,3,10],prod_dir:1,prod_info:1,produc:1,product1:[5,8,13],product2:[5,8,13],product:[0,4,5,6,8,9,10,12,13,15,19],product_cfg:1,product_compil:1,product_has_env_script:1,product_has_logo:1,product_has_patch:1,product_has_salome_gui:1,product_has_script:1,product_info:1,product_is_autotool:1,product_is_cmak:1,product_is_cpp:1,product_is_debug:1,product_is_dev:1,product_is_fix:1,product_is_gener:1,product_is_mpi:1,product_is_n:1,product_is_salom:1,product_is_sampl:[],product_is_smesh_plugin:1,product_is_vc:1,product_is_verbos:1,product_nam:1,profil:[1,10],program:1,programmat:8,progress:1,project:[6,8],properti:[1,4,8,9],protocol:[1,3],provid:[1,8,19],proxi:2,pubid:1,push:13,push_debug:1,put:1,put_initial_xml_field:1,put_txt_log_in_appli_log_dir:1,pv_plugin_path:1,pwd:1,pyconf:[0,5,6,8,13,14,19],python:[1,8,10,14,15,16,19],python_config:1,pythonpath:8,pythonpath_:8,qname:1,queri:[3,10],rais:[1,18],rang:1,raw:1,read:1,read_config_from_a_fil:1,read_result:1,reader:1,readi:13,readlin:1,readlink:1,readxmlfil:1,recurs:[1,6],red:[1,2],redefin:1,redirect:1,ref:1,refer:[1,9,14],reflect:1,regard:1,regular:1,reinit:[1,2],rel:[1,12],relai:1,remain:[11,16],remainderarg:1,remark:3,remor:9,remot:[1,12],remov:[1,4,5,13],remove_item_from_list:1,removenamespac:1,renam:1,renint:1,replac:[1,3],replace_in_fil:1,report:1,repositori:[1,13],repres:1,represent:1,request:2,requir:[1,2,8,9],reserv:1,reset:2,reset_al:2,resolut:1,resolv:1,resourc:[3,10],respect:8,restor:[1,4],result:1,retriev:1,rhs:1,right:[1,8],root:[1,19],root_nod:1,rootnam:1,rst:7,rtype:1,run:[1,8,14,15,19],run_all_test:1,run_env_script:1,run_grid_test:1,run_script:1,run_session_test:1,run_simple_env_script:1,run_test:1,run_testbase_test:1,runappli:3,runner:19,ruud:1,sajip:1,salom:[1,3,4,5,6,8,9,10,12,14,16],salome_modul:1,salome_session_serv:1,salome_xx:[4,12,16,18],salome_xx_:12,salomecontext:1,salomeenviron:1,salometool:[1,3,6,8,12,14,15,16],same:[1,7],sampl:18,sat:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19],satexcept:1,save:8,saveconfigdbg:1,saveconfigstd:1,scalar:1,screenenviron:1,screenonli:1,script:[1,5,6,8,10,14,15,16],script_nam:1,script_path:1,search:1,search_known_error:1,second:[1,8,19],section:[1,3,8,13],secur:13,see:[1,2,14,18],seen:1,select:12,self:1,semant:1,send:1,sendmessagetocurrentlogg:1,sep:[1,8],separ:1,seq1:1,seq2:1,seq:1,seqit:1,sequenc:[1,2],server:[1,13],servic:19,session:1,set:[1,3,4,8,10,14,15,19],set_a_product:1,set_application_env:1,set_attr:2,set_consol:2,set_cpp_env:1,set_cursor_posit:2,set_env:[1,8],set_env_build:8,set_env_launch:8,set_full_environ:1,set_native_env:[1,8],set_product:1,set_python_libdir:1,set_salome_generic_product_env:1,set_salome_minimal_product_env:1,set_titl:2,setconsoletextattribut:2,setcurrentlogg:1,setpath:1,setstream:1,sever:[8,14],shallow:1,shell:[1,8],shortcut:1,shortnam:1,should:[1,8,9],should_wrap:2,show:[1,5,7,11],show_command_log:1,show_desktop:1,show_in_editor:1,show_patch:6,show_progress:1,show_warn:1,showinfo:1,shown:[1,5],sign:1,silent_sysstd:1,similar:1,simpl:[1,18,19],sinc:1,site:1,size:1,smaller:1,smart:1,smartcopi:1,smesh:1,softwar:13,some:[1,8,10,14,19],someon:8,sometim:4,sommeil:1,soon:5,sourc:[1,2,4,6,7,12,13],sources_without_dev:4,special_path_separ:1,specif:[1,3,4,8,9,10,12,14,18],specifi:[1,3,8,9,10,13],splashscreen:10,src:19,src_root:1,sre_pattern:[1,2],ssh:[3,10,13],stack:[1,18],start:[1,2,3,5,10],statu:1,stderr:1,stdout:[1,2],step:1,stop:5,stop_first_fail:5,store:[1,5,6,11,13,14],str:1,str_num:1,stream:[1,2],streamopen:1,streamorfil:1,streamwrapp:2,strin:1,string:1,stringio:1,strip:2,strout:1,structur:14,stuff:[1,10],style:[1,2],stylesheet:1,sub:[1,14],subclass:1,subel:1,submodul:0,subpackag:0,subsect:8,subset:12,subst_dic:1,substitut:1,subtract:1,success:[1,5],successfulli:1,suffici:8,suffix:1,suit:15,suitabl:1,support:1,supposedli:1,suppress:4,svn:[1,12],svn_extract:1,svn_info:13,symlink:1,syntax:[1,4],sys:1,system:[0,12],tab:1,tabl:1,tag:[1,13],take:[1,4],taken:[1,8],tar:[12,16],target:[1,3,8],tcllibpath:1,templat:0,template_fil:1,temporari:1,term:1,termin:[1,2,5,11,19],test:[1,5,15],test_base_nam:1,test_config:1,test_grid:1,test_modul:0,test_nam:1,test_sess:1,testbas:1,testbase_bas:1,testbase_dir:1,testbase_nam:1,testbase_tag:1,text:[1,2,7,18],text_or_uri:1,tgz:[12,16],thank:1,thei:[4,6,8,13],them:[2,13],thi:[1,2,3,5,6,8,9,10,12,13,14,15,19],thing:19,those:9,through:[3,8,10,11],thrown:1,time:[1,4,8,13,14],timedelta:1,timedelta_total_second:1,tip:1,titl:[1,2],tklibpath:1,tmp_working_dir:1,tofix:1,token:1,token_typ:1,token_valu:1,top:1,tostr:1,total_second:1,tout:19,trace:[1,18],traceback:1,transform:1,transpar:2,tree:1,treebuild:1,trust_root_dir:8,tty:2,tupl:1,turn:1,tutori:1,two:[1,8],txt:1,type:[1,13],typeerror:1,unabl:1,unchang:1,unconditionali:[1,18],under:[1,15],underscor:[1,8],unicod:1,unit:5,unittestlogg:1,unless:[2,13],updat:1,update_hat_xml:1,updatehatxml:1,urllib2:1,urlopen:1,usag:[1,15],use:[1,3,5,8,10,11,12,13,14,16],use_mesa:[3,10],used:[1,3,5,6,7,8,11,12,13,14,15],useful:[8,10,19],user:[1,6,7,8,11,12,16,18],usernam:1,uses:[1,8,9,13,14],using:[1,2,9],usr:8,usual:[4,9,12,14,16,18],utf:[1,8],util:[1,12,15],valid:1,valu:[1,2,3,4,6,13,14],variabl:[1,8,9,19],vcs:1,verbos:[1,19],verifi:[1,13],version:[1,8,9,12,14,15],via:1,viewer:[6,7],vinai:1,virtual:[1,3],virtual_app:3,visualis:8,wai:[1,5,19],want:[1,4,8,19],warn:[1,5],web:[6,7,11,14],welcom:1,welkom:1,well:1,were:1,what:[1,4],when:[1,3,8,13,14,19],whenev:1,where:[1,3,5,6,12],which:[1,2,8,9,14,19],white:2,who:9,wiki:2,wikipedia:2,wil:8,win32:[0,1],winapi_test:2,wincolor:2,window:[1,2,8],winstyl:2,winterm:[0,1],with_children:5,with_commerci:1,with_fath:5,with_install_dir:1,with_vc:12,within:8,without:[1,6,13],without_properti:12,wmake:1,word:1,work:[1,6,12,13,14],workdir:[1,3,6,10,12,14,18,19],world:19,would:1,wrap:2,wrap_stream:2,writabl:1,write:[1,2,19],write_and_convert:2,write_back:1,write_cfgforpy_fil:1,write_env_fil:1,write_plain_text:2,write_report:1,write_test_margin:1,write_tre:1,writetostream:1,writevalu:1,written:19,www:1,xa4:1,xc2:1,xml:[1,7,19],xmllogfil:1,xmlmanag:0,xmlroot:1,xmltreebuild:1,xxx:[4,14],xxx_root_dir:1,xxx_src_dir:1,yac:1,yacsgen:[1,9],yacsgen_root_dir:9,year:1,yellow:2,yes:[1,4,8,9,13],yet:[1,18],yield:1,you:[1,3,4,8,10,13,15,19],your:[1,7,8,13,18,19],yourspecificnam:12,yve:1,yyi:14,yyyi:1,yyyymmdd_hhmmss:1,yyyymmdd_hhmmss_namecmd:1,zelaunch:10,zero:1,zerodivideerror:1},titles:["src","src package","src.colorama package","Command application","Command clean","Command compile","Command config","Command doc","Command environ","Command generate","Command launcher","Command log","Command package","Command prepare","Configuration","Salome Tools","Installation","Release notes","Usage of SAlomeTools","Add a user custom command"],titleterms:{"var":14,VCS:13,access:19,add:19,ansi:2,ansitowin32:2,applic:[3,14],architectur:1,avail:[4,18],base:13,basic:19,build:18,clean:4,code:15,colorama:2,command:[3,4,5,6,7,8,9,10,11,12,13,15,19],compil:[1,5,18],config:[6,19],configur:[3,4,5,6,7,8,10,11,12,13,14],content:[1,2],custom:19,cvs:13,debug:[1,18],descript:[3,4,5,6,7,8,9,10,11,12,13,14],dev:13,develop:15,doc:7,document:15,elementtre:1,environ:[1,8],exampl:19,fileenviron:1,fork:1,gener:9,get:18,git:13,hello:19,help:18,howto:19,initialis:2,instal:16,introduct:19,launcher:10,list:[15,18],log:11,logger:[1,19],mode:13,modul:[1,2],note:[15,17],option:[1,4,18],other:19,packag:[1,2,12],path:[3,4,5,6,7,11,12,13],prepar:[13,18],printcolor:1,product:[1,14,18],pyconf:1,quick:15,releas:[15,17],remark:[9,13],requir:19,salom:[15,18],salometool:[18,19],sat:18,section:14,some:[3,4,5,6,7,11,12,13],sourc:18,src:[0,1,2],start:15,submodul:[1,2],subpackag:1,svn:13,syntax:14,system:1,templat:1,test_modul:1,tool:15,usag:[3,4,5,6,7,8,9,10,11,12,13,18],useful:[3,4,5,6,7,11,12,13],user:[14,19],verbos:18,win32:2,winterm:2,xmlmanag:1}})
\ No newline at end of file
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Command config" href="commands/config.html" />
+ <link rel="next" title="Command doc" href="commands/doc.html" />
<link rel="prev" title="Configuration" href="configuration.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="configuration.html" title="previous chapter">Configuration</a></li>
- <li>Next: <a href="commands/config.html" title="next chapter">Command config</a></li>
+ <li>Next: <a href="commands/doc.html" title="next chapter">Command doc</a></li>
</ul></li>
</ul>
</div>
\@writefile{toc}{\contentsline {subsubsection}{src.debug module}{35}{subsubsection*.188}}
\newlabel{commands/apidoc/src:module-src.debug}{{4.1.1}{35}{src.debug module}{subsubsection*.188}{}}
\newlabel{commands/apidoc/src:src-debug-module}{{4.1.1}{35}{src.debug module}{subsubsection*.188}{}}
-\newlabel{commands/apidoc/src:src.debug.InStream}{{4.1.1}{35}{src.debug module}{section*.189}{}}
-\newlabel{commands/apidoc/src:src.debug.OutStream}{{4.1.1}{35}{src.debug module}{section*.190}{}}
-\newlabel{commands/apidoc/src:src.debug.OutStream.close}{{4.1.1}{35}{src.debug module}{section*.191}{}}
-\newlabel{commands/apidoc/src:src.debug.getLocalEnv}{{4.1.1}{35}{src.debug module}{section*.192}{}}
-\newlabel{commands/apidoc/src:src.debug.getStrConfigDbg}{{4.1.1}{35}{src.debug module}{section*.193}{}}
-\newlabel{commands/apidoc/src:src.debug.getStrConfigStd}{{4.1.1}{36}{src.debug module}{section*.194}{}}
-\newlabel{commands/apidoc/src:src.debug.indent}{{4.1.1}{36}{src.debug module}{section*.195}{}}
-\newlabel{commands/apidoc/src:src.debug.pop_debug}{{4.1.1}{36}{src.debug module}{section*.196}{}}
-\newlabel{commands/apidoc/src:src.debug.push_debug}{{4.1.1}{36}{src.debug module}{section*.197}{}}
-\newlabel{commands/apidoc/src:src.debug.saveConfigDbg}{{4.1.1}{36}{src.debug module}{section*.198}{}}
-\newlabel{commands/apidoc/src:src.debug.saveConfigStd}{{4.1.1}{36}{src.debug module}{section*.199}{}}
-\newlabel{commands/apidoc/src:src.debug.tofix}{{4.1.1}{36}{src.debug module}{section*.200}{}}
-\newlabel{commands/apidoc/src:src.debug.write}{{4.1.1}{36}{src.debug module}{section*.201}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.environment module}{36}{subsubsection*.202}}
-\newlabel{commands/apidoc/src:src-environment-module}{{4.1.1}{36}{src.environment module}{subsubsection*.202}{}}
-\newlabel{commands/apidoc/src:module-src.environment}{{4.1.1}{36}{src.environment module}{subsubsection*.202}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ}{{4.1.1}{36}{src.environment module}{section*.203}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.append}{{4.1.1}{36}{src.environment module}{section*.204}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.append_value}{{4.1.1}{36}{src.environment module}{section*.205}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.command_value}{{4.1.1}{36}{src.environment module}{section*.206}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.get}{{4.1.1}{36}{src.environment module}{section*.207}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.is_defined}{{4.1.1}{36}{src.environment module}{section*.208}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.prepend}{{4.1.1}{37}{src.environment module}{section*.209}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.prepend_value}{{4.1.1}{37}{src.environment module}{section*.210}{}}
-\newlabel{commands/apidoc/src:src.environment.Environ.set}{{4.1.1}{37}{src.environment module}{section*.211}{}}
-\newlabel{commands/apidoc/src:src.environment.FileEnvWriter}{{4.1.1}{37}{src.environment module}{section*.212}{}}
-\newlabel{commands/apidoc/src:src.environment.FileEnvWriter.write_cfgForPy_file}{{4.1.1}{37}{src.environment module}{section*.213}{}}
-\newlabel{commands/apidoc/src:src.environment.FileEnvWriter.write_env_file}{{4.1.1}{37}{src.environment module}{section*.214}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron}{{4.1.1}{37}{src.environment module}{section*.215}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.add_comment}{{4.1.1}{37}{src.environment module}{section*.216}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.add_line}{{4.1.1}{38}{src.environment module}{section*.217}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.add_warning}{{4.1.1}{38}{src.environment module}{section*.218}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.append}{{4.1.1}{38}{src.environment module}{section*.219}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.dump}{{4.1.1}{38}{src.environment module}{section*.220}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.finish}{{4.1.1}{38}{src.environment module}{section*.221}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.get}{{4.1.1}{38}{src.environment module}{section*.222}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.get_names}{{4.1.1}{38}{src.environment module}{section*.223}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.is_defined}{{4.1.1}{38}{src.environment module}{section*.224}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.load_cfg_environment}{{4.1.1}{38}{src.environment module}{section*.225}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.prepend}{{4.1.1}{38}{src.environment module}{section*.226}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.run_env_script}{{4.1.1}{38}{src.environment module}{section*.227}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.run_simple_env_script}{{4.1.1}{39}{src.environment module}{section*.228}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set}{{4.1.1}{39}{src.environment module}{section*.229}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_a_product}{{4.1.1}{39}{src.environment module}{section*.230}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_application_env}{{4.1.1}{39}{src.environment module}{section*.231}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_cpp_env}{{4.1.1}{39}{src.environment module}{section*.232}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_full_environ}{{4.1.1}{39}{src.environment module}{section*.233}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_products}{{4.1.1}{39}{src.environment module}{section*.234}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_python_libdirs}{{4.1.1}{39}{src.environment module}{section*.235}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_salome_generic_product_env}{{4.1.1}{39}{src.environment module}{section*.236}{}}
-\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_salome_minimal_product_env}{{4.1.1}{39}{src.environment module}{section*.237}{}}
-\newlabel{commands/apidoc/src:src.environment.Shell}{{4.1.1}{40}{src.environment module}{section*.238}{}}
-\newlabel{commands/apidoc/src:src.environment.load_environment}{{4.1.1}{40}{src.environment module}{section*.239}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.fileEnviron module}{40}{subsubsection*.240}}
-\newlabel{commands/apidoc/src:src-fileenviron-module}{{4.1.1}{40}{src.fileEnviron module}{subsubsection*.240}{}}
-\newlabel{commands/apidoc/src:module-src.fileEnviron}{{4.1.1}{40}{src.fileEnviron module}{subsubsection*.240}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron}{{4.1.1}{40}{src.fileEnviron module}{section*.241}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron.command_value}{{4.1.1}{40}{src.fileEnviron module}{section*.242}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron.finish}{{4.1.1}{40}{src.fileEnviron module}{section*.243}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron.set}{{4.1.1}{40}{src.fileEnviron module}{section*.244}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron}{{4.1.1}{40}{src.fileEnviron module}{section*.245}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.add_comment}{{4.1.1}{40}{src.fileEnviron module}{section*.246}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.command_value}{{4.1.1}{40}{src.fileEnviron module}{section*.247}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.finish}{{4.1.1}{40}{src.fileEnviron module}{section*.248}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.get}{{4.1.1}{41}{src.fileEnviron module}{section*.249}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.set}{{4.1.1}{41}{src.fileEnviron module}{section*.250}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron}{{4.1.1}{41}{src.fileEnviron module}{section*.251}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.add_echo}{{4.1.1}{41}{src.fileEnviron module}{section*.252}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.add_warning}{{4.1.1}{41}{src.fileEnviron module}{section*.253}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.append_value}{{4.1.1}{41}{src.fileEnviron module}{section*.254}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.command_value}{{4.1.1}{41}{src.fileEnviron module}{section*.255}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.finish}{{4.1.1}{41}{src.fileEnviron module}{section*.256}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.get}{{4.1.1}{41}{src.fileEnviron module}{section*.257}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.prepend_value}{{4.1.1}{41}{src.fileEnviron module}{section*.258}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.set}{{4.1.1}{41}{src.fileEnviron module}{section*.259}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron}{{4.1.1}{42}{src.fileEnviron module}{section*.260}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_comment}{{4.1.1}{42}{src.fileEnviron module}{section*.261}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_echo}{{4.1.1}{42}{src.fileEnviron module}{section*.262}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_line}{{4.1.1}{42}{src.fileEnviron module}{section*.263}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_warning}{{4.1.1}{42}{src.fileEnviron module}{section*.264}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.append}{{4.1.1}{42}{src.fileEnviron module}{section*.265}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.append_value}{{4.1.1}{42}{src.fileEnviron module}{section*.266}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.command_value}{{4.1.1}{42}{src.fileEnviron module}{section*.267}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.finish}{{4.1.1}{42}{src.fileEnviron module}{section*.268}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.get}{{4.1.1}{42}{src.fileEnviron module}{section*.269}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.is_defined}{{4.1.1}{43}{src.fileEnviron module}{section*.270}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.prepend}{{4.1.1}{43}{src.fileEnviron module}{section*.271}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.prepend_value}{{4.1.1}{43}{src.fileEnviron module}{section*.272}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.set}{{4.1.1}{43}{src.fileEnviron module}{section*.273}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron}{{4.1.1}{43}{src.fileEnviron module}{section*.274}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add}{{4.1.1}{43}{src.fileEnviron module}{section*.275}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_comment}{{4.1.1}{43}{src.fileEnviron module}{section*.276}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_echo}{{4.1.1}{43}{src.fileEnviron module}{section*.277}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_line}{{4.1.1}{43}{src.fileEnviron module}{section*.278}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_warning}{{4.1.1}{43}{src.fileEnviron module}{section*.279}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.append}{{4.1.1}{43}{src.fileEnviron module}{section*.280}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.append_value}{{4.1.1}{44}{src.fileEnviron module}{section*.281}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.change_to_launcher}{{4.1.1}{44}{src.fileEnviron module}{section*.282}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.command_value}{{4.1.1}{44}{src.fileEnviron module}{section*.283}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.finish}{{4.1.1}{44}{src.fileEnviron module}{section*.284}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.get}{{4.1.1}{44}{src.fileEnviron module}{section*.285}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.is_defined}{{4.1.1}{44}{src.fileEnviron module}{section*.286}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.prepend}{{4.1.1}{44}{src.fileEnviron module}{section*.287}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.prepend_value}{{4.1.1}{44}{src.fileEnviron module}{section*.288}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.set}{{4.1.1}{44}{src.fileEnviron module}{section*.289}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron}{{4.1.1}{44}{src.fileEnviron module}{section*.290}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_comment}{{4.1.1}{45}{src.fileEnviron module}{section*.291}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_echo}{{4.1.1}{45}{src.fileEnviron module}{section*.292}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_line}{{4.1.1}{45}{src.fileEnviron module}{section*.293}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_warning}{{4.1.1}{45}{src.fileEnviron module}{section*.294}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.append}{{4.1.1}{45}{src.fileEnviron module}{section*.295}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.command_value}{{4.1.1}{45}{src.fileEnviron module}{section*.296}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.get}{{4.1.1}{45}{src.fileEnviron module}{section*.297}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.is_defined}{{4.1.1}{45}{src.fileEnviron module}{section*.298}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.prepend}{{4.1.1}{45}{src.fileEnviron module}{section*.299}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.run_env_script}{{4.1.1}{45}{src.fileEnviron module}{section*.300}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.set}{{4.1.1}{45}{src.fileEnviron module}{section*.301}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.write}{{4.1.1}{46}{src.fileEnviron module}{section*.302}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.get_file_environ}{{4.1.1}{46}{src.fileEnviron module}{section*.303}{}}
-\newlabel{commands/apidoc/src:src.fileEnviron.special_path_separator}{{4.1.1}{46}{src.fileEnviron module}{section*.304}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.fork module}{46}{subsubsection*.305}}
-\newlabel{commands/apidoc/src:module-src.fork}{{4.1.1}{46}{src.fork module}{subsubsection*.305}{}}
-\newlabel{commands/apidoc/src:src-fork-module}{{4.1.1}{46}{src.fork module}{subsubsection*.305}{}}
-\newlabel{commands/apidoc/src:src.fork.batch}{{4.1.1}{46}{src.fork module}{section*.306}{}}
-\newlabel{commands/apidoc/src:src.fork.batch_salome}{{4.1.1}{46}{src.fork module}{section*.307}{}}
-\newlabel{commands/apidoc/src:src.fork.launch_command}{{4.1.1}{46}{src.fork module}{section*.308}{}}
-\newlabel{commands/apidoc/src:src.fork.show_progress}{{4.1.1}{46}{src.fork module}{section*.309}{}}
-\newlabel{commands/apidoc/src:src.fork.write_back}{{4.1.1}{46}{src.fork module}{section*.310}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.logger module}{46}{subsubsection*.311}}
-\newlabel{commands/apidoc/src:module-src.logger}{{4.1.1}{46}{src.logger module}{subsubsection*.311}{}}
-\newlabel{commands/apidoc/src:src-logger-module}{{4.1.1}{46}{src.logger module}{subsubsection*.311}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger}{{4.1.1}{46}{src.logger module}{section*.312}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger.add_link}{{4.1.1}{46}{src.logger module}{section*.313}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger.end_write}{{4.1.1}{47}{src.logger module}{section*.314}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger.error}{{4.1.1}{47}{src.logger module}{section*.315}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger.flush}{{4.1.1}{47}{src.logger module}{section*.316}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger.put_initial_xml_fields}{{4.1.1}{47}{src.logger module}{section*.317}{}}
-\newlabel{commands/apidoc/src:src.logger.Logger.write}{{4.1.1}{47}{src.logger module}{section*.318}{}}
-\newlabel{commands/apidoc/src:src.logger.date_to_datetime}{{4.1.1}{47}{src.logger module}{section*.319}{}}
-\newlabel{commands/apidoc/src:src.logger.list_log_file}{{4.1.1}{47}{src.logger module}{section*.320}{}}
-\newlabel{commands/apidoc/src:src.logger.show_command_log}{{4.1.1}{47}{src.logger module}{section*.321}{}}
-\newlabel{commands/apidoc/src:src.logger.timedelta_total_seconds}{{4.1.1}{47}{src.logger module}{section*.322}{}}
-\newlabel{commands/apidoc/src:src.logger.update_hat_xml}{{4.1.1}{48}{src.logger module}{section*.323}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.options module}{48}{subsubsection*.324}}
-\newlabel{commands/apidoc/src:module-src.options}{{4.1.1}{48}{src.options module}{subsubsection*.324}{}}
-\newlabel{commands/apidoc/src:src-options-module}{{4.1.1}{48}{src.options module}{subsubsection*.324}{}}
-\newlabel{commands/apidoc/src:src.options.OptResult}{{4.1.1}{48}{src.options module}{section*.325}{}}
-\newlabel{commands/apidoc/src:src.options.Options}{{4.1.1}{48}{src.options module}{section*.326}{}}
-\newlabel{commands/apidoc/src:src.options.Options.add_option}{{4.1.1}{48}{src.options module}{section*.327}{}}
-\newlabel{commands/apidoc/src:src.options.Options.debug_write}{{4.1.1}{48}{src.options module}{section*.328}{}}
-\newlabel{commands/apidoc/src:src.options.Options.filterLevel}{{4.1.1}{48}{src.options module}{section*.329}{}}
-\newlabel{commands/apidoc/src:src.options.Options.filterList2}{{4.1.1}{48}{src.options module}{section*.330}{}}
-\newlabel{commands/apidoc/src:src.options.Options.getDetailOption}{{4.1.1}{48}{src.options module}{section*.331}{}}
-\newlabel{commands/apidoc/src:src.options.Options.get_help}{{4.1.1}{49}{src.options module}{section*.332}{}}
-\newlabel{commands/apidoc/src:src.options.Options.indent}{{4.1.1}{49}{src.options module}{section*.333}{}}
-\newlabel{commands/apidoc/src:src.options.Options.parse_args}{{4.1.1}{49}{src.options module}{section*.334}{}}
-\newlabel{commands/apidoc/src:src.options.Options.print_help}{{4.1.1}{49}{src.options module}{section*.335}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.printcolors module}{49}{subsubsection*.336}}
-\newlabel{commands/apidoc/src:module-src.printcolors}{{4.1.1}{49}{src.printcolors module}{subsubsection*.336}{}}
-\newlabel{commands/apidoc/src:src-printcolors-module}{{4.1.1}{49}{src.printcolors module}{subsubsection*.336}{}}
-\newlabel{commands/apidoc/src:src.printcolors.cleancolor}{{4.1.1}{49}{src.printcolors module}{section*.337}{}}
-\newlabel{commands/apidoc/src:src.printcolors.print_color_map}{{4.1.1}{49}{src.printcolors module}{section*.338}{}}
-\newlabel{commands/apidoc/src:src.printcolors.print_color_range}{{4.1.1}{49}{src.printcolors module}{section*.339}{}}
-\newlabel{commands/apidoc/src:src.printcolors.print_value}{{4.1.1}{49}{src.printcolors module}{section*.340}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printc}{{4.1.1}{49}{src.printcolors module}{section*.341}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcError}{{4.1.1}{50}{src.printcolors module}{section*.342}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcHeader}{{4.1.1}{50}{src.printcolors module}{section*.343}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcHighlight}{{4.1.1}{50}{src.printcolors module}{section*.344}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcInfo}{{4.1.1}{50}{src.printcolors module}{section*.345}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcLabel}{{4.1.1}{50}{src.printcolors module}{section*.346}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcSuccess}{{4.1.1}{50}{src.printcolors module}{section*.347}{}}
-\newlabel{commands/apidoc/src:src.printcolors.printcWarning}{{4.1.1}{50}{src.printcolors module}{section*.348}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.product module}{50}{subsubsection*.349}}
-\newlabel{commands/apidoc/src:module-src.product}{{4.1.1}{50}{src.product module}{subsubsection*.349}{}}
-\newlabel{commands/apidoc/src:src-product-module}{{4.1.1}{50}{src.product module}{subsubsection*.349}{}}
-\newlabel{commands/apidoc/src:src.product.check_config_exists}{{4.1.1}{50}{src.product module}{section*.350}{}}
-\newlabel{commands/apidoc/src:src.product.check_installation}{{4.1.1}{51}{src.product module}{section*.351}{}}
-\newlabel{commands/apidoc/src:src.product.check_source}{{4.1.1}{51}{src.product module}{section*.352}{}}
-\newlabel{commands/apidoc/src:src.product.get_base_install_dir}{{4.1.1}{51}{src.product module}{section*.353}{}}
-\newlabel{commands/apidoc/src:src.product.get_install_dir}{{4.1.1}{51}{src.product module}{section*.354}{}}
-\newlabel{commands/apidoc/src:src.product.get_product_components}{{4.1.1}{51}{src.product module}{section*.355}{}}
-\newlabel{commands/apidoc/src:src.product.get_product_config}{{4.1.1}{52}{src.product module}{section*.356}{}}
-\newlabel{commands/apidoc/src:src.product.get_product_dependencies}{{4.1.1}{52}{src.product module}{section*.357}{}}
-\newlabel{commands/apidoc/src:src.product.get_product_section}{{4.1.1}{52}{src.product module}{section*.358}{}}
-\newlabel{commands/apidoc/src:src.product.get_products_infos}{{4.1.1}{52}{src.product module}{section*.359}{}}
-\newlabel{commands/apidoc/src:src.product.product_compiles}{{4.1.1}{52}{src.product module}{section*.360}{}}
-\newlabel{commands/apidoc/src:src.product.product_has_env_script}{{4.1.1}{52}{src.product module}{section*.361}{}}
-\newlabel{commands/apidoc/src:src.product.product_has_logo}{{4.1.1}{53}{src.product module}{section*.362}{}}
-\newlabel{commands/apidoc/src:src.product.product_has_patches}{{4.1.1}{53}{src.product module}{section*.363}{}}
-\newlabel{commands/apidoc/src:src.product.product_has_salome_gui}{{4.1.1}{53}{src.product module}{section*.364}{}}
-\newlabel{commands/apidoc/src:src.product.product_has_script}{{4.1.1}{53}{src.product module}{section*.365}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_autotools}{{4.1.1}{53}{src.product module}{section*.366}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_cmake}{{4.1.1}{53}{src.product module}{section*.367}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_cpp}{{4.1.1}{53}{src.product module}{section*.368}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_debug}{{4.1.1}{53}{src.product module}{section*.369}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_dev}{{4.1.1}{54}{src.product module}{section*.370}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_fixed}{{4.1.1}{54}{src.product module}{section*.371}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_generated}{{4.1.1}{54}{src.product module}{section*.372}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_mpi}{{4.1.1}{54}{src.product module}{section*.373}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_native}{{4.1.1}{54}{src.product module}{section*.374}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_salome}{{4.1.1}{54}{src.product module}{section*.375}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_smesh_plugin}{{4.1.1}{54}{src.product module}{section*.376}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_vcs}{{4.1.1}{54}{src.product module}{section*.377}{}}
-\newlabel{commands/apidoc/src:src.product.product_is_verbose}{{4.1.1}{54}{src.product module}{section*.378}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.pyconf module}{55}{subsubsection*.379}}
-\newlabel{commands/apidoc/src:src-pyconf-module}{{4.1.1}{55}{src.pyconf module}{subsubsection*.379}{}}
-\newlabel{commands/apidoc/src:module-src.pyconf}{{4.1.1}{55}{src.pyconf module}{subsubsection*.379}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Config}{{4.1.1}{56}{src.pyconf module}{section*.380}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Config.Namespace}{{4.1.1}{56}{src.pyconf module}{section*.381}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Config.addNamespace}{{4.1.1}{56}{src.pyconf module}{section*.382}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Config.getByPath}{{4.1.1}{56}{src.pyconf module}{section*.383}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Config.load}{{4.1.1}{56}{src.pyconf module}{section*.384}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Config.removeNamespace}{{4.1.1}{56}{src.pyconf module}{section*.385}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigError}{{4.1.1}{56}{src.pyconf module}{section*.386}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigFormatError}{{4.1.1}{56}{src.pyconf module}{section*.387}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream}{{4.1.1}{56}{src.pyconf module}{section*.388}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream.close}{{4.1.1}{56}{src.pyconf module}{section*.389}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream.read}{{4.1.1}{56}{src.pyconf module}{section*.390}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream.readline}{{4.1.1}{56}{src.pyconf module}{section*.391}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigList}{{4.1.1}{56}{src.pyconf module}{section*.392}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigList.getByPath}{{4.1.1}{56}{src.pyconf module}{section*.393}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger}{{4.1.1}{57}{src.pyconf module}{section*.394}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.handleMismatch}{{4.1.1}{57}{src.pyconf module}{section*.395}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.merge}{{4.1.1}{57}{src.pyconf module}{section*.396}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.mergeMapping}{{4.1.1}{57}{src.pyconf module}{section*.397}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.mergeSequence}{{4.1.1}{57}{src.pyconf module}{section*.398}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.overwriteKeys}{{4.1.1}{57}{src.pyconf module}{section*.399}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream}{{4.1.1}{57}{src.pyconf module}{section*.400}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream.close}{{4.1.1}{57}{src.pyconf module}{section*.401}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream.flush}{{4.1.1}{57}{src.pyconf module}{section*.402}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream.write}{{4.1.1}{57}{src.pyconf module}{section*.403}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader}{{4.1.1}{57}{src.pyconf module}{section*.404}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.getChar}{{4.1.1}{57}{src.pyconf module}{section*.405}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.getToken}{{4.1.1}{57}{src.pyconf module}{section*.406}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.load}{{4.1.1}{58}{src.pyconf module}{section*.407}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.location}{{4.1.1}{58}{src.pyconf module}{section*.408}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.match}{{4.1.1}{58}{src.pyconf module}{section*.409}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseFactor}{{4.1.1}{58}{src.pyconf module}{section*.410}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseKeyValuePair}{{4.1.1}{58}{src.pyconf module}{section*.411}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseMapping}{{4.1.1}{58}{src.pyconf module}{section*.412}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseMappingBody}{{4.1.1}{58}{src.pyconf module}{section*.413}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseReference}{{4.1.1}{58}{src.pyconf module}{section*.414}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseScalar}{{4.1.1}{58}{src.pyconf module}{section*.415}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseSequence}{{4.1.1}{58}{src.pyconf module}{section*.416}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseSuffix}{{4.1.1}{59}{src.pyconf module}{section*.417}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseTerm}{{4.1.1}{59}{src.pyconf module}{section*.418}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseValue}{{4.1.1}{59}{src.pyconf module}{section*.419}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.setStream}{{4.1.1}{59}{src.pyconf module}{section*.420}{}}
-\newlabel{commands/apidoc/src:src.pyconf.ConfigResolutionError}{{4.1.1}{59}{src.pyconf module}{section*.421}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Container}{{4.1.1}{59}{src.pyconf module}{section*.422}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Container.evaluate}{{4.1.1}{59}{src.pyconf module}{section*.423}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Container.setPath}{{4.1.1}{59}{src.pyconf module}{section*.424}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Container.writeToStream}{{4.1.1}{59}{src.pyconf module}{section*.425}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Container.writeValue}{{4.1.1}{59}{src.pyconf module}{section*.426}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Expression}{{4.1.1}{59}{src.pyconf module}{section*.427}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Expression.evaluate}{{4.1.1}{60}{src.pyconf module}{section*.428}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping}{{4.1.1}{60}{src.pyconf module}{section*.429}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping.addMapping}{{4.1.1}{60}{src.pyconf module}{section*.430}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping.get}{{4.1.1}{60}{src.pyconf module}{section*.431}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping.iteritems}{{4.1.1}{60}{src.pyconf module}{section*.432}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping.iterkeys}{{4.1.1}{60}{src.pyconf module}{section*.433}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping.keys}{{4.1.1}{60}{src.pyconf module}{section*.434}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Mapping.writeToStream}{{4.1.1}{60}{src.pyconf module}{section*.435}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Reference}{{4.1.1}{60}{src.pyconf module}{section*.436}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Reference.addElement}{{4.1.1}{60}{src.pyconf module}{section*.437}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Reference.findConfig}{{4.1.1}{60}{src.pyconf module}{section*.438}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Reference.resolve}{{4.1.1}{60}{src.pyconf module}{section*.439}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Sequence}{{4.1.1}{60}{src.pyconf module}{section*.440}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Sequence.SeqIter}{{4.1.1}{61}{src.pyconf module}{section*.441}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Sequence.SeqIter.next}{{4.1.1}{61}{src.pyconf module}{section*.442}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Sequence.append}{{4.1.1}{61}{src.pyconf module}{section*.443}{}}
-\newlabel{commands/apidoc/src:src.pyconf.Sequence.writeToStream}{{4.1.1}{61}{src.pyconf module}{section*.444}{}}
-\newlabel{commands/apidoc/src:src.pyconf.deepCopyMapping}{{4.1.1}{61}{src.pyconf module}{section*.445}{}}
-\newlabel{commands/apidoc/src:src.pyconf.defaultMergeResolve}{{4.1.1}{61}{src.pyconf module}{section*.446}{}}
-\newlabel{commands/apidoc/src:src.pyconf.defaultStreamOpener}{{4.1.1}{61}{src.pyconf module}{section*.447}{}}
-\newlabel{commands/apidoc/src:src.pyconf.isWord}{{4.1.1}{61}{src.pyconf module}{section*.448}{}}
-\newlabel{commands/apidoc/src:src.pyconf.makePath}{{4.1.1}{61}{src.pyconf module}{section*.449}{}}
-\newlabel{commands/apidoc/src:src.pyconf.overwriteMergeResolve}{{4.1.1}{62}{src.pyconf module}{section*.450}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.system module}{62}{subsubsection*.451}}
-\newlabel{commands/apidoc/src:src-system-module}{{4.1.1}{62}{src.system module}{subsubsection*.451}{}}
-\newlabel{commands/apidoc/src:module-src.system}{{4.1.1}{62}{src.system module}{subsubsection*.451}{}}
-\newlabel{commands/apidoc/src:src.system.archive_extract}{{4.1.1}{62}{src.system module}{section*.452}{}}
-\newlabel{commands/apidoc/src:src.system.cvs_extract}{{4.1.1}{62}{src.system module}{section*.453}{}}
-\newlabel{commands/apidoc/src:src.system.git_extract}{{4.1.1}{62}{src.system module}{section*.454}{}}
-\newlabel{commands/apidoc/src:src.system.show_in_editor}{{4.1.1}{63}{src.system module}{section*.455}{}}
-\newlabel{commands/apidoc/src:src.system.svn_extract}{{4.1.1}{63}{src.system module}{section*.456}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.template module}{63}{subsubsection*.457}}
-\newlabel{commands/apidoc/src:module-src.template}{{4.1.1}{63}{src.template module}{subsubsection*.457}{}}
-\newlabel{commands/apidoc/src:src-template-module}{{4.1.1}{63}{src.template module}{subsubsection*.457}{}}
-\newlabel{commands/apidoc/src:src.template.MyTemplate}{{4.1.1}{63}{src.template module}{section*.458}{}}
-\newlabel{commands/apidoc/src:src.template.MyTemplate.delimiter}{{4.1.1}{63}{src.template module}{section*.459}{}}
-\newlabel{commands/apidoc/src:src.template.MyTemplate.pattern}{{4.1.1}{63}{src.template module}{section*.460}{}}
-\newlabel{commands/apidoc/src:src.template.substitute}{{4.1.1}{63}{src.template module}{section*.461}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.test\_module module}{63}{subsubsection*.462}}
-\newlabel{commands/apidoc/src:module-src.test_module}{{4.1.1}{63}{src.test\_module module}{subsubsection*.462}{}}
-\newlabel{commands/apidoc/src:src-test-module-module}{{4.1.1}{63}{src.test\_module module}{subsubsection*.462}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test}{{4.1.1}{63}{src.test\_module module}{section*.463}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.generate_launching_commands}{{4.1.1}{63}{src.test\_module module}{section*.464}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.generate_script}{{4.1.1}{63}{src.test\_module module}{section*.465}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.get_test_timeout}{{4.1.1}{63}{src.test\_module module}{section*.466}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.get_tmp_dir}{{4.1.1}{63}{src.test\_module module}{section*.467}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase}{{4.1.1}{63}{src.test\_module module}{section*.468}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase_from_dir}{{4.1.1}{64}{src.test\_module module}{section*.469}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase_from_git}{{4.1.1}{64}{src.test\_module module}{section*.470}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase_from_svn}{{4.1.1}{64}{src.test\_module module}{section*.471}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.read_results}{{4.1.1}{64}{src.test\_module module}{section*.472}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.run_all_tests}{{4.1.1}{64}{src.test\_module module}{section*.473}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.run_grid_tests}{{4.1.1}{64}{src.test\_module module}{section*.474}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.run_script}{{4.1.1}{64}{src.test\_module module}{section*.475}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.run_session_tests}{{4.1.1}{64}{src.test\_module module}{section*.476}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.run_testbase_tests}{{4.1.1}{64}{src.test\_module module}{section*.477}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.run_tests}{{4.1.1}{64}{src.test\_module module}{section*.478}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.search_known_errors}{{4.1.1}{64}{src.test\_module module}{section*.479}{}}
-\newlabel{commands/apidoc/src:src.test_module.Test.write_test_margin}{{4.1.1}{64}{src.test\_module module}{section*.480}{}}
-\newlabel{commands/apidoc/src:src.test_module.getTmpDirDEFAULT}{{4.1.1}{64}{src.test\_module module}{section*.481}{}}
-\@writefile{toc}{\contentsline {subsubsection}{src.xmlManager module}{64}{subsubsection*.482}}
-\newlabel{commands/apidoc/src:src-xmlmanager-module}{{4.1.1}{64}{src.xmlManager module}{subsubsection*.482}{}}
-\newlabel{commands/apidoc/src:module-src.xmlManager}{{4.1.1}{64}{src.xmlManager module}{subsubsection*.482}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile}{{4.1.1}{64}{src.xmlManager module}{section*.483}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile.getRootAttrib}{{4.1.1}{64}{src.xmlManager module}{section*.484}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile.get_attrib}{{4.1.1}{64}{src.xmlManager module}{section*.485}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile.get_node_text}{{4.1.1}{64}{src.xmlManager module}{section*.486}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile}{{4.1.1}{64}{src.xmlManager module}{section*.487}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.add_simple_node}{{4.1.1}{64}{src.xmlManager module}{section*.488}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.append_node_attrib}{{4.1.1}{65}{src.xmlManager module}{section*.489}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.append_node_text}{{4.1.1}{65}{src.xmlManager module}{section*.490}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.write_tree}{{4.1.1}{65}{src.xmlManager module}{section*.491}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.add_simple_node}{{4.1.1}{65}{src.xmlManager module}{section*.492}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.append_node_attrib}{{4.1.1}{65}{src.xmlManager module}{section*.493}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.find_node_by_attrib}{{4.1.1}{65}{src.xmlManager module}{section*.494}{}}
-\newlabel{commands/apidoc/src:src.xmlManager.write_report}{{4.1.1}{65}{src.xmlManager module}{section*.495}{}}
-\@writefile{toc}{\contentsline {subsubsection}{Module contents}{66}{subsubsection*.496}}
-\newlabel{commands/apidoc/src:module-src}{{4.1.1}{66}{Module contents}{subsubsection*.496}{}}
-\newlabel{commands/apidoc/src:module-contents}{{4.1.1}{66}{Module contents}{subsubsection*.496}{}}
-\newlabel{commands/apidoc/src:src.Path}{{4.1.1}{66}{Module contents}{section*.497}{}}
-\newlabel{commands/apidoc/src:src.Path.base}{{4.1.1}{66}{Module contents}{section*.498}{}}
-\newlabel{commands/apidoc/src:src.Path.chmod}{{4.1.1}{66}{Module contents}{section*.499}{}}
-\newlabel{commands/apidoc/src:src.Path.copy}{{4.1.1}{66}{Module contents}{section*.500}{}}
-\newlabel{commands/apidoc/src:src.Path.copydir}{{4.1.1}{66}{Module contents}{section*.501}{}}
-\newlabel{commands/apidoc/src:src.Path.copyfile}{{4.1.1}{66}{Module contents}{section*.502}{}}
-\newlabel{commands/apidoc/src:src.Path.copylink}{{4.1.1}{66}{Module contents}{section*.503}{}}
-\newlabel{commands/apidoc/src:src.Path.dir}{{4.1.1}{66}{Module contents}{section*.504}{}}
-\newlabel{commands/apidoc/src:src.Path.exists}{{4.1.1}{66}{Module contents}{section*.505}{}}
-\newlabel{commands/apidoc/src:src.Path.isdir}{{4.1.1}{66}{Module contents}{section*.506}{}}
-\newlabel{commands/apidoc/src:src.Path.isfile}{{4.1.1}{66}{Module contents}{section*.507}{}}
-\newlabel{commands/apidoc/src:src.Path.islink}{{4.1.1}{66}{Module contents}{section*.508}{}}
-\newlabel{commands/apidoc/src:src.Path.list}{{4.1.1}{66}{Module contents}{section*.509}{}}
-\newlabel{commands/apidoc/src:src.Path.make}{{4.1.1}{66}{Module contents}{section*.510}{}}
-\newlabel{commands/apidoc/src:src.Path.readlink}{{4.1.1}{66}{Module contents}{section*.511}{}}
-\newlabel{commands/apidoc/src:src.Path.rm}{{4.1.1}{66}{Module contents}{section*.512}{}}
-\newlabel{commands/apidoc/src:src.Path.smartcopy}{{4.1.1}{66}{Module contents}{section*.513}{}}
-\newlabel{commands/apidoc/src:src.Path.symlink}{{4.1.1}{66}{Module contents}{section*.514}{}}
-\newlabel{commands/apidoc/src:src.SatException}{{4.1.1}{66}{Module contents}{section*.515}{}}
-\newlabel{commands/apidoc/src:src.activate_mesa_property}{{4.1.1}{66}{Module contents}{section*.516}{}}
-\newlabel{commands/apidoc/src:src.check_config_has_application}{{4.1.1}{66}{Module contents}{section*.517}{}}
-\newlabel{commands/apidoc/src:src.check_config_has_profile}{{4.1.1}{66}{Module contents}{section*.518}{}}
-\newlabel{commands/apidoc/src:src.config_has_application}{{4.1.1}{66}{Module contents}{section*.519}{}}
-\newlabel{commands/apidoc/src:src.deepcopy_list}{{4.1.1}{66}{Module contents}{section*.520}{}}
-\newlabel{commands/apidoc/src:src.ensure_path_exists}{{4.1.1}{67}{Module contents}{section*.521}{}}
-\newlabel{commands/apidoc/src:src.find_file_in_lpath}{{4.1.1}{67}{Module contents}{section*.522}{}}
-\newlabel{commands/apidoc/src:src.get_base_path}{{4.1.1}{67}{Module contents}{section*.523}{}}
-\newlabel{commands/apidoc/src:src.get_cfg_param}{{4.1.1}{67}{Module contents}{section*.524}{}}
-\newlabel{commands/apidoc/src:src.get_launcher_name}{{4.1.1}{67}{Module contents}{section*.525}{}}
-\newlabel{commands/apidoc/src:src.get_log_path}{{4.1.1}{67}{Module contents}{section*.526}{}}
-\newlabel{commands/apidoc/src:src.get_property_in_product_cfg}{{4.1.1}{67}{Module contents}{section*.527}{}}
-\newlabel{commands/apidoc/src:src.get_salome_version}{{4.1.1}{67}{Module contents}{section*.528}{}}
-\newlabel{commands/apidoc/src:src.get_tmp_filename}{{4.1.1}{67}{Module contents}{section*.529}{}}
-\newlabel{commands/apidoc/src:src.handleRemoveReadonly}{{4.1.1}{68}{Module contents}{section*.530}{}}
-\newlabel{commands/apidoc/src:src.merge_dicts}{{4.1.1}{68}{Module contents}{section*.531}{}}
-\newlabel{commands/apidoc/src:src.only_numbers}{{4.1.1}{68}{Module contents}{section*.532}{}}
-\newlabel{commands/apidoc/src:src.parse_date}{{4.1.1}{68}{Module contents}{section*.533}{}}
-\newlabel{commands/apidoc/src:src.print_info}{{4.1.1}{68}{Module contents}{section*.534}{}}
-\newlabel{commands/apidoc/src:src.read_config_from_a_file}{{4.1.1}{68}{Module contents}{section*.535}{}}
-\newlabel{commands/apidoc/src:src.remove_item_from_list}{{4.1.1}{68}{Module contents}{section*.536}{}}
-\newlabel{commands/apidoc/src:src.replace_in_file}{{4.1.1}{68}{Module contents}{section*.537}{}}
-\@writefile{toc}{\contentsline {chapter}{\numberline {5}Release Notes}{69}{chapter.5}}
+\newlabel{commands/apidoc/src:src.debug.InStream}{{4.1.1}{36}{src.debug module}{section*.189}{}}
+\newlabel{commands/apidoc/src:src.debug.OutStream}{{4.1.1}{36}{src.debug module}{section*.190}{}}
+\newlabel{commands/apidoc/src:src.debug.OutStream.close}{{4.1.1}{36}{src.debug module}{section*.191}{}}
+\newlabel{commands/apidoc/src:src.debug.format_color_exception}{{4.1.1}{36}{src.debug module}{section*.192}{}}
+\newlabel{commands/apidoc/src:src.debug.format_exception}{{4.1.1}{36}{src.debug module}{section*.193}{}}
+\newlabel{commands/apidoc/src:src.debug.getLocalEnv}{{4.1.1}{36}{src.debug module}{section*.194}{}}
+\newlabel{commands/apidoc/src:src.debug.getStrConfigDbg}{{4.1.1}{36}{src.debug module}{section*.195}{}}
+\newlabel{commands/apidoc/src:src.debug.getStrConfigStd}{{4.1.1}{36}{src.debug module}{section*.196}{}}
+\newlabel{commands/apidoc/src:src.debug.indent}{{4.1.1}{36}{src.debug module}{section*.197}{}}
+\newlabel{commands/apidoc/src:src.debug.isTypeConfig}{{4.1.1}{36}{src.debug module}{section*.198}{}}
+\newlabel{commands/apidoc/src:src.debug.pop_debug}{{4.1.1}{36}{src.debug module}{section*.199}{}}
+\newlabel{commands/apidoc/src:src.debug.push_debug}{{4.1.1}{36}{src.debug module}{section*.200}{}}
+\newlabel{commands/apidoc/src:src.debug.saveConfigDbg}{{4.1.1}{36}{src.debug module}{section*.201}{}}
+\newlabel{commands/apidoc/src:src.debug.saveConfigStd}{{4.1.1}{36}{src.debug module}{section*.202}{}}
+\newlabel{commands/apidoc/src:src.debug.tofix}{{4.1.1}{36}{src.debug module}{section*.203}{}}
+\newlabel{commands/apidoc/src:src.debug.write}{{4.1.1}{36}{src.debug module}{section*.204}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.environment module}{36}{subsubsection*.205}}
+\newlabel{commands/apidoc/src:src-environment-module}{{4.1.1}{36}{src.environment module}{subsubsection*.205}{}}
+\newlabel{commands/apidoc/src:module-src.environment}{{4.1.1}{36}{src.environment module}{subsubsection*.205}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ}{{4.1.1}{36}{src.environment module}{section*.206}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.append}{{4.1.1}{36}{src.environment module}{section*.207}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.append_value}{{4.1.1}{37}{src.environment module}{section*.208}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.command_value}{{4.1.1}{37}{src.environment module}{section*.209}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.get}{{4.1.1}{37}{src.environment module}{section*.210}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.is_defined}{{4.1.1}{37}{src.environment module}{section*.211}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.prepend}{{4.1.1}{37}{src.environment module}{section*.212}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.prepend_value}{{4.1.1}{37}{src.environment module}{section*.213}{}}
+\newlabel{commands/apidoc/src:src.environment.Environ.set}{{4.1.1}{37}{src.environment module}{section*.214}{}}
+\newlabel{commands/apidoc/src:src.environment.FileEnvWriter}{{4.1.1}{37}{src.environment module}{section*.215}{}}
+\newlabel{commands/apidoc/src:src.environment.FileEnvWriter.write_cfgForPy_file}{{4.1.1}{37}{src.environment module}{section*.216}{}}
+\newlabel{commands/apidoc/src:src.environment.FileEnvWriter.write_env_file}{{4.1.1}{38}{src.environment module}{section*.217}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron}{{4.1.1}{38}{src.environment module}{section*.218}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.add_comment}{{4.1.1}{38}{src.environment module}{section*.219}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.add_line}{{4.1.1}{38}{src.environment module}{section*.220}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.add_warning}{{4.1.1}{38}{src.environment module}{section*.221}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.append}{{4.1.1}{38}{src.environment module}{section*.222}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.dump}{{4.1.1}{38}{src.environment module}{section*.223}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.finish}{{4.1.1}{38}{src.environment module}{section*.224}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.get}{{4.1.1}{38}{src.environment module}{section*.225}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.get_names}{{4.1.1}{38}{src.environment module}{section*.226}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.is_defined}{{4.1.1}{38}{src.environment module}{section*.227}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.load_cfg_environment}{{4.1.1}{39}{src.environment module}{section*.228}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.prepend}{{4.1.1}{39}{src.environment module}{section*.229}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.run_env_script}{{4.1.1}{39}{src.environment module}{section*.230}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.run_simple_env_script}{{4.1.1}{39}{src.environment module}{section*.231}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set}{{4.1.1}{39}{src.environment module}{section*.232}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_a_product}{{4.1.1}{39}{src.environment module}{section*.233}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_application_env}{{4.1.1}{39}{src.environment module}{section*.234}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_cpp_env}{{4.1.1}{39}{src.environment module}{section*.235}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_full_environ}{{4.1.1}{39}{src.environment module}{section*.236}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_products}{{4.1.1}{40}{src.environment module}{section*.237}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_python_libdirs}{{4.1.1}{40}{src.environment module}{section*.238}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_salome_generic_product_env}{{4.1.1}{40}{src.environment module}{section*.239}{}}
+\newlabel{commands/apidoc/src:src.environment.SalomeEnviron.set_salome_minimal_product_env}{{4.1.1}{40}{src.environment module}{section*.240}{}}
+\newlabel{commands/apidoc/src:src.environment.Shell}{{4.1.1}{40}{src.environment module}{section*.241}{}}
+\newlabel{commands/apidoc/src:src.environment.load_environment}{{4.1.1}{40}{src.environment module}{section*.242}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.fileEnviron module}{40}{subsubsection*.243}}
+\newlabel{commands/apidoc/src:src-fileenviron-module}{{4.1.1}{40}{src.fileEnviron module}{subsubsection*.243}{}}
+\newlabel{commands/apidoc/src:module-src.fileEnviron}{{4.1.1}{40}{src.fileEnviron module}{subsubsection*.243}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron}{{4.1.1}{40}{src.fileEnviron module}{section*.244}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron.command_value}{{4.1.1}{40}{src.fileEnviron module}{section*.245}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron.finish}{{4.1.1}{40}{src.fileEnviron module}{section*.246}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BashFileEnviron.set}{{4.1.1}{40}{src.fileEnviron module}{section*.247}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron}{{4.1.1}{41}{src.fileEnviron module}{section*.248}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.add_comment}{{4.1.1}{41}{src.fileEnviron module}{section*.249}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.command_value}{{4.1.1}{41}{src.fileEnviron module}{section*.250}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.finish}{{4.1.1}{41}{src.fileEnviron module}{section*.251}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.get}{{4.1.1}{41}{src.fileEnviron module}{section*.252}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.BatFileEnviron.set}{{4.1.1}{41}{src.fileEnviron module}{section*.253}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron}{{4.1.1}{41}{src.fileEnviron module}{section*.254}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.add_echo}{{4.1.1}{41}{src.fileEnviron module}{section*.255}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.add_warning}{{4.1.1}{41}{src.fileEnviron module}{section*.256}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.append_value}{{4.1.1}{41}{src.fileEnviron module}{section*.257}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.command_value}{{4.1.1}{41}{src.fileEnviron module}{section*.258}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.finish}{{4.1.1}{42}{src.fileEnviron module}{section*.259}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.get}{{4.1.1}{42}{src.fileEnviron module}{section*.260}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.prepend_value}{{4.1.1}{42}{src.fileEnviron module}{section*.261}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ContextFileEnviron.set}{{4.1.1}{42}{src.fileEnviron module}{section*.262}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron}{{4.1.1}{42}{src.fileEnviron module}{section*.263}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_comment}{{4.1.1}{42}{src.fileEnviron module}{section*.264}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_echo}{{4.1.1}{42}{src.fileEnviron module}{section*.265}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_line}{{4.1.1}{42}{src.fileEnviron module}{section*.266}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.add_warning}{{4.1.1}{42}{src.fileEnviron module}{section*.267}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.append}{{4.1.1}{42}{src.fileEnviron module}{section*.268}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.append_value}{{4.1.1}{42}{src.fileEnviron module}{section*.269}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.command_value}{{4.1.1}{43}{src.fileEnviron module}{section*.270}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.finish}{{4.1.1}{43}{src.fileEnviron module}{section*.271}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.get}{{4.1.1}{43}{src.fileEnviron module}{section*.272}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.is_defined}{{4.1.1}{43}{src.fileEnviron module}{section*.273}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.prepend}{{4.1.1}{43}{src.fileEnviron module}{section*.274}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.prepend_value}{{4.1.1}{43}{src.fileEnviron module}{section*.275}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.FileEnviron.set}{{4.1.1}{43}{src.fileEnviron module}{section*.276}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron}{{4.1.1}{43}{src.fileEnviron module}{section*.277}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add}{{4.1.1}{43}{src.fileEnviron module}{section*.278}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_comment}{{4.1.1}{44}{src.fileEnviron module}{section*.279}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_echo}{{4.1.1}{44}{src.fileEnviron module}{section*.280}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_line}{{4.1.1}{44}{src.fileEnviron module}{section*.281}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.add_warning}{{4.1.1}{44}{src.fileEnviron module}{section*.282}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.append}{{4.1.1}{44}{src.fileEnviron module}{section*.283}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.append_value}{{4.1.1}{44}{src.fileEnviron module}{section*.284}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.change_to_launcher}{{4.1.1}{44}{src.fileEnviron module}{section*.285}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.command_value}{{4.1.1}{44}{src.fileEnviron module}{section*.286}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.finish}{{4.1.1}{44}{src.fileEnviron module}{section*.287}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.get}{{4.1.1}{44}{src.fileEnviron module}{section*.288}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.is_defined}{{4.1.1}{44}{src.fileEnviron module}{section*.289}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.prepend}{{4.1.1}{44}{src.fileEnviron module}{section*.290}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.prepend_value}{{4.1.1}{45}{src.fileEnviron module}{section*.291}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.LauncherFileEnviron.set}{{4.1.1}{45}{src.fileEnviron module}{section*.292}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron}{{4.1.1}{45}{src.fileEnviron module}{section*.293}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_comment}{{4.1.1}{45}{src.fileEnviron module}{section*.294}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_echo}{{4.1.1}{45}{src.fileEnviron module}{section*.295}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_line}{{4.1.1}{45}{src.fileEnviron module}{section*.296}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.add_warning}{{4.1.1}{45}{src.fileEnviron module}{section*.297}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.append}{{4.1.1}{45}{src.fileEnviron module}{section*.298}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.command_value}{{4.1.1}{45}{src.fileEnviron module}{section*.299}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.get}{{4.1.1}{45}{src.fileEnviron module}{section*.300}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.is_defined}{{4.1.1}{45}{src.fileEnviron module}{section*.301}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.prepend}{{4.1.1}{46}{src.fileEnviron module}{section*.302}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.run_env_script}{{4.1.1}{46}{src.fileEnviron module}{section*.303}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.set}{{4.1.1}{46}{src.fileEnviron module}{section*.304}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.ScreenEnviron.write}{{4.1.1}{46}{src.fileEnviron module}{section*.305}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.get_file_environ}{{4.1.1}{46}{src.fileEnviron module}{section*.306}{}}
+\newlabel{commands/apidoc/src:src.fileEnviron.special_path_separator}{{4.1.1}{46}{src.fileEnviron module}{section*.307}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.fork module}{46}{subsubsection*.308}}
+\newlabel{commands/apidoc/src:module-src.fork}{{4.1.1}{46}{src.fork module}{subsubsection*.308}{}}
+\newlabel{commands/apidoc/src:src-fork-module}{{4.1.1}{46}{src.fork module}{subsubsection*.308}{}}
+\newlabel{commands/apidoc/src:src.fork.batch}{{4.1.1}{46}{src.fork module}{section*.309}{}}
+\newlabel{commands/apidoc/src:src.fork.batch_salome}{{4.1.1}{46}{src.fork module}{section*.310}{}}
+\newlabel{commands/apidoc/src:src.fork.launch_command}{{4.1.1}{46}{src.fork module}{section*.311}{}}
+\newlabel{commands/apidoc/src:src.fork.show_progress}{{4.1.1}{46}{src.fork module}{section*.312}{}}
+\newlabel{commands/apidoc/src:src.fork.write_back}{{4.1.1}{46}{src.fork module}{section*.313}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.logger module}{47}{subsubsection*.314}}
+\newlabel{commands/apidoc/src:module-src.logger}{{4.1.1}{47}{src.logger module}{subsubsection*.314}{}}
+\newlabel{commands/apidoc/src:src-logger-module}{{4.1.1}{47}{src.logger module}{subsubsection*.314}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger}{{4.1.1}{47}{src.logger module}{section*.315}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger.add_link}{{4.1.1}{47}{src.logger module}{section*.316}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger.end_write}{{4.1.1}{47}{src.logger module}{section*.317}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger.error}{{4.1.1}{47}{src.logger module}{section*.318}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger.flush}{{4.1.1}{47}{src.logger module}{section*.319}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger.put_initial_xml_fields}{{4.1.1}{47}{src.logger module}{section*.320}{}}
+\newlabel{commands/apidoc/src:src.logger.Logger.write}{{4.1.1}{47}{src.logger module}{section*.321}{}}
+\newlabel{commands/apidoc/src:src.logger.date_to_datetime}{{4.1.1}{47}{src.logger module}{section*.322}{}}
+\newlabel{commands/apidoc/src:src.logger.getCurrentLogger}{{4.1.1}{47}{src.logger module}{section*.323}{}}
+\newlabel{commands/apidoc/src:src.logger.getDefaultLogger}{{4.1.1}{47}{src.logger module}{section*.324}{}}
+\newlabel{commands/apidoc/src:src.logger.getUnittestLogger}{{4.1.1}{47}{src.logger module}{section*.325}{}}
+\newlabel{commands/apidoc/src:src.logger.isCurrentLoggerUnittest}{{4.1.1}{48}{src.logger module}{section*.326}{}}
+\newlabel{commands/apidoc/src:src.logger.list_log_file}{{4.1.1}{48}{src.logger module}{section*.327}{}}
+\newlabel{commands/apidoc/src:src.logger.sendMessageToCurrentLogger}{{4.1.1}{48}{src.logger module}{section*.328}{}}
+\newlabel{commands/apidoc/src:src.logger.setCurrentLogger}{{4.1.1}{48}{src.logger module}{section*.329}{}}
+\newlabel{commands/apidoc/src:src.logger.show_command_log}{{4.1.1}{48}{src.logger module}{section*.330}{}}
+\newlabel{commands/apidoc/src:src.logger.timedelta_total_seconds}{{4.1.1}{48}{src.logger module}{section*.331}{}}
+\newlabel{commands/apidoc/src:src.logger.update_hat_xml}{{4.1.1}{48}{src.logger module}{section*.332}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.options module}{48}{subsubsection*.333}}
+\newlabel{commands/apidoc/src:module-src.options}{{4.1.1}{48}{src.options module}{subsubsection*.333}{}}
+\newlabel{commands/apidoc/src:src-options-module}{{4.1.1}{48}{src.options module}{subsubsection*.333}{}}
+\newlabel{commands/apidoc/src:src.options.OptResult}{{4.1.1}{48}{src.options module}{section*.334}{}}
+\newlabel{commands/apidoc/src:src.options.Options}{{4.1.1}{49}{src.options module}{section*.335}{}}
+\newlabel{commands/apidoc/src:src.options.Options.add_option}{{4.1.1}{49}{src.options module}{section*.336}{}}
+\newlabel{commands/apidoc/src:src.options.Options.debug_write}{{4.1.1}{49}{src.options module}{section*.337}{}}
+\newlabel{commands/apidoc/src:src.options.Options.filterLevel}{{4.1.1}{49}{src.options module}{section*.338}{}}
+\newlabel{commands/apidoc/src:src.options.Options.filterList2}{{4.1.1}{49}{src.options module}{section*.339}{}}
+\newlabel{commands/apidoc/src:src.options.Options.getDetailOption}{{4.1.1}{49}{src.options module}{section*.340}{}}
+\newlabel{commands/apidoc/src:src.options.Options.get_help}{{4.1.1}{49}{src.options module}{section*.341}{}}
+\newlabel{commands/apidoc/src:src.options.Options.indent}{{4.1.1}{49}{src.options module}{section*.342}{}}
+\newlabel{commands/apidoc/src:src.options.Options.parse_args}{{4.1.1}{49}{src.options module}{section*.343}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.printcolors module}{49}{subsubsection*.344}}
+\newlabel{commands/apidoc/src:module-src.printcolors}{{4.1.1}{49}{src.printcolors module}{subsubsection*.344}{}}
+\newlabel{commands/apidoc/src:src-printcolors-module}{{4.1.1}{49}{src.printcolors module}{subsubsection*.344}{}}
+\newlabel{commands/apidoc/src:src.printcolors.cleancolor}{{4.1.1}{49}{src.printcolors module}{section*.345}{}}
+\newlabel{commands/apidoc/src:src.printcolors.print_color_map}{{4.1.1}{49}{src.printcolors module}{section*.346}{}}
+\newlabel{commands/apidoc/src:src.printcolors.print_color_range}{{4.1.1}{50}{src.printcolors module}{section*.347}{}}
+\newlabel{commands/apidoc/src:src.printcolors.print_value}{{4.1.1}{50}{src.printcolors module}{section*.348}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printc}{{4.1.1}{50}{src.printcolors module}{section*.349}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcError}{{4.1.1}{50}{src.printcolors module}{section*.350}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcHeader}{{4.1.1}{50}{src.printcolors module}{section*.351}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcHighlight}{{4.1.1}{50}{src.printcolors module}{section*.352}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcInfo}{{4.1.1}{50}{src.printcolors module}{section*.353}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcLabel}{{4.1.1}{51}{src.printcolors module}{section*.354}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcSuccess}{{4.1.1}{51}{src.printcolors module}{section*.355}{}}
+\newlabel{commands/apidoc/src:src.printcolors.printcWarning}{{4.1.1}{51}{src.printcolors module}{section*.356}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.product module}{51}{subsubsection*.357}}
+\newlabel{commands/apidoc/src:module-src.product}{{4.1.1}{51}{src.product module}{subsubsection*.357}{}}
+\newlabel{commands/apidoc/src:src-product-module}{{4.1.1}{51}{src.product module}{subsubsection*.357}{}}
+\newlabel{commands/apidoc/src:src.product.check_config_exists}{{4.1.1}{51}{src.product module}{section*.358}{}}
+\newlabel{commands/apidoc/src:src.product.check_installation}{{4.1.1}{51}{src.product module}{section*.359}{}}
+\newlabel{commands/apidoc/src:src.product.check_source}{{4.1.1}{51}{src.product module}{section*.360}{}}
+\newlabel{commands/apidoc/src:src.product.get_base_install_dir}{{4.1.1}{51}{src.product module}{section*.361}{}}
+\newlabel{commands/apidoc/src:src.product.get_install_dir}{{4.1.1}{52}{src.product module}{section*.362}{}}
+\newlabel{commands/apidoc/src:src.product.get_product_components}{{4.1.1}{52}{src.product module}{section*.363}{}}
+\newlabel{commands/apidoc/src:src.product.get_product_config}{{4.1.1}{52}{src.product module}{section*.364}{}}
+\newlabel{commands/apidoc/src:src.product.get_product_dependencies}{{4.1.1}{52}{src.product module}{section*.365}{}}
+\newlabel{commands/apidoc/src:src.product.get_product_section}{{4.1.1}{52}{src.product module}{section*.366}{}}
+\newlabel{commands/apidoc/src:src.product.get_products_infos}{{4.1.1}{53}{src.product module}{section*.367}{}}
+\newlabel{commands/apidoc/src:src.product.product_compiles}{{4.1.1}{53}{src.product module}{section*.368}{}}
+\newlabel{commands/apidoc/src:src.product.product_has_env_script}{{4.1.1}{53}{src.product module}{section*.369}{}}
+\newlabel{commands/apidoc/src:src.product.product_has_logo}{{4.1.1}{53}{src.product module}{section*.370}{}}
+\newlabel{commands/apidoc/src:src.product.product_has_patches}{{4.1.1}{53}{src.product module}{section*.371}{}}
+\newlabel{commands/apidoc/src:src.product.product_has_salome_gui}{{4.1.1}{53}{src.product module}{section*.372}{}}
+\newlabel{commands/apidoc/src:src.product.product_has_script}{{4.1.1}{53}{src.product module}{section*.373}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_autotools}{{4.1.1}{53}{src.product module}{section*.374}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_cmake}{{4.1.1}{54}{src.product module}{section*.375}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_cpp}{{4.1.1}{54}{src.product module}{section*.376}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_debug}{{4.1.1}{54}{src.product module}{section*.377}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_dev}{{4.1.1}{54}{src.product module}{section*.378}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_fixed}{{4.1.1}{54}{src.product module}{section*.379}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_generated}{{4.1.1}{54}{src.product module}{section*.380}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_mpi}{{4.1.1}{54}{src.product module}{section*.381}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_native}{{4.1.1}{54}{src.product module}{section*.382}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_salome}{{4.1.1}{55}{src.product module}{section*.383}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_smesh_plugin}{{4.1.1}{55}{src.product module}{section*.384}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_vcs}{{4.1.1}{55}{src.product module}{section*.385}{}}
+\newlabel{commands/apidoc/src:src.product.product_is_verbose}{{4.1.1}{55}{src.product module}{section*.386}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.pyconf module}{55}{subsubsection*.387}}
+\newlabel{commands/apidoc/src:src-pyconf-module}{{4.1.1}{55}{src.pyconf module}{subsubsection*.387}{}}
+\newlabel{commands/apidoc/src:module-src.pyconf}{{4.1.1}{55}{src.pyconf module}{subsubsection*.387}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Config}{{4.1.1}{56}{src.pyconf module}{section*.388}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Config.Namespace}{{4.1.1}{56}{src.pyconf module}{section*.389}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Config.addNamespace}{{4.1.1}{56}{src.pyconf module}{section*.390}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Config.getByPath}{{4.1.1}{56}{src.pyconf module}{section*.391}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Config.load}{{4.1.1}{56}{src.pyconf module}{section*.392}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Config.removeNamespace}{{4.1.1}{57}{src.pyconf module}{section*.393}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigError}{{4.1.1}{57}{src.pyconf module}{section*.394}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigFormatError}{{4.1.1}{57}{src.pyconf module}{section*.395}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream}{{4.1.1}{57}{src.pyconf module}{section*.396}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream.close}{{4.1.1}{57}{src.pyconf module}{section*.397}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream.read}{{4.1.1}{57}{src.pyconf module}{section*.398}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigInputStream.readline}{{4.1.1}{57}{src.pyconf module}{section*.399}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigList}{{4.1.1}{57}{src.pyconf module}{section*.400}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigList.getByPath}{{4.1.1}{57}{src.pyconf module}{section*.401}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger}{{4.1.1}{57}{src.pyconf module}{section*.402}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.handleMismatch}{{4.1.1}{57}{src.pyconf module}{section*.403}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.merge}{{4.1.1}{57}{src.pyconf module}{section*.404}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.mergeMapping}{{4.1.1}{57}{src.pyconf module}{section*.405}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.mergeSequence}{{4.1.1}{58}{src.pyconf module}{section*.406}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigMerger.overwriteKeys}{{4.1.1}{58}{src.pyconf module}{section*.407}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream}{{4.1.1}{58}{src.pyconf module}{section*.408}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream.close}{{4.1.1}{58}{src.pyconf module}{section*.409}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream.flush}{{4.1.1}{58}{src.pyconf module}{section*.410}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigOutputStream.write}{{4.1.1}{58}{src.pyconf module}{section*.411}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader}{{4.1.1}{58}{src.pyconf module}{section*.412}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.getChar}{{4.1.1}{58}{src.pyconf module}{section*.413}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.getToken}{{4.1.1}{58}{src.pyconf module}{section*.414}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.load}{{4.1.1}{58}{src.pyconf module}{section*.415}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.location}{{4.1.1}{58}{src.pyconf module}{section*.416}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.match}{{4.1.1}{58}{src.pyconf module}{section*.417}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseFactor}{{4.1.1}{58}{src.pyconf module}{section*.418}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseKeyValuePair}{{4.1.1}{59}{src.pyconf module}{section*.419}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseMapping}{{4.1.1}{59}{src.pyconf module}{section*.420}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseMappingBody}{{4.1.1}{59}{src.pyconf module}{section*.421}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseReference}{{4.1.1}{59}{src.pyconf module}{section*.422}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseScalar}{{4.1.1}{59}{src.pyconf module}{section*.423}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseSequence}{{4.1.1}{59}{src.pyconf module}{section*.424}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseSuffix}{{4.1.1}{59}{src.pyconf module}{section*.425}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseTerm}{{4.1.1}{59}{src.pyconf module}{section*.426}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.parseValue}{{4.1.1}{59}{src.pyconf module}{section*.427}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigReader.setStream}{{4.1.1}{59}{src.pyconf module}{section*.428}{}}
+\newlabel{commands/apidoc/src:src.pyconf.ConfigResolutionError}{{4.1.1}{59}{src.pyconf module}{section*.429}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Container}{{4.1.1}{59}{src.pyconf module}{section*.430}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Container.evaluate}{{4.1.1}{60}{src.pyconf module}{section*.431}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Container.setPath}{{4.1.1}{60}{src.pyconf module}{section*.432}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Container.writeToStream}{{4.1.1}{60}{src.pyconf module}{section*.433}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Container.writeValue}{{4.1.1}{60}{src.pyconf module}{section*.434}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Expression}{{4.1.1}{60}{src.pyconf module}{section*.435}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Expression.evaluate}{{4.1.1}{60}{src.pyconf module}{section*.436}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping}{{4.1.1}{60}{src.pyconf module}{section*.437}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping.addMapping}{{4.1.1}{60}{src.pyconf module}{section*.438}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping.get}{{4.1.1}{60}{src.pyconf module}{section*.439}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping.iteritems}{{4.1.1}{60}{src.pyconf module}{section*.440}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping.iterkeys}{{4.1.1}{60}{src.pyconf module}{section*.441}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping.keys}{{4.1.1}{60}{src.pyconf module}{section*.442}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Mapping.writeToStream}{{4.1.1}{61}{src.pyconf module}{section*.443}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Reference}{{4.1.1}{61}{src.pyconf module}{section*.444}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Reference.addElement}{{4.1.1}{61}{src.pyconf module}{section*.445}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Reference.findConfig}{{4.1.1}{61}{src.pyconf module}{section*.446}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Reference.resolve}{{4.1.1}{61}{src.pyconf module}{section*.447}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Sequence}{{4.1.1}{61}{src.pyconf module}{section*.448}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Sequence.SeqIter}{{4.1.1}{61}{src.pyconf module}{section*.449}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Sequence.SeqIter.next}{{4.1.1}{61}{src.pyconf module}{section*.450}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Sequence.append}{{4.1.1}{61}{src.pyconf module}{section*.451}{}}
+\newlabel{commands/apidoc/src:src.pyconf.Sequence.writeToStream}{{4.1.1}{61}{src.pyconf module}{section*.452}{}}
+\newlabel{commands/apidoc/src:src.pyconf.deepCopyMapping}{{4.1.1}{61}{src.pyconf module}{section*.453}{}}
+\newlabel{commands/apidoc/src:src.pyconf.defaultMergeResolve}{{4.1.1}{61}{src.pyconf module}{section*.454}{}}
+\newlabel{commands/apidoc/src:src.pyconf.defaultStreamOpener}{{4.1.1}{62}{src.pyconf module}{section*.455}{}}
+\newlabel{commands/apidoc/src:src.pyconf.isWord}{{4.1.1}{62}{src.pyconf module}{section*.456}{}}
+\newlabel{commands/apidoc/src:src.pyconf.makePath}{{4.1.1}{62}{src.pyconf module}{section*.457}{}}
+\newlabel{commands/apidoc/src:src.pyconf.overwriteMergeResolve}{{4.1.1}{62}{src.pyconf module}{section*.458}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.system module}{62}{subsubsection*.459}}
+\newlabel{commands/apidoc/src:src-system-module}{{4.1.1}{62}{src.system module}{subsubsection*.459}{}}
+\newlabel{commands/apidoc/src:module-src.system}{{4.1.1}{62}{src.system module}{subsubsection*.459}{}}
+\newlabel{commands/apidoc/src:src.system.archive_extract}{{4.1.1}{62}{src.system module}{section*.460}{}}
+\newlabel{commands/apidoc/src:src.system.cvs_extract}{{4.1.1}{62}{src.system module}{section*.461}{}}
+\newlabel{commands/apidoc/src:src.system.git_extract}{{4.1.1}{63}{src.system module}{section*.462}{}}
+\newlabel{commands/apidoc/src:src.system.show_in_editor}{{4.1.1}{63}{src.system module}{section*.463}{}}
+\newlabel{commands/apidoc/src:src.system.svn_extract}{{4.1.1}{63}{src.system module}{section*.464}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.template module}{64}{subsubsection*.465}}
+\newlabel{commands/apidoc/src:module-src.template}{{4.1.1}{64}{src.template module}{subsubsection*.465}{}}
+\newlabel{commands/apidoc/src:src-template-module}{{4.1.1}{64}{src.template module}{subsubsection*.465}{}}
+\newlabel{commands/apidoc/src:src.template.MyTemplate}{{4.1.1}{64}{src.template module}{section*.466}{}}
+\newlabel{commands/apidoc/src:src.template.MyTemplate.delimiter}{{4.1.1}{64}{src.template module}{section*.467}{}}
+\newlabel{commands/apidoc/src:src.template.MyTemplate.pattern}{{4.1.1}{64}{src.template module}{section*.468}{}}
+\newlabel{commands/apidoc/src:src.template.substitute}{{4.1.1}{64}{src.template module}{section*.469}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.test\_module module}{64}{subsubsection*.470}}
+\newlabel{commands/apidoc/src:module-src.test_module}{{4.1.1}{64}{src.test\_module module}{subsubsection*.470}{}}
+\newlabel{commands/apidoc/src:src-test-module-module}{{4.1.1}{64}{src.test\_module module}{subsubsection*.470}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test}{{4.1.1}{64}{src.test\_module module}{section*.471}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.generate_launching_commands}{{4.1.1}{64}{src.test\_module module}{section*.472}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.generate_script}{{4.1.1}{64}{src.test\_module module}{section*.473}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.get_test_timeout}{{4.1.1}{64}{src.test\_module module}{section*.474}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.get_tmp_dir}{{4.1.1}{64}{src.test\_module module}{section*.475}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase}{{4.1.1}{64}{src.test\_module module}{section*.476}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase_from_dir}{{4.1.1}{64}{src.test\_module module}{section*.477}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase_from_git}{{4.1.1}{64}{src.test\_module module}{section*.478}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.prepare_testbase_from_svn}{{4.1.1}{64}{src.test\_module module}{section*.479}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.read_results}{{4.1.1}{64}{src.test\_module module}{section*.480}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.run_all_tests}{{4.1.1}{64}{src.test\_module module}{section*.481}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.run_grid_tests}{{4.1.1}{64}{src.test\_module module}{section*.482}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.run_script}{{4.1.1}{64}{src.test\_module module}{section*.483}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.run_session_tests}{{4.1.1}{64}{src.test\_module module}{section*.484}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.run_testbase_tests}{{4.1.1}{64}{src.test\_module module}{section*.485}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.run_tests}{{4.1.1}{64}{src.test\_module module}{section*.486}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.search_known_errors}{{4.1.1}{64}{src.test\_module module}{section*.487}{}}
+\newlabel{commands/apidoc/src:src.test_module.Test.write_test_margin}{{4.1.1}{64}{src.test\_module module}{section*.488}{}}
+\newlabel{commands/apidoc/src:src.test_module.getTmpDirDEFAULT}{{4.1.1}{64}{src.test\_module module}{section*.489}{}}
+\@writefile{toc}{\contentsline {subsubsection}{src.xmlManager module}{64}{subsubsection*.490}}
+\newlabel{commands/apidoc/src:src-xmlmanager-module}{{4.1.1}{64}{src.xmlManager module}{subsubsection*.490}{}}
+\newlabel{commands/apidoc/src:module-src.xmlManager}{{4.1.1}{64}{src.xmlManager module}{subsubsection*.490}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile}{{4.1.1}{64}{src.xmlManager module}{section*.491}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile.getRootAttrib}{{4.1.1}{64}{src.xmlManager module}{section*.492}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile.get_attrib}{{4.1.1}{65}{src.xmlManager module}{section*.493}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.ReadXmlFile.get_node_text}{{4.1.1}{65}{src.xmlManager module}{section*.494}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile}{{4.1.1}{65}{src.xmlManager module}{section*.495}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.add_simple_node}{{4.1.1}{65}{src.xmlManager module}{section*.496}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.append_node_attrib}{{4.1.1}{65}{src.xmlManager module}{section*.497}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.append_node_text}{{4.1.1}{65}{src.xmlManager module}{section*.498}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.XmlLogFile.write_tree}{{4.1.1}{65}{src.xmlManager module}{section*.499}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.add_simple_node}{{4.1.1}{65}{src.xmlManager module}{section*.500}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.append_node_attrib}{{4.1.1}{66}{src.xmlManager module}{section*.501}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.find_node_by_attrib}{{4.1.1}{66}{src.xmlManager module}{section*.502}{}}
+\newlabel{commands/apidoc/src:src.xmlManager.write_report}{{4.1.1}{66}{src.xmlManager module}{section*.503}{}}
+\@writefile{toc}{\contentsline {subsubsection}{Module contents}{66}{subsubsection*.504}}
+\newlabel{commands/apidoc/src:module-src}{{4.1.1}{66}{Module contents}{subsubsection*.504}{}}
+\newlabel{commands/apidoc/src:module-contents}{{4.1.1}{66}{Module contents}{subsubsection*.504}{}}
+\newlabel{commands/apidoc/src:src.Path}{{4.1.1}{66}{Module contents}{section*.505}{}}
+\newlabel{commands/apidoc/src:src.Path.base}{{4.1.1}{66}{Module contents}{section*.506}{}}
+\newlabel{commands/apidoc/src:src.Path.chmod}{{4.1.1}{66}{Module contents}{section*.507}{}}
+\newlabel{commands/apidoc/src:src.Path.copy}{{4.1.1}{66}{Module contents}{section*.508}{}}
+\newlabel{commands/apidoc/src:src.Path.copydir}{{4.1.1}{66}{Module contents}{section*.509}{}}
+\newlabel{commands/apidoc/src:src.Path.copyfile}{{4.1.1}{66}{Module contents}{section*.510}{}}
+\newlabel{commands/apidoc/src:src.Path.copylink}{{4.1.1}{66}{Module contents}{section*.511}{}}
+\newlabel{commands/apidoc/src:src.Path.dir}{{4.1.1}{66}{Module contents}{section*.512}{}}
+\newlabel{commands/apidoc/src:src.Path.exists}{{4.1.1}{66}{Module contents}{section*.513}{}}
+\newlabel{commands/apidoc/src:src.Path.isdir}{{4.1.1}{66}{Module contents}{section*.514}{}}
+\newlabel{commands/apidoc/src:src.Path.isfile}{{4.1.1}{66}{Module contents}{section*.515}{}}
+\newlabel{commands/apidoc/src:src.Path.islink}{{4.1.1}{66}{Module contents}{section*.516}{}}
+\newlabel{commands/apidoc/src:src.Path.list}{{4.1.1}{66}{Module contents}{section*.517}{}}
+\newlabel{commands/apidoc/src:src.Path.make}{{4.1.1}{67}{Module contents}{section*.518}{}}
+\newlabel{commands/apidoc/src:src.Path.readlink}{{4.1.1}{67}{Module contents}{section*.519}{}}
+\newlabel{commands/apidoc/src:src.Path.rm}{{4.1.1}{67}{Module contents}{section*.520}{}}
+\newlabel{commands/apidoc/src:src.Path.smartcopy}{{4.1.1}{67}{Module contents}{section*.521}{}}
+\newlabel{commands/apidoc/src:src.Path.symlink}{{4.1.1}{67}{Module contents}{section*.522}{}}
+\newlabel{commands/apidoc/src:src.SatException}{{4.1.1}{67}{Module contents}{section*.523}{}}
+\newlabel{commands/apidoc/src:src.activate_mesa_property}{{4.1.1}{67}{Module contents}{section*.524}{}}
+\newlabel{commands/apidoc/src:src.check_config_has_application}{{4.1.1}{67}{Module contents}{section*.525}{}}
+\newlabel{commands/apidoc/src:src.check_config_has_profile}{{4.1.1}{67}{Module contents}{section*.526}{}}
+\newlabel{commands/apidoc/src:src.config_has_application}{{4.1.1}{67}{Module contents}{section*.527}{}}
+\newlabel{commands/apidoc/src:src.deepcopy_list}{{4.1.1}{67}{Module contents}{section*.528}{}}
+\newlabel{commands/apidoc/src:src.ensure_path_exists}{{4.1.1}{67}{Module contents}{section*.529}{}}
+\newlabel{commands/apidoc/src:src.find_file_in_lpath}{{4.1.1}{67}{Module contents}{section*.530}{}}
+\newlabel{commands/apidoc/src:src.get_base_path}{{4.1.1}{67}{Module contents}{section*.531}{}}
+\newlabel{commands/apidoc/src:src.get_cfg_param}{{4.1.1}{67}{Module contents}{section*.532}{}}
+\newlabel{commands/apidoc/src:src.get_launcher_name}{{4.1.1}{68}{Module contents}{section*.533}{}}
+\newlabel{commands/apidoc/src:src.get_log_path}{{4.1.1}{68}{Module contents}{section*.534}{}}
+\newlabel{commands/apidoc/src:src.get_property_in_product_cfg}{{4.1.1}{68}{Module contents}{section*.535}{}}
+\newlabel{commands/apidoc/src:src.get_salome_version}{{4.1.1}{68}{Module contents}{section*.536}{}}
+\newlabel{commands/apidoc/src:src.get_tmp_filename}{{4.1.1}{68}{Module contents}{section*.537}{}}
+\newlabel{commands/apidoc/src:src.handleRemoveReadonly}{{4.1.1}{68}{Module contents}{section*.538}{}}
+\newlabel{commands/apidoc/src:src.merge_dicts}{{4.1.1}{68}{Module contents}{section*.539}{}}
+\newlabel{commands/apidoc/src:src.only_numbers}{{4.1.1}{68}{Module contents}{section*.540}{}}
+\newlabel{commands/apidoc/src:src.parse_date}{{4.1.1}{68}{Module contents}{section*.541}{}}
+\newlabel{commands/apidoc/src:src.print_info}{{4.1.1}{68}{Module contents}{section*.542}{}}
+\newlabel{commands/apidoc/src:src.read_config_from_a_file}{{4.1.1}{68}{Module contents}{section*.543}{}}
+\newlabel{commands/apidoc/src:src.remove_item_from_list}{{4.1.1}{68}{Module contents}{section*.544}{}}
+\newlabel{commands/apidoc/src:src.replace_in_file}{{4.1.1}{69}{Module contents}{section*.545}{}}
+\@writefile{toc}{\contentsline {chapter}{\numberline {5}Release Notes}{71}{chapter.5}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
-\newlabel{index:release-notes}{{5}{69}{Release Notes}{chapter.5}{}}
-\@writefile{toc}{\contentsline {section}{\numberline {5.1}Release notes}{69}{section.5.1}}
-\newlabel{release_notes/release_notes_5.0.0:release-notes}{{5.1}{69}{Release notes}{section.5.1}{}}
-\newlabel{release_notes/release_notes_5.0.0::doc}{{5.1}{69}{Release notes}{section.5.1}{}}
-\@writefile{toc}{\contentsline {chapter}{Python Module Index}{71}{section*.538}}
-\@writefile{toc}{\contentsline {chapter}{Index}{73}{section*.539}}
+\newlabel{index:release-notes}{{5}{71}{Release Notes}{chapter.5}{}}
+\@writefile{toc}{\contentsline {section}{\numberline {5.1}Release notes}{71}{section.5.1}}
+\newlabel{release_notes/release_notes_5.0.0:release-notes}{{5.1}{71}{Release notes}{section.5.1}{}}
+\newlabel{release_notes/release_notes_5.0.0::doc}{{5.1}{71}{Release notes}{section.5.1}{}}
+\@writefile{toc}{\contentsline {chapter}{Python Module Index}{73}{section*.546}}
+\@writefile{toc}{\contentsline {chapter}{Index}{75}{section*.547}}
# Fdb version 3
-["makeindex salomeTools.idx"] 1529399663 "salomeTools.idx" "salomeTools.ind" "salomeTools" 1529399664
- "salomeTools.idx" 1529399664 37104 8cdae70614af35a45ec651ac7636acdf ""
+["makeindex salomeTools.idx"] 1530021069 "salomeTools.idx" "salomeTools.ind" "salomeTools" 1530021070
+ "salomeTools.idx" 1530021070 37675 5221875c9eca3cdb945ec6de9d886fdc ""
(generated)
"salomeTools.ind"
"salomeTools.ilg"
-["pdflatex"] 1529399663 "salomeTools.tex" "salomeTools.pdf" "salomeTools" 1529399664
+["pdflatex"] 1530021069 "salomeTools.tex" "salomeTools.pdf" "salomeTools" 1530021070
"/data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts/enc/dvips/base/8r.enc" 1480098666 4850 80dc9bab7f31fb78a000ccfed0e27cab ""
"/data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts/map/fontname/texfonts.map" 1511824771 3332 103109f5612ad95229751940c61aada0 ""
"/data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts/tfm/adobe/courier/pcrb8c.tfm" 1480098688 1268 8067e4f35cbae42c0f58b48da75bf496 ""
"/data/tmplgls/wambeke/share/texlive/2017/texmf-var/fonts/map/pdftex/updmap/pdftex.map" 1523607852 2700841 1bc9624fdc91e264bac08ef05942a34b ""
"/data/tmplgls/wambeke/share/texlive/2017/texmf-var/web2c/pdftex/pdflatex.fmt" 1523607929 4139413 5fd665779d626eb6c28594ed7061af12 ""
"/data/tmplgls/wambeke/share/texlive/2017/texmf.cnf" 1523607755 455 5b996dcaa0eb4ef14a83b026bc0a008c ""
- "fncychap.sty" 1529391879 18775 568efa3fda85869a241e0645298bc277 ""
- "footnotehyper-sphinx.sty" 1529391879 8886 0562fcad2b7e25f93331edc6fc422c87 ""
- "salomeTools.aux" 1529399664 85410 654dbf7899c0e0925cdcb2a9b9cb605c ""
- "salomeTools.ind" 1529399663 36333 3ec0eb65d8a4f28041fe8604ea800ae5 "makeindex salomeTools.idx"
- "salomeTools.out" 1529399664 3075 c17a5699956f0a7fe0d4242598ffb5fe ""
- "salomeTools.tex" 1529399660 340746 929605c29e2adbb99b99a777732584f9 ""
- "salomeTools.toc" 1529399664 8577 0838da642cd6f892734f1aa0cf8141cf ""
- "sat_about.png" 1529391879 282130 625d3edc0de2910af30fe6407ab411b3 ""
- "sphinx.sty" 1529391879 67712 9b578972569f0169bf44cfae88da82f2 ""
- "sphinxhighlight.sty" 1529399659 8137 b8d4ef963833564f6e4eadc09cd757c4 ""
- "sphinxmanual.cls" 1529391879 3589 0b0aac49c6f36925cf5f9d524a75a978 ""
- "sphinxmulticell.sty" 1529391879 14618 0defbdc8536ad2e67f1eac6a1431bc55 ""
- "tabulary.sty" 1529391879 13836 e4c420176570c694fb8cb70f63c46263 ""
+ "fncychap.sty" 1529937511 18775 568efa3fda85869a241e0645298bc277 ""
+ "footnotehyper-sphinx.sty" 1529937511 8886 0562fcad2b7e25f93331edc6fc422c87 ""
+ "salomeTools.aux" 1530021070 86276 ad8da597b4c98b8cfcdec0fefe0dbb85 ""
+ "salomeTools.ind" 1530021069 36880 298d952e198cb50f81090b175ab81949 "makeindex salomeTools.idx"
+ "salomeTools.out" 1530021070 3075 101e36bbbdb8d120fe7a2c74ab3c41f0 ""
+ "salomeTools.tex" 1530021064 344056 ca20c8b326006818094828ef2c3c2107 ""
+ "salomeTools.toc" 1530021070 8577 93385a67d7c8426ac7be843767a0ae03 ""
+ "sat_about.png" 1529937511 282130 625d3edc0de2910af30fe6407ab411b3 ""
+ "sphinx.sty" 1529937511 67712 9b578972569f0169bf44cfae88da82f2 ""
+ "sphinxhighlight.sty" 1530021063 8137 b8d4ef963833564f6e4eadc09cd757c4 ""
+ "sphinxmanual.cls" 1529937511 3589 0b0aac49c6f36925cf5f9d524a75a978 ""
+ "sphinxmulticell.sty" 1529937511 14618 0defbdc8536ad2e67f1eac6a1431bc55 ""
+ "tabulary.sty" 1529937511 13836 e4c420176570c694fb8cb70f63c46263 ""
(generated)
- "salomeTools.aux"
"salomeTools.out"
+ "salomeTools.aux"
"salomeTools.idx"
"salomeTools.log"
"salomeTools.toc"
\indexentry{put\_txt\_log\_in\_appli\_log\_dir() (src.compilation.Builder method)|hyperpage}{35}
\indexentry{wmake() (src.compilation.Builder method)|hyperpage}{35}
\indexentry{src.debug (module)|hyperpage}{35}
-\indexentry{InStream (class in src.debug)|hyperpage}{35}
-\indexentry{OutStream (class in src.debug)|hyperpage}{35}
-\indexentry{close() (src.debug.OutStream method)|hyperpage}{35}
-\indexentry{getLocalEnv() (in module src.debug)|hyperpage}{35}
-\indexentry{getStrConfigDbg() (in module src.debug)|hyperpage}{35}
+\indexentry{InStream (class in src.debug)|hyperpage}{36}
+\indexentry{OutStream (class in src.debug)|hyperpage}{36}
+\indexentry{close() (src.debug.OutStream method)|hyperpage}{36}
+\indexentry{format\_color\_exception() (in module src.debug)|hyperpage}{36}
+\indexentry{format\_exception() (in module src.debug)|hyperpage}{36}
+\indexentry{getLocalEnv() (in module src.debug)|hyperpage}{36}
+\indexentry{getStrConfigDbg() (in module src.debug)|hyperpage}{36}
\indexentry{getStrConfigStd() (in module src.debug)|hyperpage}{36}
\indexentry{indent() (in module src.debug)|hyperpage}{36}
+\indexentry{isTypeConfig() (in module src.debug)|hyperpage}{36}
\indexentry{pop\_debug() (in module src.debug)|hyperpage}{36}
\indexentry{push\_debug() (in module src.debug)|hyperpage}{36}
\indexentry{saveConfigDbg() (in module src.debug)|hyperpage}{36}
\indexentry{src.environment (module)|hyperpage}{36}
\indexentry{Environ (class in src.environment)|hyperpage}{36}
\indexentry{append() (src.environment.Environ method)|hyperpage}{36}
-\indexentry{append\_value() (src.environment.Environ method)|hyperpage}{36}
-\indexentry{command\_value() (src.environment.Environ method)|hyperpage}{36}
-\indexentry{get() (src.environment.Environ method)|hyperpage}{36}
-\indexentry{is\_defined() (src.environment.Environ method)|hyperpage}{36}
+\indexentry{append\_value() (src.environment.Environ method)|hyperpage}{37}
+\indexentry{command\_value() (src.environment.Environ method)|hyperpage}{37}
+\indexentry{get() (src.environment.Environ method)|hyperpage}{37}
+\indexentry{is\_defined() (src.environment.Environ method)|hyperpage}{37}
\indexentry{prepend() (src.environment.Environ method)|hyperpage}{37}
\indexentry{prepend\_value() (src.environment.Environ method)|hyperpage}{37}
\indexentry{set() (src.environment.Environ method)|hyperpage}{37}
\indexentry{FileEnvWriter (class in src.environment)|hyperpage}{37}
\indexentry{write\_cfgForPy\_file() (src.environment.FileEnvWriter method)|hyperpage}{37}
-\indexentry{write\_env\_file() (src.environment.FileEnvWriter method)|hyperpage}{37}
-\indexentry{SalomeEnviron (class in src.environment)|hyperpage}{37}
-\indexentry{add\_comment() (src.environment.SalomeEnviron method)|hyperpage}{37}
+\indexentry{write\_env\_file() (src.environment.FileEnvWriter method)|hyperpage}{38}
+\indexentry{SalomeEnviron (class in src.environment)|hyperpage}{38}
+\indexentry{add\_comment() (src.environment.SalomeEnviron method)|hyperpage}{38}
\indexentry{add\_line() (src.environment.SalomeEnviron method)|hyperpage}{38}
\indexentry{add\_warning() (src.environment.SalomeEnviron method)|hyperpage}{38}
\indexentry{append() (src.environment.SalomeEnviron method)|hyperpage}{38}
\indexentry{get() (src.environment.SalomeEnviron method)|hyperpage}{38}
\indexentry{get\_names() (src.environment.SalomeEnviron method)|hyperpage}{38}
\indexentry{is\_defined() (src.environment.SalomeEnviron method)|hyperpage}{38}
-\indexentry{load\_cfg\_environment() (src.environment.SalomeEnviron method)|hyperpage}{38}
-\indexentry{prepend() (src.environment.SalomeEnviron method)|hyperpage}{38}
-\indexentry{run\_env\_script() (src.environment.SalomeEnviron method)|hyperpage}{38}
+\indexentry{load\_cfg\_environment() (src.environment.SalomeEnviron method)|hyperpage}{39}
+\indexentry{prepend() (src.environment.SalomeEnviron method)|hyperpage}{39}
+\indexentry{run\_env\_script() (src.environment.SalomeEnviron method)|hyperpage}{39}
\indexentry{run\_simple\_env\_script() (src.environment.SalomeEnviron method)|hyperpage}{39}
\indexentry{set() (src.environment.SalomeEnviron method)|hyperpage}{39}
\indexentry{set\_a\_product() (src.environment.SalomeEnviron method)|hyperpage}{39}
\indexentry{set\_application\_env() (src.environment.SalomeEnviron method)|hyperpage}{39}
\indexentry{set\_cpp\_env() (src.environment.SalomeEnviron method)|hyperpage}{39}
\indexentry{set\_full\_environ() (src.environment.SalomeEnviron method)|hyperpage}{39}
-\indexentry{set\_products() (src.environment.SalomeEnviron method)|hyperpage}{39}
-\indexentry{set\_python\_libdirs() (src.environment.SalomeEnviron method)|hyperpage}{39}
-\indexentry{set\_salome\_generic\_product\_env() (src.environment.SalomeEnviron method)|hyperpage}{39}
-\indexentry{set\_salome\_minimal\_product\_env() (src.environment.SalomeEnviron method)|hyperpage}{39}
+\indexentry{set\_products() (src.environment.SalomeEnviron method)|hyperpage}{40}
+\indexentry{set\_python\_libdirs() (src.environment.SalomeEnviron method)|hyperpage}{40}
+\indexentry{set\_salome\_generic\_product\_env() (src.environment.SalomeEnviron method)|hyperpage}{40}
+\indexentry{set\_salome\_minimal\_product\_env() (src.environment.SalomeEnviron method)|hyperpage}{40}
\indexentry{Shell (class in src.environment)|hyperpage}{40}
\indexentry{load\_environment() (in module src.environment)|hyperpage}{40}
\indexentry{src.fileEnviron (module)|hyperpage}{40}
\indexentry{command\_value() (src.fileEnviron.BashFileEnviron method)|hyperpage}{40}
\indexentry{finish() (src.fileEnviron.BashFileEnviron method)|hyperpage}{40}
\indexentry{set() (src.fileEnviron.BashFileEnviron method)|hyperpage}{40}
-\indexentry{BatFileEnviron (class in src.fileEnviron)|hyperpage}{40}
-\indexentry{add\_comment() (src.fileEnviron.BatFileEnviron method)|hyperpage}{40}
-\indexentry{command\_value() (src.fileEnviron.BatFileEnviron method)|hyperpage}{40}
-\indexentry{finish() (src.fileEnviron.BatFileEnviron method)|hyperpage}{40}
+\indexentry{BatFileEnviron (class in src.fileEnviron)|hyperpage}{41}
+\indexentry{add\_comment() (src.fileEnviron.BatFileEnviron method)|hyperpage}{41}
+\indexentry{command\_value() (src.fileEnviron.BatFileEnviron method)|hyperpage}{41}
+\indexentry{finish() (src.fileEnviron.BatFileEnviron method)|hyperpage}{41}
\indexentry{get() (src.fileEnviron.BatFileEnviron method)|hyperpage}{41}
\indexentry{set() (src.fileEnviron.BatFileEnviron method)|hyperpage}{41}
\indexentry{ContextFileEnviron (class in src.fileEnviron)|hyperpage}{41}
\indexentry{add\_warning() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
\indexentry{append\_value() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
\indexentry{command\_value() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
-\indexentry{finish() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
-\indexentry{get() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
-\indexentry{prepend\_value() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
-\indexentry{set() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{41}
+\indexentry{finish() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{42}
+\indexentry{get() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{42}
+\indexentry{prepend\_value() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{42}
+\indexentry{set() (src.fileEnviron.ContextFileEnviron method)|hyperpage}{42}
\indexentry{FileEnviron (class in src.fileEnviron)|hyperpage}{42}
\indexentry{add\_comment() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
\indexentry{add\_echo() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
\indexentry{add\_warning() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
\indexentry{append() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
\indexentry{append\_value() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
-\indexentry{command\_value() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
-\indexentry{finish() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
-\indexentry{get() (src.fileEnviron.FileEnviron method)|hyperpage}{42}
+\indexentry{command\_value() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
+\indexentry{finish() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
+\indexentry{get() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
\indexentry{is\_defined() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
\indexentry{prepend() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
\indexentry{prepend\_value() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
\indexentry{set() (src.fileEnviron.FileEnviron method)|hyperpage}{43}
\indexentry{LauncherFileEnviron (class in src.fileEnviron)|hyperpage}{43}
\indexentry{add() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{43}
-\indexentry{add\_comment() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{43}
-\indexentry{add\_echo() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{43}
-\indexentry{add\_line() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{43}
-\indexentry{add\_warning() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{43}
-\indexentry{append() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{43}
+\indexentry{add\_comment() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
+\indexentry{add\_echo() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
+\indexentry{add\_line() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
+\indexentry{add\_warning() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
+\indexentry{append() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
\indexentry{append\_value() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
\indexentry{change\_to\_launcher() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
\indexentry{command\_value() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
\indexentry{get() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
\indexentry{is\_defined() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
\indexentry{prepend() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
-\indexentry{prepend\_value() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
-\indexentry{set() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{44}
-\indexentry{ScreenEnviron (class in src.fileEnviron)|hyperpage}{44}
+\indexentry{prepend\_value() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{45}
+\indexentry{set() (src.fileEnviron.LauncherFileEnviron method)|hyperpage}{45}
+\indexentry{ScreenEnviron (class in src.fileEnviron)|hyperpage}{45}
\indexentry{add\_comment() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
\indexentry{add\_echo() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
\indexentry{add\_line() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
\indexentry{command\_value() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
\indexentry{get() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
\indexentry{is\_defined() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
-\indexentry{prepend() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
-\indexentry{run\_env\_script() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
-\indexentry{set() (src.fileEnviron.ScreenEnviron method)|hyperpage}{45}
+\indexentry{prepend() (src.fileEnviron.ScreenEnviron method)|hyperpage}{46}
+\indexentry{run\_env\_script() (src.fileEnviron.ScreenEnviron method)|hyperpage}{46}
+\indexentry{set() (src.fileEnviron.ScreenEnviron method)|hyperpage}{46}
\indexentry{write() (src.fileEnviron.ScreenEnviron method)|hyperpage}{46}
\indexentry{get\_file\_environ() (in module src.fileEnviron)|hyperpage}{46}
\indexentry{special\_path\_separator() (in module src.fileEnviron)|hyperpage}{46}
\indexentry{launch\_command() (in module src.fork)|hyperpage}{46}
\indexentry{show\_progress() (in module src.fork)|hyperpage}{46}
\indexentry{write\_back() (in module src.fork)|hyperpage}{46}
-\indexentry{src.logger (module)|hyperpage}{46}
-\indexentry{Logger (class in src.logger)|hyperpage}{46}
-\indexentry{add\_link() (src.logger.Logger method)|hyperpage}{46}
+\indexentry{src.logger (module)|hyperpage}{47}
+\indexentry{Logger (class in src.logger)|hyperpage}{47}
+\indexentry{add\_link() (src.logger.Logger method)|hyperpage}{47}
\indexentry{end\_write() (src.logger.Logger method)|hyperpage}{47}
\indexentry{error() (src.logger.Logger method)|hyperpage}{47}
\indexentry{flush() (src.logger.Logger method)|hyperpage}{47}
\indexentry{put\_initial\_xml\_fields() (src.logger.Logger method)|hyperpage}{47}
\indexentry{write() (src.logger.Logger method)|hyperpage}{47}
\indexentry{date\_to\_datetime() (in module src.logger)|hyperpage}{47}
-\indexentry{list\_log\_file() (in module src.logger)|hyperpage}{47}
-\indexentry{show\_command\_log() (in module src.logger)|hyperpage}{47}
-\indexentry{timedelta\_total\_seconds() (in module src.logger)|hyperpage}{47}
+\indexentry{getCurrentLogger() (in module src.logger)|hyperpage}{47}
+\indexentry{getDefaultLogger() (in module src.logger)|hyperpage}{47}
+\indexentry{getUnittestLogger() (in module src.logger)|hyperpage}{47}
+\indexentry{isCurrentLoggerUnittest() (in module src.logger)|hyperpage}{48}
+\indexentry{list\_log\_file() (in module src.logger)|hyperpage}{48}
+\indexentry{sendMessageToCurrentLogger() (in module src.logger)|hyperpage}{48}
+\indexentry{setCurrentLogger() (in module src.logger)|hyperpage}{48}
+\indexentry{show\_command\_log() (in module src.logger)|hyperpage}{48}
+\indexentry{timedelta\_total\_seconds() (in module src.logger)|hyperpage}{48}
\indexentry{update\_hat\_xml() (in module src.logger)|hyperpage}{48}
\indexentry{src.options (module)|hyperpage}{48}
\indexentry{OptResult (class in src.options)|hyperpage}{48}
-\indexentry{Options (class in src.options)|hyperpage}{48}
-\indexentry{add\_option() (src.options.Options method)|hyperpage}{48}
-\indexentry{debug\_write() (src.options.Options method)|hyperpage}{48}
-\indexentry{filterLevel() (src.options.Options method)|hyperpage}{48}
-\indexentry{filterList2() (src.options.Options method)|hyperpage}{48}
-\indexentry{getDetailOption() (src.options.Options method)|hyperpage}{48}
+\indexentry{Options (class in src.options)|hyperpage}{49}
+\indexentry{add\_option() (src.options.Options method)|hyperpage}{49}
+\indexentry{debug\_write() (src.options.Options method)|hyperpage}{49}
+\indexentry{filterLevel() (src.options.Options method)|hyperpage}{49}
+\indexentry{filterList2() (src.options.Options method)|hyperpage}{49}
+\indexentry{getDetailOption() (src.options.Options method)|hyperpage}{49}
\indexentry{get\_help() (src.options.Options method)|hyperpage}{49}
\indexentry{indent() (src.options.Options method)|hyperpage}{49}
\indexentry{parse\_args() (src.options.Options method)|hyperpage}{49}
-\indexentry{print\_help() (src.options.Options method)|hyperpage}{49}
\indexentry{src.printcolors (module)|hyperpage}{49}
\indexentry{cleancolor() (in module src.printcolors)|hyperpage}{49}
\indexentry{print\_color\_map() (in module src.printcolors)|hyperpage}{49}
-\indexentry{print\_color\_range() (in module src.printcolors)|hyperpage}{49}
-\indexentry{print\_value() (in module src.printcolors)|hyperpage}{49}
-\indexentry{printc() (in module src.printcolors)|hyperpage}{49}
+\indexentry{print\_color\_range() (in module src.printcolors)|hyperpage}{50}
+\indexentry{print\_value() (in module src.printcolors)|hyperpage}{50}
+\indexentry{printc() (in module src.printcolors)|hyperpage}{50}
\indexentry{printcError() (in module src.printcolors)|hyperpage}{50}
\indexentry{printcHeader() (in module src.printcolors)|hyperpage}{50}
\indexentry{printcHighlight() (in module src.printcolors)|hyperpage}{50}
\indexentry{printcInfo() (in module src.printcolors)|hyperpage}{50}
-\indexentry{printcLabel() (in module src.printcolors)|hyperpage}{50}
-\indexentry{printcSuccess() (in module src.printcolors)|hyperpage}{50}
-\indexentry{printcWarning() (in module src.printcolors)|hyperpage}{50}
-\indexentry{src.product (module)|hyperpage}{50}
-\indexentry{check\_config\_exists() (in module src.product)|hyperpage}{50}
+\indexentry{printcLabel() (in module src.printcolors)|hyperpage}{51}
+\indexentry{printcSuccess() (in module src.printcolors)|hyperpage}{51}
+\indexentry{printcWarning() (in module src.printcolors)|hyperpage}{51}
+\indexentry{src.product (module)|hyperpage}{51}
+\indexentry{check\_config\_exists() (in module src.product)|hyperpage}{51}
\indexentry{check\_installation() (in module src.product)|hyperpage}{51}
\indexentry{check\_source() (in module src.product)|hyperpage}{51}
\indexentry{get\_base\_install\_dir() (in module src.product)|hyperpage}{51}
-\indexentry{get\_install\_dir() (in module src.product)|hyperpage}{51}
-\indexentry{get\_product\_components() (in module src.product)|hyperpage}{51}
+\indexentry{get\_install\_dir() (in module src.product)|hyperpage}{52}
+\indexentry{get\_product\_components() (in module src.product)|hyperpage}{52}
\indexentry{get\_product\_config() (in module src.product)|hyperpage}{52}
\indexentry{get\_product\_dependencies() (in module src.product)|hyperpage}{52}
\indexentry{get\_product\_section() (in module src.product)|hyperpage}{52}
-\indexentry{get\_products\_infos() (in module src.product)|hyperpage}{52}
-\indexentry{product\_compiles() (in module src.product)|hyperpage}{52}
-\indexentry{product\_has\_env\_script() (in module src.product)|hyperpage}{52}
+\indexentry{get\_products\_infos() (in module src.product)|hyperpage}{53}
+\indexentry{product\_compiles() (in module src.product)|hyperpage}{53}
+\indexentry{product\_has\_env\_script() (in module src.product)|hyperpage}{53}
\indexentry{product\_has\_logo() (in module src.product)|hyperpage}{53}
\indexentry{product\_has\_patches() (in module src.product)|hyperpage}{53}
\indexentry{product\_has\_salome\_gui() (in module src.product)|hyperpage}{53}
\indexentry{product\_has\_script() (in module src.product)|hyperpage}{53}
\indexentry{product\_is\_autotools() (in module src.product)|hyperpage}{53}
-\indexentry{product\_is\_cmake() (in module src.product)|hyperpage}{53}
-\indexentry{product\_is\_cpp() (in module src.product)|hyperpage}{53}
-\indexentry{product\_is\_debug() (in module src.product)|hyperpage}{53}
+\indexentry{product\_is\_cmake() (in module src.product)|hyperpage}{54}
+\indexentry{product\_is\_cpp() (in module src.product)|hyperpage}{54}
+\indexentry{product\_is\_debug() (in module src.product)|hyperpage}{54}
\indexentry{product\_is\_dev() (in module src.product)|hyperpage}{54}
\indexentry{product\_is\_fixed() (in module src.product)|hyperpage}{54}
\indexentry{product\_is\_generated() (in module src.product)|hyperpage}{54}
\indexentry{product\_is\_mpi() (in module src.product)|hyperpage}{54}
\indexentry{product\_is\_native() (in module src.product)|hyperpage}{54}
-\indexentry{product\_is\_salome() (in module src.product)|hyperpage}{54}
-\indexentry{product\_is\_smesh\_plugin() (in module src.product)|hyperpage}{54}
-\indexentry{product\_is\_vcs() (in module src.product)|hyperpage}{54}
-\indexentry{product\_is\_verbose() (in module src.product)|hyperpage}{54}
+\indexentry{product\_is\_salome() (in module src.product)|hyperpage}{55}
+\indexentry{product\_is\_smesh\_plugin() (in module src.product)|hyperpage}{55}
+\indexentry{product\_is\_vcs() (in module src.product)|hyperpage}{55}
+\indexentry{product\_is\_verbose() (in module src.product)|hyperpage}{55}
\indexentry{src.pyconf (module)|hyperpage}{55}
\indexentry{Config (class in src.pyconf)|hyperpage}{56}
\indexentry{Config.Namespace (class in src.pyconf)|hyperpage}{56}
\indexentry{addNamespace() (src.pyconf.Config method)|hyperpage}{56}
\indexentry{getByPath() (src.pyconf.Config method)|hyperpage}{56}
\indexentry{load() (src.pyconf.Config method)|hyperpage}{56}
-\indexentry{removeNamespace() (src.pyconf.Config method)|hyperpage}{56}
-\indexentry{ConfigError|hyperpage}{56}
-\indexentry{ConfigFormatError|hyperpage}{56}
-\indexentry{ConfigInputStream (class in src.pyconf)|hyperpage}{56}
-\indexentry{close() (src.pyconf.ConfigInputStream method)|hyperpage}{56}
-\indexentry{read() (src.pyconf.ConfigInputStream method)|hyperpage}{56}
-\indexentry{readline() (src.pyconf.ConfigInputStream method)|hyperpage}{56}
-\indexentry{ConfigList (class in src.pyconf)|hyperpage}{56}
-\indexentry{getByPath() (src.pyconf.ConfigList method)|hyperpage}{56}
+\indexentry{removeNamespace() (src.pyconf.Config method)|hyperpage}{57}
+\indexentry{ConfigError|hyperpage}{57}
+\indexentry{ConfigFormatError|hyperpage}{57}
+\indexentry{ConfigInputStream (class in src.pyconf)|hyperpage}{57}
+\indexentry{close() (src.pyconf.ConfigInputStream method)|hyperpage}{57}
+\indexentry{read() (src.pyconf.ConfigInputStream method)|hyperpage}{57}
+\indexentry{readline() (src.pyconf.ConfigInputStream method)|hyperpage}{57}
+\indexentry{ConfigList (class in src.pyconf)|hyperpage}{57}
+\indexentry{getByPath() (src.pyconf.ConfigList method)|hyperpage}{57}
\indexentry{ConfigMerger (class in src.pyconf)|hyperpage}{57}
\indexentry{handleMismatch() (src.pyconf.ConfigMerger method)|hyperpage}{57}
\indexentry{merge() (src.pyconf.ConfigMerger method)|hyperpage}{57}
\indexentry{mergeMapping() (src.pyconf.ConfigMerger method)|hyperpage}{57}
-\indexentry{mergeSequence() (src.pyconf.ConfigMerger method)|hyperpage}{57}
-\indexentry{overwriteKeys() (src.pyconf.ConfigMerger method)|hyperpage}{57}
-\indexentry{ConfigOutputStream (class in src.pyconf)|hyperpage}{57}
-\indexentry{close() (src.pyconf.ConfigOutputStream method)|hyperpage}{57}
-\indexentry{flush() (src.pyconf.ConfigOutputStream method)|hyperpage}{57}
-\indexentry{write() (src.pyconf.ConfigOutputStream method)|hyperpage}{57}
-\indexentry{ConfigReader (class in src.pyconf)|hyperpage}{57}
-\indexentry{getChar() (src.pyconf.ConfigReader method)|hyperpage}{57}
-\indexentry{getToken() (src.pyconf.ConfigReader method)|hyperpage}{57}
+\indexentry{mergeSequence() (src.pyconf.ConfigMerger method)|hyperpage}{58}
+\indexentry{overwriteKeys() (src.pyconf.ConfigMerger method)|hyperpage}{58}
+\indexentry{ConfigOutputStream (class in src.pyconf)|hyperpage}{58}
+\indexentry{close() (src.pyconf.ConfigOutputStream method)|hyperpage}{58}
+\indexentry{flush() (src.pyconf.ConfigOutputStream method)|hyperpage}{58}
+\indexentry{write() (src.pyconf.ConfigOutputStream method)|hyperpage}{58}
+\indexentry{ConfigReader (class in src.pyconf)|hyperpage}{58}
+\indexentry{getChar() (src.pyconf.ConfigReader method)|hyperpage}{58}
+\indexentry{getToken() (src.pyconf.ConfigReader method)|hyperpage}{58}
\indexentry{load() (src.pyconf.ConfigReader method)|hyperpage}{58}
\indexentry{location() (src.pyconf.ConfigReader method)|hyperpage}{58}
\indexentry{match() (src.pyconf.ConfigReader method)|hyperpage}{58}
\indexentry{parseFactor() (src.pyconf.ConfigReader method)|hyperpage}{58}
-\indexentry{parseKeyValuePair() (src.pyconf.ConfigReader method)|hyperpage}{58}
-\indexentry{parseMapping() (src.pyconf.ConfigReader method)|hyperpage}{58}
-\indexentry{parseMappingBody() (src.pyconf.ConfigReader method)|hyperpage}{58}
-\indexentry{parseReference() (src.pyconf.ConfigReader method)|hyperpage}{58}
-\indexentry{parseScalar() (src.pyconf.ConfigReader method)|hyperpage}{58}
-\indexentry{parseSequence() (src.pyconf.ConfigReader method)|hyperpage}{58}
+\indexentry{parseKeyValuePair() (src.pyconf.ConfigReader method)|hyperpage}{59}
+\indexentry{parseMapping() (src.pyconf.ConfigReader method)|hyperpage}{59}
+\indexentry{parseMappingBody() (src.pyconf.ConfigReader method)|hyperpage}{59}
+\indexentry{parseReference() (src.pyconf.ConfigReader method)|hyperpage}{59}
+\indexentry{parseScalar() (src.pyconf.ConfigReader method)|hyperpage}{59}
+\indexentry{parseSequence() (src.pyconf.ConfigReader method)|hyperpage}{59}
\indexentry{parseSuffix() (src.pyconf.ConfigReader method)|hyperpage}{59}
\indexentry{parseTerm() (src.pyconf.ConfigReader method)|hyperpage}{59}
\indexentry{parseValue() (src.pyconf.ConfigReader method)|hyperpage}{59}
\indexentry{setStream() (src.pyconf.ConfigReader method)|hyperpage}{59}
\indexentry{ConfigResolutionError|hyperpage}{59}
\indexentry{Container (class in src.pyconf)|hyperpage}{59}
-\indexentry{evaluate() (src.pyconf.Container method)|hyperpage}{59}
-\indexentry{setPath() (src.pyconf.Container method)|hyperpage}{59}
-\indexentry{writeToStream() (src.pyconf.Container method)|hyperpage}{59}
-\indexentry{writeValue() (src.pyconf.Container method)|hyperpage}{59}
-\indexentry{Expression (class in src.pyconf)|hyperpage}{59}
+\indexentry{evaluate() (src.pyconf.Container method)|hyperpage}{60}
+\indexentry{setPath() (src.pyconf.Container method)|hyperpage}{60}
+\indexentry{writeToStream() (src.pyconf.Container method)|hyperpage}{60}
+\indexentry{writeValue() (src.pyconf.Container method)|hyperpage}{60}
+\indexentry{Expression (class in src.pyconf)|hyperpage}{60}
\indexentry{evaluate() (src.pyconf.Expression method)|hyperpage}{60}
\indexentry{Mapping (class in src.pyconf)|hyperpage}{60}
\indexentry{addMapping() (src.pyconf.Mapping method)|hyperpage}{60}
\indexentry{iteritems() (src.pyconf.Mapping method)|hyperpage}{60}
\indexentry{iterkeys() (src.pyconf.Mapping method)|hyperpage}{60}
\indexentry{keys() (src.pyconf.Mapping method)|hyperpage}{60}
-\indexentry{writeToStream() (src.pyconf.Mapping method)|hyperpage}{60}
-\indexentry{Reference (class in src.pyconf)|hyperpage}{60}
-\indexentry{addElement() (src.pyconf.Reference method)|hyperpage}{60}
-\indexentry{findConfig() (src.pyconf.Reference method)|hyperpage}{60}
-\indexentry{resolve() (src.pyconf.Reference method)|hyperpage}{60}
-\indexentry{Sequence (class in src.pyconf)|hyperpage}{60}
+\indexentry{writeToStream() (src.pyconf.Mapping method)|hyperpage}{61}
+\indexentry{Reference (class in src.pyconf)|hyperpage}{61}
+\indexentry{addElement() (src.pyconf.Reference method)|hyperpage}{61}
+\indexentry{findConfig() (src.pyconf.Reference method)|hyperpage}{61}
+\indexentry{resolve() (src.pyconf.Reference method)|hyperpage}{61}
+\indexentry{Sequence (class in src.pyconf)|hyperpage}{61}
\indexentry{Sequence.SeqIter (class in src.pyconf)|hyperpage}{61}
\indexentry{next() (src.pyconf.Sequence.SeqIter method)|hyperpage}{61}
\indexentry{append() (src.pyconf.Sequence method)|hyperpage}{61}
\indexentry{writeToStream() (src.pyconf.Sequence method)|hyperpage}{61}
\indexentry{deepCopyMapping() (in module src.pyconf)|hyperpage}{61}
\indexentry{defaultMergeResolve() (in module src.pyconf)|hyperpage}{61}
-\indexentry{defaultStreamOpener() (in module src.pyconf)|hyperpage}{61}
-\indexentry{isWord() (in module src.pyconf)|hyperpage}{61}
-\indexentry{makePath() (in module src.pyconf)|hyperpage}{61}
+\indexentry{defaultStreamOpener() (in module src.pyconf)|hyperpage}{62}
+\indexentry{isWord() (in module src.pyconf)|hyperpage}{62}
+\indexentry{makePath() (in module src.pyconf)|hyperpage}{62}
\indexentry{overwriteMergeResolve() (in module src.pyconf)|hyperpage}{62}
\indexentry{src.system (module)|hyperpage}{62}
\indexentry{archive\_extract() (in module src.system)|hyperpage}{62}
\indexentry{cvs\_extract() (in module src.system)|hyperpage}{62}
-\indexentry{git\_extract() (in module src.system)|hyperpage}{62}
+\indexentry{git\_extract() (in module src.system)|hyperpage}{63}
\indexentry{show\_in\_editor() (in module src.system)|hyperpage}{63}
\indexentry{svn\_extract() (in module src.system)|hyperpage}{63}
-\indexentry{src.template (module)|hyperpage}{63}
-\indexentry{MyTemplate (class in src.template)|hyperpage}{63}
-\indexentry{delimiter (src.template.MyTemplate attribute)|hyperpage}{63}
-\indexentry{pattern (src.template.MyTemplate attribute)|hyperpage}{63}
-\indexentry{substitute() (in module src.template)|hyperpage}{63}
-\indexentry{src.test\_module (module)|hyperpage}{63}
-\indexentry{Test (class in src.test\_module)|hyperpage}{63}
-\indexentry{generate\_launching\_commands() (src.test\_module.Test method)|hyperpage}{63}
-\indexentry{generate\_script() (src.test\_module.Test method)|hyperpage}{63}
-\indexentry{get\_test\_timeout() (src.test\_module.Test method)|hyperpage}{63}
-\indexentry{get\_tmp\_dir() (src.test\_module.Test method)|hyperpage}{63}
-\indexentry{prepare\_testbase() (src.test\_module.Test method)|hyperpage}{63}
+\indexentry{src.template (module)|hyperpage}{64}
+\indexentry{MyTemplate (class in src.template)|hyperpage}{64}
+\indexentry{delimiter (src.template.MyTemplate attribute)|hyperpage}{64}
+\indexentry{pattern (src.template.MyTemplate attribute)|hyperpage}{64}
+\indexentry{substitute() (in module src.template)|hyperpage}{64}
+\indexentry{src.test\_module (module)|hyperpage}{64}
+\indexentry{Test (class in src.test\_module)|hyperpage}{64}
+\indexentry{generate\_launching\_commands() (src.test\_module.Test method)|hyperpage}{64}
+\indexentry{generate\_script() (src.test\_module.Test method)|hyperpage}{64}
+\indexentry{get\_test\_timeout() (src.test\_module.Test method)|hyperpage}{64}
+\indexentry{get\_tmp\_dir() (src.test\_module.Test method)|hyperpage}{64}
+\indexentry{prepare\_testbase() (src.test\_module.Test method)|hyperpage}{64}
\indexentry{prepare\_testbase\_from\_dir() (src.test\_module.Test method)|hyperpage}{64}
\indexentry{prepare\_testbase\_from\_git() (src.test\_module.Test method)|hyperpage}{64}
\indexentry{prepare\_testbase\_from\_svn() (src.test\_module.Test method)|hyperpage}{64}
\indexentry{src.xmlManager (module)|hyperpage}{64}
\indexentry{ReadXmlFile (class in src.xmlManager)|hyperpage}{64}
\indexentry{getRootAttrib() (src.xmlManager.ReadXmlFile method)|hyperpage}{64}
-\indexentry{get\_attrib() (src.xmlManager.ReadXmlFile method)|hyperpage}{64}
-\indexentry{get\_node\_text() (src.xmlManager.ReadXmlFile method)|hyperpage}{64}
-\indexentry{XmlLogFile (class in src.xmlManager)|hyperpage}{64}
-\indexentry{add\_simple\_node() (src.xmlManager.XmlLogFile method)|hyperpage}{64}
+\indexentry{get\_attrib() (src.xmlManager.ReadXmlFile method)|hyperpage}{65}
+\indexentry{get\_node\_text() (src.xmlManager.ReadXmlFile method)|hyperpage}{65}
+\indexentry{XmlLogFile (class in src.xmlManager)|hyperpage}{65}
+\indexentry{add\_simple\_node() (src.xmlManager.XmlLogFile method)|hyperpage}{65}
\indexentry{append\_node\_attrib() (src.xmlManager.XmlLogFile method)|hyperpage}{65}
\indexentry{append\_node\_text() (src.xmlManager.XmlLogFile method)|hyperpage}{65}
\indexentry{write\_tree() (src.xmlManager.XmlLogFile method)|hyperpage}{65}
\indexentry{add\_simple\_node() (in module src.xmlManager)|hyperpage}{65}
-\indexentry{append\_node\_attrib() (in module src.xmlManager)|hyperpage}{65}
-\indexentry{find\_node\_by\_attrib() (in module src.xmlManager)|hyperpage}{65}
-\indexentry{write\_report() (in module src.xmlManager)|hyperpage}{65}
+\indexentry{append\_node\_attrib() (in module src.xmlManager)|hyperpage}{66}
+\indexentry{find\_node\_by\_attrib() (in module src.xmlManager)|hyperpage}{66}
+\indexentry{write\_report() (in module src.xmlManager)|hyperpage}{66}
\indexentry{src (module)|hyperpage}{66}
\indexentry{Path (class in src)|hyperpage}{66}
\indexentry{base() (src.Path method)|hyperpage}{66}
\indexentry{isfile() (src.Path method)|hyperpage}{66}
\indexentry{islink() (src.Path method)|hyperpage}{66}
\indexentry{list() (src.Path method)|hyperpage}{66}
-\indexentry{make() (src.Path method)|hyperpage}{66}
-\indexentry{readlink() (src.Path method)|hyperpage}{66}
-\indexentry{rm() (src.Path method)|hyperpage}{66}
-\indexentry{smartcopy() (src.Path method)|hyperpage}{66}
-\indexentry{symlink() (src.Path method)|hyperpage}{66}
-\indexentry{SatException|hyperpage}{66}
-\indexentry{activate\_mesa\_property() (in module src)|hyperpage}{66}
-\indexentry{check\_config\_has\_application() (in module src)|hyperpage}{66}
-\indexentry{check\_config\_has\_profile() (in module src)|hyperpage}{66}
-\indexentry{config\_has\_application() (in module src)|hyperpage}{66}
-\indexentry{deepcopy\_list() (in module src)|hyperpage}{66}
+\indexentry{make() (src.Path method)|hyperpage}{67}
+\indexentry{readlink() (src.Path method)|hyperpage}{67}
+\indexentry{rm() (src.Path method)|hyperpage}{67}
+\indexentry{smartcopy() (src.Path method)|hyperpage}{67}
+\indexentry{symlink() (src.Path method)|hyperpage}{67}
+\indexentry{SatException|hyperpage}{67}
+\indexentry{activate\_mesa\_property() (in module src)|hyperpage}{67}
+\indexentry{check\_config\_has\_application() (in module src)|hyperpage}{67}
+\indexentry{check\_config\_has\_profile() (in module src)|hyperpage}{67}
+\indexentry{config\_has\_application() (in module src)|hyperpage}{67}
+\indexentry{deepcopy\_list() (in module src)|hyperpage}{67}
\indexentry{ensure\_path\_exists() (in module src)|hyperpage}{67}
\indexentry{find\_file\_in\_lpath() (in module src)|hyperpage}{67}
\indexentry{get\_base\_path() (in module src)|hyperpage}{67}
\indexentry{get\_cfg\_param() (in module src)|hyperpage}{67}
-\indexentry{get\_launcher\_name() (in module src)|hyperpage}{67}
-\indexentry{get\_log\_path() (in module src)|hyperpage}{67}
-\indexentry{get\_property\_in\_product\_cfg() (in module src)|hyperpage}{67}
-\indexentry{get\_salome\_version() (in module src)|hyperpage}{67}
-\indexentry{get\_tmp\_filename() (in module src)|hyperpage}{67}
+\indexentry{get\_launcher\_name() (in module src)|hyperpage}{68}
+\indexentry{get\_log\_path() (in module src)|hyperpage}{68}
+\indexentry{get\_property\_in\_product\_cfg() (in module src)|hyperpage}{68}
+\indexentry{get\_salome\_version() (in module src)|hyperpage}{68}
+\indexentry{get\_tmp\_filename() (in module src)|hyperpage}{68}
\indexentry{handleRemoveReadonly() (in module src)|hyperpage}{68}
\indexentry{merge\_dicts() (in module src)|hyperpage}{68}
\indexentry{only\_numbers() (in module src)|hyperpage}{68}
\indexentry{print\_info() (in module src)|hyperpage}{68}
\indexentry{read\_config\_from\_a\_file() (in module src)|hyperpage}{68}
\indexentry{remove\_item\_from\_list() (in module src)|hyperpage}{68}
-\indexentry{replace\_in\_file() (in module src)|hyperpage}{68}
+\indexentry{replace\_in\_file() (in module src)|hyperpage}{69}
This is makeindex, version 2.15 [TeX Live 2017] (kpathsea + Thai support).
Scanning style file ./python.ist.......done (7 attributes redefined, 0 ignored).
-Scanning input file salomeTools.idx....done (518 entries accepted, 0 rejected).
-Sorting entries.......done (4982 comparisons).
-Generating output file salomeTools.ind....done (590 lines written, 0 warnings).
+Scanning input file salomeTools.idx....done (526 entries accepted, 0 rejected).
+Sorting entries.......done (5034 comparisons).
+Generating output file salomeTools.ind....done (598 lines written, 0 warnings).
Output written in salomeTools.ind.
Transcript written in salomeTools.ilg.
\def\bigletter#1{{\Large\sffamily#1}\nopagebreak\vspace{1mm}}
\bigletter A
- \item activate\_mesa\_property() (in module src), \hyperpage{66}
+ \item activate\_mesa\_property() (in module src), \hyperpage{67}
\item add() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{43}
- \item add\_comment() (src.environment.SalomeEnviron method), \hyperpage{37}
- \item add\_comment() (src.fileEnviron.BatFileEnviron method), \hyperpage{40}
+ \item add\_comment() (src.environment.SalomeEnviron method), \hyperpage{38}
+ \item add\_comment() (src.fileEnviron.BatFileEnviron method), \hyperpage{41}
\item add\_comment() (src.fileEnviron.FileEnviron method), \hyperpage{42}
- \item add\_comment() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{43}
+ \item add\_comment() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item add\_comment() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
\item add\_echo() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
\item add\_echo() (src.fileEnviron.FileEnviron method), \hyperpage{42}
- \item add\_echo() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{43}
+ \item add\_echo() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item add\_echo() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
\item add\_line() (src.environment.SalomeEnviron method), \hyperpage{38}
\item add\_line() (src.fileEnviron.FileEnviron method), \hyperpage{42}
- \item add\_line() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{43}
+ \item add\_line() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item add\_line() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
- \item add\_link() (src.logger.Logger method), \hyperpage{46}
- \item add\_option() (src.options.Options method), \hyperpage{48}
+ \item add\_link() (src.logger.Logger method), \hyperpage{47}
+ \item add\_option() (src.options.Options method), \hyperpage{49}
\item add\_simple\_node() (in module src.xmlManager), \hyperpage{65}
- \item add\_simple\_node() (src.xmlManager.XmlLogFile method), \hyperpage{64}
+ \item add\_simple\_node() (src.xmlManager.XmlLogFile method), \hyperpage{65}
\item add\_warning() (src.environment.SalomeEnviron method), \hyperpage{38}
\item add\_warning() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
\item add\_warning() (src.fileEnviron.FileEnviron method), \hyperpage{42}
- \item add\_warning() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{43}
+ \item add\_warning() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item add\_warning() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
- \item addElement() (src.pyconf.Reference method), \hyperpage{60}
+ \item addElement() (src.pyconf.Reference method), \hyperpage{61}
\item addMapping() (src.pyconf.Mapping method), \hyperpage{60}
\item addNamespace() (src.pyconf.Config method), \hyperpage{56}
\item ANSI\_CSI\_RE (src.colorama.ansitowin32.AnsiToWin32 attribute), \hyperpage{31}
\item append() (src.environment.Environ method), \hyperpage{36}
\item append() (src.environment.SalomeEnviron method), \hyperpage{38}
\item append() (src.fileEnviron.FileEnviron method), \hyperpage{42}
- \item append() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{43}
+ \item append() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item append() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
\item append() (src.pyconf.Sequence method), \hyperpage{61}
- \item append\_node\_attrib() (in module src.xmlManager), \hyperpage{65}
+ \item append\_node\_attrib() (in module src.xmlManager), \hyperpage{66}
\item append\_node\_attrib() (src.xmlManager.XmlLogFile method), \hyperpage{65}
\item append\_node\_text() (src.xmlManager.XmlLogFile method), \hyperpage{65}
- \item append\_value() (src.environment.Environ method), \hyperpage{36}
+ \item append\_value() (src.environment.Environ method), \hyperpage{37}
\item append\_value() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
\item append\_value() (src.fileEnviron.FileEnviron method), \hyperpage{42}
\item append\_value() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item BashFileEnviron (class in src.fileEnviron), \hyperpage{40}
\item batch() (in module src.fork), \hyperpage{46}
\item batch\_salome() (in module src.fork), \hyperpage{46}
- \item BatFileEnviron (class in src.fileEnviron), \hyperpage{40}
+ \item BatFileEnviron (class in src.fileEnviron), \hyperpage{41}
\item BLACK (src.colorama.ansi.AnsiBack attribute), \hyperpage{29}
\item BLACK (src.colorama.ansi.AnsiFore attribute), \hyperpage{30}
\item BLACK (src.colorama.winterm.WinColor attribute), \hyperpage{32}
\item call\_win32() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
\item change\_to\_launcher() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item check() (src.compilation.Builder method), \hyperpage{34}
- \item check\_config\_exists() (in module src.product), \hyperpage{50}
- \item check\_config\_has\_application() (in module src), \hyperpage{66}
- \item check\_config\_has\_profile() (in module src), \hyperpage{66}
+ \item check\_config\_exists() (in module src.product), \hyperpage{51}
+ \item check\_config\_has\_application() (in module src), \hyperpage{67}
+ \item check\_config\_has\_profile() (in module src), \hyperpage{67}
\item check\_installation() (in module src.product), \hyperpage{51}
\item check\_source() (in module src.product), \hyperpage{51}
\item chmod() (src.Path method), \hyperpage{66}
\item cleancolor() (in module src.printcolors), \hyperpage{49}
\item clear\_line() (in module src.colorama.ansi), \hyperpage{30}
\item clear\_screen() (in module src.colorama.ansi), \hyperpage{30}
- \item close() (src.debug.OutStream method), \hyperpage{35}
+ \item close() (src.debug.OutStream method), \hyperpage{36}
\item close() (src.ElementTree.TreeBuilder method), \hyperpage{33}
\item close() (src.ElementTree.XMLTreeBuilder method), \hyperpage{33}
- \item close() (src.pyconf.ConfigInputStream method), \hyperpage{56}
- \item close() (src.pyconf.ConfigOutputStream method), \hyperpage{57}
+ \item close() (src.pyconf.ConfigInputStream method), \hyperpage{57}
+ \item close() (src.pyconf.ConfigOutputStream method), \hyperpage{58}
\item cmake() (src.compilation.Builder method), \hyperpage{34}
\item code\_to\_chars() (in module src.colorama.ansi), \hyperpage{30}
\item colorama\_text() (in module src.colorama.initialise), \hyperpage{31}
- \item command\_value() (src.environment.Environ method), \hyperpage{36}
+ \item command\_value() (src.environment.Environ method), \hyperpage{37}
\item command\_value() (src.fileEnviron.BashFileEnviron method), \hyperpage{40}
- \item command\_value() (src.fileEnviron.BatFileEnviron method), \hyperpage{40}
+ \item command\_value() (src.fileEnviron.BatFileEnviron method), \hyperpage{41}
\item command\_value() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
- \item command\_value() (src.fileEnviron.FileEnviron method), \hyperpage{42}
+ \item command\_value() (src.fileEnviron.FileEnviron method), \hyperpage{43}
\item command\_value() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item command\_value() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
\item Comment() (in module src.ElementTree), \hyperpage{33}
\item complete\_environment() (src.compilation.Builder method), \hyperpage{34}
\item Config (class in src.pyconf), \hyperpage{56}
\item Config.Namespace (class in src.pyconf), \hyperpage{56}
- \item config\_has\_application() (in module src), \hyperpage{66}
- \item ConfigError, \hyperpage{56}
- \item ConfigFormatError, \hyperpage{56}
- \item ConfigInputStream (class in src.pyconf), \hyperpage{56}
- \item ConfigList (class in src.pyconf), \hyperpage{56}
+ \item config\_has\_application() (in module src), \hyperpage{67}
+ \item ConfigError, \hyperpage{57}
+ \item ConfigFormatError, \hyperpage{57}
+ \item ConfigInputStream (class in src.pyconf), \hyperpage{57}
+ \item ConfigList (class in src.pyconf), \hyperpage{57}
\item ConfigMerger (class in src.pyconf), \hyperpage{57}
- \item ConfigOutputStream (class in src.pyconf), \hyperpage{57}
- \item ConfigReader (class in src.pyconf), \hyperpage{57}
+ \item ConfigOutputStream (class in src.pyconf), \hyperpage{58}
+ \item ConfigReader (class in src.pyconf), \hyperpage{58}
\item ConfigResolutionError, \hyperpage{59}
\item configure() (src.compilation.Builder method), \hyperpage{34}
\item Container (class in src.pyconf), \hyperpage{59}
\bigletter D
\item data() (src.ElementTree.TreeBuilder method), \hyperpage{33}
\item date\_to\_datetime() (in module src.logger), \hyperpage{47}
- \item debug\_write() (src.options.Options method), \hyperpage{48}
- \item deepcopy\_list() (in module src), \hyperpage{66}
+ \item debug\_write() (src.options.Options method), \hyperpage{49}
+ \item deepcopy\_list() (in module src), \hyperpage{67}
\item deepCopyMapping() (in module src.pyconf), \hyperpage{61}
\item defaultMergeResolve() (in module src.pyconf), \hyperpage{61}
- \item defaultStreamOpener() (in module src.pyconf), \hyperpage{61}
+ \item defaultStreamOpener() (in module src.pyconf), \hyperpage{62}
\item deinit() (in module src.colorama.initialise), \hyperpage{31}
- \item delimiter (src.template.MyTemplate attribute), \hyperpage{63}
+ \item delimiter (src.template.MyTemplate attribute), \hyperpage{64}
\item DIM (src.colorama.ansi.AnsiStyle attribute), \hyperpage{30}
\item dir() (src.Path method), \hyperpage{66}
\item do\_batch\_script\_build() (src.compilation.Builder method), \hyperpage{34}
\item erase\_line() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item erase\_screen() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item error() (src.logger.Logger method), \hyperpage{47}
- \item evaluate() (src.pyconf.Container method), \hyperpage{59}
+ \item evaluate() (src.pyconf.Container method), \hyperpage{60}
\item evaluate() (src.pyconf.Expression method), \hyperpage{60}
\item exists() (src.Path method), \hyperpage{66}
- \item Expression (class in src.pyconf), \hyperpage{59}
+ \item Expression (class in src.pyconf), \hyperpage{60}
\item extract\_params() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
\indexspace
\item feed() (src.ElementTree.XMLTreeBuilder method), \hyperpage{33}
\item FileEnviron (class in src.fileEnviron), \hyperpage{42}
\item FileEnvWriter (class in src.environment), \hyperpage{37}
- \item filterLevel() (src.options.Options method), \hyperpage{48}
- \item filterList2() (src.options.Options method), \hyperpage{48}
+ \item filterLevel() (src.options.Options method), \hyperpage{49}
+ \item filterList2() (src.options.Options method), \hyperpage{49}
\item find() (src.ElementTree.ElementTree method), \hyperpage{33}
\item find\_file\_in\_lpath() (in module src), \hyperpage{67}
- \item find\_node\_by\_attrib() (in module src.xmlManager), \hyperpage{65}
+ \item find\_node\_by\_attrib() (in module src.xmlManager), \hyperpage{66}
\item findall() (src.ElementTree.ElementTree method), \hyperpage{33}
- \item findConfig() (src.pyconf.Reference method), \hyperpage{60}
+ \item findConfig() (src.pyconf.Reference method), \hyperpage{61}
\item findtext() (src.ElementTree.ElementTree method), \hyperpage{33}
\item finish() (src.environment.SalomeEnviron method), \hyperpage{38}
\item finish() (src.fileEnviron.BashFileEnviron method), \hyperpage{40}
- \item finish() (src.fileEnviron.BatFileEnviron method), \hyperpage{40}
- \item finish() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
- \item finish() (src.fileEnviron.FileEnviron method), \hyperpage{42}
+ \item finish() (src.fileEnviron.BatFileEnviron method), \hyperpage{41}
+ \item finish() (src.fileEnviron.ContextFileEnviron method), \hyperpage{42}
+ \item finish() (src.fileEnviron.FileEnviron method), \hyperpage{43}
\item finish() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item flush() (src.logger.Logger method), \hyperpage{47}
- \item flush() (src.pyconf.ConfigOutputStream method), \hyperpage{57}
+ \item flush() (src.pyconf.ConfigOutputStream method), \hyperpage{58}
\item fore() (src.colorama.winterm.WinTerm method), \hyperpage{32}
+ \item format\_color\_exception() (in module src.debug), \hyperpage{36}
+ \item format\_exception() (in module src.debug), \hyperpage{36}
\item FORWARD() (src.colorama.ansi.AnsiCursor method), \hyperpage{30}
\item fromstring() (in module src.ElementTree), \hyperpage{33}
\indexspace
\bigletter G
- \item generate\_launching\_commands() (src.test\_module.Test method), \hyperpage{63}
- \item generate\_script() (src.test\_module.Test method), \hyperpage{63}
- \item get() (src.environment.Environ method), \hyperpage{36}
+ \item generate\_launching\_commands() (src.test\_module.Test method), \hyperpage{64}
+ \item generate\_script() (src.test\_module.Test method), \hyperpage{64}
+ \item get() (src.environment.Environ method), \hyperpage{37}
\item get() (src.environment.SalomeEnviron method), \hyperpage{38}
\item get() (src.fileEnviron.BatFileEnviron method), \hyperpage{41}
- \item get() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
- \item get() (src.fileEnviron.FileEnviron method), \hyperpage{42}
+ \item get() (src.fileEnviron.ContextFileEnviron method), \hyperpage{42}
+ \item get() (src.fileEnviron.FileEnviron method), \hyperpage{43}
\item get() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item get() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
\item get() (src.pyconf.Mapping method), \hyperpage{60}
- \item get\_attrib() (src.xmlManager.ReadXmlFile method), \hyperpage{64}
+ \item get\_attrib() (src.xmlManager.ReadXmlFile method), \hyperpage{65}
\item get\_attrs() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item get\_base\_install\_dir() (in module src.product), \hyperpage{51}
\item get\_base\_path() (in module src), \hyperpage{67}
\item get\_distribution() (in module src.architecture), \hyperpage{34}
\item get\_file\_environ() (in module src.fileEnviron), \hyperpage{46}
\item get\_help() (src.options.Options method), \hyperpage{49}
- \item get\_install\_dir() (in module src.product), \hyperpage{51}
- \item get\_launcher\_name() (in module src), \hyperpage{67}
- \item get\_log\_path() (in module src), \hyperpage{67}
+ \item get\_install\_dir() (in module src.product), \hyperpage{52}
+ \item get\_launcher\_name() (in module src), \hyperpage{68}
+ \item get\_log\_path() (in module src), \hyperpage{68}
\item get\_names() (src.environment.SalomeEnviron method), \hyperpage{38}
\item get\_nb\_proc() (in module src.architecture), \hyperpage{34}
- \item get\_node\_text() (src.xmlManager.ReadXmlFile method), \hyperpage{64}
+ \item get\_node\_text() (src.xmlManager.ReadXmlFile method), \hyperpage{65}
\item get\_position() (src.colorama.winterm.WinTerm method), \hyperpage{32}
- \item get\_product\_components() (in module src.product), \hyperpage{51}
+ \item get\_product\_components() (in module src.product), \hyperpage{52}
\item get\_product\_config() (in module src.product), \hyperpage{52}
\item get\_product\_dependencies() (in module src.product), \hyperpage{52}
\item get\_product\_section() (in module src.product), \hyperpage{52}
- \item get\_products\_infos() (in module src.product), \hyperpage{52}
- \item get\_property\_in\_product\_cfg() (in module src), \hyperpage{67}
+ \item get\_products\_infos() (in module src.product), \hyperpage{53}
+ \item get\_property\_in\_product\_cfg() (in module src), \hyperpage{68}
\item get\_python\_version() (in module src.architecture), \hyperpage{34}
- \item get\_salome\_version() (in module src), \hyperpage{67}
- \item get\_test\_timeout() (src.test\_module.Test method), \hyperpage{63}
- \item get\_tmp\_dir() (src.test\_module.Test method), \hyperpage{63}
- \item get\_tmp\_filename() (in module src), \hyperpage{67}
+ \item get\_salome\_version() (in module src), \hyperpage{68}
+ \item get\_test\_timeout() (src.test\_module.Test method), \hyperpage{64}
+ \item get\_tmp\_dir() (src.test\_module.Test method), \hyperpage{64}
+ \item get\_tmp\_filename() (in module src), \hyperpage{68}
\item get\_user() (in module src.architecture), \hyperpage{34}
\item get\_win32\_calls() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
\item getByPath() (src.pyconf.Config method), \hyperpage{56}
- \item getByPath() (src.pyconf.ConfigList method), \hyperpage{56}
- \item getChar() (src.pyconf.ConfigReader method), \hyperpage{57}
- \item getDetailOption() (src.options.Options method), \hyperpage{48}
+ \item getByPath() (src.pyconf.ConfigList method), \hyperpage{57}
+ \item getChar() (src.pyconf.ConfigReader method), \hyperpage{58}
+ \item getCurrentLogger() (in module src.logger), \hyperpage{47}
+ \item getDefaultLogger() (in module src.logger), \hyperpage{47}
+ \item getDetailOption() (src.options.Options method), \hyperpage{49}
\item getiterator() (src.ElementTree.ElementTree method), \hyperpage{33}
- \item getLocalEnv() (in module src.debug), \hyperpage{35}
+ \item getLocalEnv() (in module src.debug), \hyperpage{36}
\item getroot() (src.ElementTree.ElementTree method), \hyperpage{33}
\item getRootAttrib() (src.xmlManager.ReadXmlFile method), \hyperpage{64}
- \item getStrConfigDbg() (in module src.debug), \hyperpage{35}
+ \item getStrConfigDbg() (in module src.debug), \hyperpage{36}
\item getStrConfigStd() (in module src.debug), \hyperpage{36}
\item getTmpDirDEFAULT() (in module src.test\_module), \hyperpage{64}
- \item getToken() (src.pyconf.ConfigReader method), \hyperpage{57}
- \item git\_extract() (in module src.system), \hyperpage{62}
+ \item getToken() (src.pyconf.ConfigReader method), \hyperpage{58}
+ \item getUnittestLogger() (in module src.logger), \hyperpage{47}
+ \item git\_extract() (in module src.system), \hyperpage{63}
\item GREEN (src.colorama.ansi.AnsiBack attribute), \hyperpage{29}
\item GREEN (src.colorama.ansi.AnsiFore attribute), \hyperpage{30}
\item GREEN (src.colorama.winterm.WinColor attribute), \hyperpage{32}
\item indent() (src.options.Options method), \hyperpage{49}
\item init() (in module src.colorama.initialise), \hyperpage{31}
\item install() (src.compilation.Builder method), \hyperpage{35}
- \item InStream (class in src.debug), \hyperpage{35}
+ \item InStream (class in src.debug), \hyperpage{36}
\item is\_a\_tty() (in module src.colorama.ansitowin32), \hyperpage{31}
- \item is\_defined() (src.environment.Environ method), \hyperpage{36}
+ \item is\_defined() (src.environment.Environ method), \hyperpage{37}
\item is\_defined() (src.environment.SalomeEnviron method), \hyperpage{38}
\item is\_defined() (src.fileEnviron.FileEnviron method), \hyperpage{43}
\item is\_defined() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
\item is\_defined() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
\item is\_stream\_closed() (in module src.colorama.ansitowin32), \hyperpage{31}
\item is\_windows() (in module src.architecture), \hyperpage{34}
+ \item isCurrentLoggerUnittest() (in module src.logger), \hyperpage{48}
\item isdir() (src.Path method), \hyperpage{66}
\item iselement() (in module src.ElementTree), \hyperpage{33}
\item isfile() (src.Path method), \hyperpage{66}
\item islink() (src.Path method), \hyperpage{66}
- \item isWord() (in module src.pyconf), \hyperpage{61}
+ \item isTypeConfig() (in module src.debug), \hyperpage{36}
+ \item isWord() (in module src.pyconf), \hyperpage{62}
\item iteritems() (src.pyconf.Mapping method), \hyperpage{60}
\item iterkeys() (src.pyconf.Mapping method), \hyperpage{60}
\item iterparse (class in src.ElementTree), \hyperpage{33}
\item LIGHTYELLOW\_EX (src.colorama.ansi.AnsiBack attribute), \hyperpage{29}
\item LIGHTYELLOW\_EX (src.colorama.ansi.AnsiFore attribute), \hyperpage{30}
\item list() (src.Path method), \hyperpage{66}
- \item list\_log\_file() (in module src.logger), \hyperpage{47}
+ \item list\_log\_file() (in module src.logger), \hyperpage{48}
\item load() (src.pyconf.Config method), \hyperpage{56}
\item load() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item load\_cfg\_environment() (src.environment.SalomeEnviron method), \hyperpage{38}
+ \item load\_cfg\_environment() (src.environment.SalomeEnviron method), \hyperpage{39}
\item load\_environment() (in module src.environment), \hyperpage{40}
\item location() (src.pyconf.ConfigReader method), \hyperpage{58}
\item log() (src.compilation.Builder method), \hyperpage{35}
\item log\_command() (src.compilation.Builder method), \hyperpage{35}
- \item Logger (class in src.logger), \hyperpage{46}
+ \item Logger (class in src.logger), \hyperpage{47}
\indexspace
\bigletter M
\item MAGENTA (src.colorama.ansi.AnsiFore attribute), \hyperpage{30}
\item MAGENTA (src.colorama.winterm.WinColor attribute), \hyperpage{32}
\item make() (src.compilation.Builder method), \hyperpage{35}
- \item make() (src.Path method), \hyperpage{66}
- \item makePath() (in module src.pyconf), \hyperpage{61}
+ \item make() (src.Path method), \hyperpage{67}
+ \item makePath() (in module src.pyconf), \hyperpage{62}
\item Mapping (class in src.pyconf), \hyperpage{60}
\item match() (src.pyconf.ConfigReader method), \hyperpage{58}
\item merge() (src.pyconf.ConfigMerger method), \hyperpage{57}
\item merge\_dicts() (in module src), \hyperpage{68}
\item mergeMapping() (src.pyconf.ConfigMerger method), \hyperpage{57}
- \item mergeSequence() (src.pyconf.ConfigMerger method), \hyperpage{57}
- \item MyTemplate (class in src.template), \hyperpage{63}
+ \item mergeSequence() (src.pyconf.ConfigMerger method), \hyperpage{58}
+ \item MyTemplate (class in src.template), \hyperpage{64}
\indexspace
\bigletter N
\indexspace
\bigletter O
\item only\_numbers() (in module src), \hyperpage{68}
- \item Options (class in src.options), \hyperpage{48}
+ \item Options (class in src.options), \hyperpage{49}
\item OptResult (class in src.options), \hyperpage{48}
- \item OutStream (class in src.debug), \hyperpage{35}
- \item overwriteKeys() (src.pyconf.ConfigMerger method), \hyperpage{57}
+ \item OutStream (class in src.debug), \hyperpage{36}
+ \item overwriteKeys() (src.pyconf.ConfigMerger method), \hyperpage{58}
\item overwriteMergeResolve() (in module src.pyconf), \hyperpage{62}
\indexspace
\item parse\_args() (src.options.Options method), \hyperpage{49}
\item parse\_date() (in module src), \hyperpage{68}
\item parseFactor() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item parseKeyValuePair() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item parseMapping() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item parseMappingBody() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item parseReference() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item parseScalar() (src.pyconf.ConfigReader method), \hyperpage{58}
- \item parseSequence() (src.pyconf.ConfigReader method), \hyperpage{58}
+ \item parseKeyValuePair() (src.pyconf.ConfigReader method), \hyperpage{59}
+ \item parseMapping() (src.pyconf.ConfigReader method), \hyperpage{59}
+ \item parseMappingBody() (src.pyconf.ConfigReader method), \hyperpage{59}
+ \item parseReference() (src.pyconf.ConfigReader method), \hyperpage{59}
+ \item parseScalar() (src.pyconf.ConfigReader method), \hyperpage{59}
+ \item parseSequence() (src.pyconf.ConfigReader method), \hyperpage{59}
\item parseSuffix() (src.pyconf.ConfigReader method), \hyperpage{59}
\item parseTerm() (src.pyconf.ConfigReader method), \hyperpage{59}
\item parseValue() (src.pyconf.ConfigReader method), \hyperpage{59}
\item Path (class in src), \hyperpage{66}
- \item pattern (src.template.MyTemplate attribute), \hyperpage{63}
+ \item pattern (src.template.MyTemplate attribute), \hyperpage{64}
\item PI() (in module src.ElementTree), \hyperpage{33}
\item pop\_debug() (in module src.debug), \hyperpage{36}
\item POS() (src.colorama.ansi.AnsiCursor method), \hyperpage{30}
\item prepare() (src.compilation.Builder method), \hyperpage{35}
- \item prepare\_testbase() (src.test\_module.Test method), \hyperpage{63}
+ \item prepare\_testbase() (src.test\_module.Test method), \hyperpage{64}
\item prepare\_testbase\_from\_dir() (src.test\_module.Test method), \hyperpage{64}
\item prepare\_testbase\_from\_git() (src.test\_module.Test method), \hyperpage{64}
\item prepare\_testbase\_from\_svn() (src.test\_module.Test method), \hyperpage{64}
\item prepend() (src.environment.Environ method), \hyperpage{37}
- \item prepend() (src.environment.SalomeEnviron method), \hyperpage{38}
+ \item prepend() (src.environment.SalomeEnviron method), \hyperpage{39}
\item prepend() (src.fileEnviron.FileEnviron method), \hyperpage{43}
\item prepend() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
- \item prepend() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
+ \item prepend() (src.fileEnviron.ScreenEnviron method), \hyperpage{46}
\item prepend\_value() (src.environment.Environ method), \hyperpage{37}
- \item prepend\_value() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
+ \item prepend\_value() (src.fileEnviron.ContextFileEnviron method), \hyperpage{42}
\item prepend\_value() (src.fileEnviron.FileEnviron method), \hyperpage{43}
- \item prepend\_value() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
+ \item prepend\_value() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{45}
\item print\_color\_map() (in module src.printcolors), \hyperpage{49}
- \item print\_color\_range() (in module src.printcolors), \hyperpage{49}
- \item print\_help() (src.options.Options method), \hyperpage{49}
+ \item print\_color\_range() (in module src.printcolors), \hyperpage{50}
\item print\_info() (in module src), \hyperpage{68}
- \item print\_value() (in module src.printcolors), \hyperpage{49}
- \item printc() (in module src.printcolors), \hyperpage{49}
+ \item print\_value() (in module src.printcolors), \hyperpage{50}
+ \item printc() (in module src.printcolors), \hyperpage{50}
\item printcError() (in module src.printcolors), \hyperpage{50}
\item printcHeader() (in module src.printcolors), \hyperpage{50}
\item printcHighlight() (in module src.printcolors), \hyperpage{50}
\item printcInfo() (in module src.printcolors), \hyperpage{50}
- \item printcLabel() (in module src.printcolors), \hyperpage{50}
- \item printcSuccess() (in module src.printcolors), \hyperpage{50}
- \item printcWarning() (in module src.printcolors), \hyperpage{50}
+ \item printcLabel() (in module src.printcolors), \hyperpage{51}
+ \item printcSuccess() (in module src.printcolors), \hyperpage{51}
+ \item printcWarning() (in module src.printcolors), \hyperpage{51}
\item ProcessingInstruction() (in module src.ElementTree), \hyperpage{33}
- \item product\_compiles() (in module src.product), \hyperpage{52}
- \item product\_has\_env\_script() (in module src.product), \hyperpage{52}
+ \item product\_compiles() (in module src.product), \hyperpage{53}
+ \item product\_has\_env\_script() (in module src.product), \hyperpage{53}
\item product\_has\_logo() (in module src.product), \hyperpage{53}
\item product\_has\_patches() (in module src.product), \hyperpage{53}
\item product\_has\_salome\_gui() (in module src.product), \hyperpage{53}
\item product\_has\_script() (in module src.product), \hyperpage{53}
\item product\_is\_autotools() (in module src.product), \hyperpage{53}
- \item product\_is\_cmake() (in module src.product), \hyperpage{53}
- \item product\_is\_cpp() (in module src.product), \hyperpage{53}
- \item product\_is\_debug() (in module src.product), \hyperpage{53}
+ \item product\_is\_cmake() (in module src.product), \hyperpage{54}
+ \item product\_is\_cpp() (in module src.product), \hyperpage{54}
+ \item product\_is\_debug() (in module src.product), \hyperpage{54}
\item product\_is\_dev() (in module src.product), \hyperpage{54}
\item product\_is\_fixed() (in module src.product), \hyperpage{54}
\item product\_is\_generated() (in module src.product), \hyperpage{54}
\item product\_is\_mpi() (in module src.product), \hyperpage{54}
\item product\_is\_native() (in module src.product), \hyperpage{54}
- \item product\_is\_salome() (in module src.product), \hyperpage{54}
- \item product\_is\_smesh\_plugin() (in module src.product), \hyperpage{54}
- \item product\_is\_vcs() (in module src.product), \hyperpage{54}
- \item product\_is\_verbose() (in module src.product), \hyperpage{54}
+ \item product\_is\_salome() (in module src.product), \hyperpage{55}
+ \item product\_is\_smesh\_plugin() (in module src.product), \hyperpage{55}
+ \item product\_is\_vcs() (in module src.product), \hyperpage{55}
+ \item product\_is\_verbose() (in module src.product), \hyperpage{55}
\item push\_debug() (in module src.debug), \hyperpage{36}
\item put\_initial\_xml\_fields() (src.logger.Logger method), \hyperpage{47}
\item put\_txt\_log\_in\_appli\_log\_dir() (src.compilation.Builder method), \hyperpage{35}
\indexspace
\bigletter R
- \item read() (src.pyconf.ConfigInputStream method), \hyperpage{56}
+ \item read() (src.pyconf.ConfigInputStream method), \hyperpage{57}
\item read\_config\_from\_a\_file() (in module src), \hyperpage{68}
\item read\_results() (src.test\_module.Test method), \hyperpage{64}
- \item readline() (src.pyconf.ConfigInputStream method), \hyperpage{56}
- \item readlink() (src.Path method), \hyperpage{66}
+ \item readline() (src.pyconf.ConfigInputStream method), \hyperpage{57}
+ \item readlink() (src.Path method), \hyperpage{67}
\item ReadXmlFile (class in src.xmlManager), \hyperpage{64}
\item RED (src.colorama.ansi.AnsiBack attribute), \hyperpage{29}
\item RED (src.colorama.ansi.AnsiFore attribute), \hyperpage{30}
\item RED (src.colorama.winterm.WinColor attribute), \hyperpage{32}
- \item Reference (class in src.pyconf), \hyperpage{60}
+ \item Reference (class in src.pyconf), \hyperpage{61}
\item reinit() (in module src.colorama.initialise), \hyperpage{31}
\item remove\_item\_from\_list() (in module src), \hyperpage{68}
- \item removeNamespace() (src.pyconf.Config method), \hyperpage{56}
- \item replace\_in\_file() (in module src), \hyperpage{68}
+ \item removeNamespace() (src.pyconf.Config method), \hyperpage{57}
+ \item replace\_in\_file() (in module src), \hyperpage{69}
\item RESET (src.colorama.ansi.AnsiBack attribute), \hyperpage{29}
\item RESET (src.colorama.ansi.AnsiFore attribute), \hyperpage{30}
\item RESET\_ALL (src.colorama.ansi.AnsiStyle attribute), \hyperpage{30}
\item reset\_all() (in module src.colorama.initialise), \hyperpage{31}
\item reset\_all() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
\item reset\_all() (src.colorama.winterm.WinTerm method), \hyperpage{32}
- \item resolve() (src.pyconf.Reference method), \hyperpage{60}
- \item rm() (src.Path method), \hyperpage{66}
+ \item resolve() (src.pyconf.Reference method), \hyperpage{61}
+ \item rm() (src.Path method), \hyperpage{67}
\item run\_all\_tests() (src.test\_module.Test method), \hyperpage{64}
- \item run\_env\_script() (src.environment.SalomeEnviron method), \hyperpage{38}
- \item run\_env\_script() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
+ \item run\_env\_script() (src.environment.SalomeEnviron method), \hyperpage{39}
+ \item run\_env\_script() (src.fileEnviron.ScreenEnviron method), \hyperpage{46}
\item run\_grid\_tests() (src.test\_module.Test method), \hyperpage{64}
\item run\_script() (src.test\_module.Test method), \hyperpage{64}
\item run\_session\_tests() (src.test\_module.Test method), \hyperpage{64}
\indexspace
\bigletter S
- \item SalomeEnviron (class in src.environment), \hyperpage{37}
- \item SatException, \hyperpage{66}
+ \item SalomeEnviron (class in src.environment), \hyperpage{38}
+ \item SatException, \hyperpage{67}
\item saveConfigDbg() (in module src.debug), \hyperpage{36}
\item saveConfigStd() (in module src.debug), \hyperpage{36}
- \item ScreenEnviron (class in src.fileEnviron), \hyperpage{44}
+ \item ScreenEnviron (class in src.fileEnviron), \hyperpage{45}
\item search\_known\_errors() (src.test\_module.Test method), \hyperpage{64}
- \item Sequence (class in src.pyconf), \hyperpage{60}
+ \item sendMessageToCurrentLogger() (in module src.logger), \hyperpage{48}
+ \item Sequence (class in src.pyconf), \hyperpage{61}
\item Sequence.SeqIter (class in src.pyconf), \hyperpage{61}
\item set() (src.environment.Environ method), \hyperpage{37}
\item set() (src.environment.SalomeEnviron method), \hyperpage{39}
\item set() (src.fileEnviron.BashFileEnviron method), \hyperpage{40}
\item set() (src.fileEnviron.BatFileEnviron method), \hyperpage{41}
- \item set() (src.fileEnviron.ContextFileEnviron method), \hyperpage{41}
+ \item set() (src.fileEnviron.ContextFileEnviron method), \hyperpage{42}
\item set() (src.fileEnviron.FileEnviron method), \hyperpage{43}
- \item set() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{44}
- \item set() (src.fileEnviron.ScreenEnviron method), \hyperpage{45}
+ \item set() (src.fileEnviron.LauncherFileEnviron method), \hyperpage{45}
+ \item set() (src.fileEnviron.ScreenEnviron method), \hyperpage{46}
\item set\_a\_product() (src.environment.SalomeEnviron method), \hyperpage{39}
\item set\_application\_env() (src.environment.SalomeEnviron method), \hyperpage{39}
\item set\_attrs() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item set\_cpp\_env() (src.environment.SalomeEnviron method), \hyperpage{39}
\item set\_cursor\_position() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item set\_full\_environ() (src.environment.SalomeEnviron method), \hyperpage{39}
- \item set\_products() (src.environment.SalomeEnviron method), \hyperpage{39}
- \item set\_python\_libdirs() (src.environment.SalomeEnviron method), \hyperpage{39}
- \item set\_salome\_generic\_product\_env() (src.environment.SalomeEnviron method), \hyperpage{39}
- \item set\_salome\_minimal\_product\_env() (src.environment.SalomeEnviron method), \hyperpage{39}
+ \item set\_products() (src.environment.SalomeEnviron method), \hyperpage{40}
+ \item set\_python\_libdirs() (src.environment.SalomeEnviron method), \hyperpage{40}
+ \item set\_salome\_generic\_product\_env() (src.environment.SalomeEnviron method), \hyperpage{40}
+ \item set\_salome\_minimal\_product\_env() (src.environment.SalomeEnviron method), \hyperpage{40}
\item set\_title() (in module src.colorama.ansi), \hyperpage{30}
\item set\_title() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item SetConsoleTextAttribute() (in module src.colorama.win32), \hyperpage{32}
- \item setPath() (src.pyconf.Container method), \hyperpage{59}
+ \item setCurrentLogger() (in module src.logger), \hyperpage{48}
+ \item setPath() (src.pyconf.Container method), \hyperpage{60}
\item setStream() (src.pyconf.ConfigReader method), \hyperpage{59}
\item Shell (class in src.environment), \hyperpage{40}
\item should\_wrap() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
- \item show\_command\_log() (in module src.logger), \hyperpage{47}
+ \item show\_command\_log() (in module src.logger), \hyperpage{48}
\item show\_in\_editor() (in module src.system), \hyperpage{63}
\item show\_progress() (in module src.fork), \hyperpage{46}
- \item smartcopy() (src.Path method), \hyperpage{66}
+ \item smartcopy() (src.Path method), \hyperpage{67}
\item special\_path\_separator() (in module src.fileEnviron), \hyperpage{46}
\item src (module), \hyperpage{66}
\item src.architecture (module), \hyperpage{34}
\item src.environment (module), \hyperpage{36}
\item src.fileEnviron (module), \hyperpage{40}
\item src.fork (module), \hyperpage{46}
- \item src.logger (module), \hyperpage{46}
+ \item src.logger (module), \hyperpage{47}
\item src.options (module), \hyperpage{48}
\item src.printcolors (module), \hyperpage{49}
- \item src.product (module), \hyperpage{50}
+ \item src.product (module), \hyperpage{51}
\item src.pyconf (module), \hyperpage{55}
\item src.system (module), \hyperpage{62}
- \item src.template (module), \hyperpage{63}
- \item src.test\_module (module), \hyperpage{63}
+ \item src.template (module), \hyperpage{64}
+ \item src.test\_module (module), \hyperpage{64}
\item src.xmlManager (module), \hyperpage{64}
\item start() (src.ElementTree.TreeBuilder method), \hyperpage{33}
\item StreamWrapper (class in src.colorama.ansitowin32), \hyperpage{31}
\item style() (src.colorama.winterm.WinTerm method), \hyperpage{32}
\item SubElement() (in module src.ElementTree), \hyperpage{33}
- \item substitute() (in module src.template), \hyperpage{63}
+ \item substitute() (in module src.template), \hyperpage{64}
\item svn\_extract() (in module src.system), \hyperpage{63}
- \item symlink() (src.Path method), \hyperpage{66}
+ \item symlink() (src.Path method), \hyperpage{67}
\indexspace
\bigletter T
- \item Test (class in src.test\_module), \hyperpage{63}
- \item timedelta\_total\_seconds() (in module src.logger), \hyperpage{47}
+ \item Test (class in src.test\_module), \hyperpage{64}
+ \item timedelta\_total\_seconds() (in module src.logger), \hyperpage{48}
\item tofix() (in module src.debug), \hyperpage{36}
\item tostring() (in module src.ElementTree), \hyperpage{33}
\item TreeBuilder (class in src.ElementTree), \hyperpage{33}
\item write() (src.ElementTree.ElementTree method), \hyperpage{33}
\item write() (src.fileEnviron.ScreenEnviron method), \hyperpage{46}
\item write() (src.logger.Logger method), \hyperpage{47}
- \item write() (src.pyconf.ConfigOutputStream method), \hyperpage{57}
+ \item write() (src.pyconf.ConfigOutputStream method), \hyperpage{58}
\item write\_and\_convert() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
\item write\_back() (in module src.fork), \hyperpage{46}
\item write\_cfgForPy\_file() (src.environment.FileEnvWriter method), \hyperpage{37}
- \item write\_env\_file() (src.environment.FileEnvWriter method), \hyperpage{37}
+ \item write\_env\_file() (src.environment.FileEnvWriter method), \hyperpage{38}
\item write\_plain\_text() (src.colorama.ansitowin32.AnsiToWin32 method), \hyperpage{31}
- \item write\_report() (in module src.xmlManager), \hyperpage{65}
+ \item write\_report() (in module src.xmlManager), \hyperpage{66}
\item write\_test\_margin() (src.test\_module.Test method), \hyperpage{64}
\item write\_tree() (src.xmlManager.XmlLogFile method), \hyperpage{65}
- \item writeToStream() (src.pyconf.Container method), \hyperpage{59}
- \item writeToStream() (src.pyconf.Mapping method), \hyperpage{60}
+ \item writeToStream() (src.pyconf.Container method), \hyperpage{60}
+ \item writeToStream() (src.pyconf.Mapping method), \hyperpage{61}
\item writeToStream() (src.pyconf.Sequence method), \hyperpage{61}
- \item writeValue() (src.pyconf.Container method), \hyperpage{59}
+ \item writeValue() (src.pyconf.Container method), \hyperpage{60}
\indexspace
\bigletter X
\item XML() (in module src.ElementTree), \hyperpage{33}
- \item XmlLogFile (class in src.xmlManager), \hyperpage{64}
+ \item XmlLogFile (class in src.xmlManager), \hyperpage{65}
\item XMLTreeBuilder (class in src.ElementTree), \hyperpage{33}
\indexspace
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) (preloaded format=pdflatex 2018.4.13) 19 JUN 2018 11:14
+This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) (preloaded format=pdflatex 2018.4.13) 26 JUN 2018 15:51
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
[]
[34] [35] [36]
-Underfull \hbox (badness 10000) in paragraph at lines 3174--3174
+Underfull \hbox (badness 10000) in paragraph at lines 3197--3197
[]\T1/ptm/m/it/10 filename\T1/ptm/m/n/10 , \T1/ptm/m/it/10 ad-di-tional_env={}\
T1/ptm/m/n/10 , \T1/ptm/m/it/10 for_package=None\T1/ptm/m/n/10 ,
[]
-[37] [38] [39] [40] [41] [42] [43] [44] [45]
-Underfull \hbox (badness 10000) in paragraph at lines 4693--4693
-[]\T1/ptm/m/it/10 config\T1/ptm/m/n/10 , \T1/ptm/m/it/10 silent_sysstd=False\T1
-/ptm/m/n/10 , \T1/ptm/m/it/10 all_in_terminal=False\T1/ptm/m/n/10 , \T1/ptm/m/i
-t/10 mi-
+[37] [38] [39] [40] [41] [42] [43] [44] [45] [46]
+Underfull \hbox (badness 10000) in paragraph at lines 4716--4716
+[]\T1/ptm/m/it/10 config=None\T1/ptm/m/n/10 , \T1/ptm/m/it/10 silent_sysstd=Fal
+se\T1/ptm/m/n/10 , \T1/ptm/m/it/10 all_in_terminal=False\T1/ptm/m/n/10 , \T1/pt
+m/m/it/10 mi-
[]
-[46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60]
-Underfull \hbox (badness 10000) in paragraph at lines 6933--6937
+[47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61]
+Underfull \hbox (badness 10000) in paragraph at lines 6991--6995
[]\T1/ptm/m/n/10 Examples: makePath(`', `suf-fix') -> `suf-fix' makePath(`prefi
x', `suf-fix') -> `pre-fix.suffix'
[]
-[61] [62]
+[62] [63]
LaTeX Font Info: Font shape `TS1/pcr/bx/n' in size <10> not available
(Font) Font shape `TS1/pcr/b/n' tried instead on input line 1.
- [63] [64]
-Underfull \hbox (badness 10000) in paragraph at lines 7495--7497
+ [64] [65]
+Underfull \hbox (badness 10000) in paragraph at lines 7553--7555
[]\T1/ptm/m/n/10 its at-tributes {key :
[]
-[65] [66] [67] [68]
-Chapter 5.
-[69
+[66] [67] [68] [69] [70
-] [70
+]
+Chapter 5.
+[71] [72
-] [71
+] [73
-] (./salomeTools.ind [72
+] (./salomeTools.ind [74
]
\T1/ptm/m/n/10 (src.colorama.winterm.WinStyle at-tribute),
[]
-[73
+[75
]
Overfull \hbox (17.33415pt too wide) in paragraph at lines 79--80
[]\T1/ptm/m/n/10 extract_params() (src.colorama.ansitowin32.AnsiToWin32
[]
-[74]
-Underfull \hbox (badness 10000) in paragraph at lines 223--224
+[76]
+Underfull \hbox (badness 10000) in paragraph at lines 225--226
[]\T1/ptm/m/n/10 get_node_text() (src.xmlManager.ReadXmlFile
[]
-Underfull \hbox (badness 10000) in paragraph at lines 224--225
+Underfull \hbox (badness 10000) in paragraph at lines 226--227
[]\T1/ptm/m/n/10 get_position() (src.colorama.winterm.WinTerm
[]
-Overfull \hbox (16.98375pt too wide) in paragraph at lines 237--238
+Overfull \hbox (16.98375pt too wide) in paragraph at lines 239--240
[]\T1/ptm/m/n/10 get_win32_calls() (src.colorama.ansitowin32.AnsiToWin32
[]
-Underfull \hbox (badness 10000) in paragraph at lines 245--246
+Underfull \hbox (badness 10000) in paragraph at lines 249--250
[]\T1/ptm/m/n/10 getRootAttrib() (src.xmlManager.ReadXmlFile
[]
-
-Underfull \hbox (badness 10000) in paragraph at lines 273--274
+[77]
+Underfull \hbox (badness 10000) in paragraph at lines 278--279
[]\T1/ptm/m/n/10 is_defined() (src.fileEnviron.LauncherFileEnviron
[]
-[75]
-Underfull \hbox (badness 10000) in paragraph at lines 275--276
+
+Underfull \hbox (badness 10000) in paragraph at lines 280--281
[]\T1/ptm/m/n/10 is_stream_closed() (in mod-ule
[]
-Underfull \hbox (badness 5260) in paragraph at lines 295--296
+Underfull \hbox (badness 5260) in paragraph at lines 302--303
[]\T1/ptm/m/n/10 LIGHTBLACK_EX (src.colorama.ansi.AnsiFore at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 296--297
+Underfull \hbox (badness 10000) in paragraph at lines 303--304
[]\T1/ptm/m/n/10 LIGHTBLUE_EX (src.colorama.ansi.AnsiBack at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 297--298
+Underfull \hbox (badness 10000) in paragraph at lines 304--305
[]\T1/ptm/m/n/10 LIGHTBLUE_EX (src.colorama.ansi.AnsiFore at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 298--299
+Underfull \hbox (badness 10000) in paragraph at lines 305--306
[]\T1/ptm/m/n/10 LIGHTCYAN_EX (src.colorama.ansi.AnsiBack
[]
-Underfull \hbox (badness 10000) in paragraph at lines 299--300
+Underfull \hbox (badness 10000) in paragraph at lines 306--307
[]\T1/ptm/m/n/10 LIGHTCYAN_EX (src.colorama.ansi.AnsiFore at-
[]
-Underfull \hbox (badness 5490) in paragraph at lines 301--302
+Underfull \hbox (badness 5490) in paragraph at lines 308--309
[]\T1/ptm/m/n/10 LIGHTGREEN_EX (src.colorama.ansi.AnsiFore at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 302--303
+Underfull \hbox (badness 10000) in paragraph at lines 309--310
[]\T1/ptm/m/n/10 LIGHTMAGENTA_EX (src.colorama.ansi.AnsiBack
[]
-Underfull \hbox (badness 10000) in paragraph at lines 303--304
+Underfull \hbox (badness 10000) in paragraph at lines 310--311
[]\T1/ptm/m/n/10 LIGHTMAGENTA_EX (src.colorama.ansi.AnsiFore
[]
-Underfull \hbox (badness 10000) in paragraph at lines 304--305
+Underfull \hbox (badness 10000) in paragraph at lines 311--312
[]\T1/ptm/m/n/10 LIGHTRED_EX (src.colorama.ansi.AnsiBack at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 305--306
+Underfull \hbox (badness 10000) in paragraph at lines 312--313
[]\T1/ptm/m/n/10 LIGHTRED_EX (src.colorama.ansi.AnsiFore at-
[]
-Underfull \hbox (badness 7273) in paragraph at lines 307--308
+Underfull \hbox (badness 7273) in paragraph at lines 314--315
[]\T1/ptm/m/n/10 LIGHTWHITE_EX (src.colorama.ansi.AnsiFore at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 314--315
+Underfull \hbox (badness 10000) in paragraph at lines 321--322
[]\T1/ptm/m/n/10 load_cfg_environment()
[]
-Underfull \hbox (badness 10000) in paragraph at lines 314--315
+Underfull \hbox (badness 10000) in paragraph at lines 321--322
\T1/ptm/m/n/10 (src.environment.SalomeEnviron method),
[]
-Underfull \hbox (badness 10000) in paragraph at lines 325--326
+Underfull \hbox (badness 10000) in paragraph at lines 332--333
[]\T1/ptm/m/n/10 MAGENTA (src.colorama.winterm.WinColor at-
[]
-Underfull \hbox (badness 10000) in paragraph at lines 360--361
+Underfull \hbox (badness 10000) in paragraph at lines 367--368
[]\T1/ptm/m/n/10 parseKeyValuePair() (src.pyconf.ConfigReader
[]
-
-Underfull \hbox (badness 10000) in paragraph at lines 362--363
+[78]
+Underfull \hbox (badness 10000) in paragraph at lines 369--370
[]\T1/ptm/m/n/10 parseMappingBody() (src.pyconf.ConfigReader
[]
-[76]
-Underfull \hbox (badness 10000) in paragraph at lines 376--377
+
+Underfull \hbox (badness 10000) in paragraph at lines 383--384
[]\T1/ptm/m/n/10 prepare_testbase_from_dir() (src.test_module.Test
[]
-Underfull \hbox (badness 10000) in paragraph at lines 377--378
+Underfull \hbox (badness 10000) in paragraph at lines 384--385
[]\T1/ptm/m/n/10 prepare_testbase_from_git() (src.test_module.Test
[]
-Underfull \hbox (badness 10000) in paragraph at lines 378--379
+Underfull \hbox (badness 10000) in paragraph at lines 385--386
[]\T1/ptm/m/n/10 prepare_testbase_from_svn() (src.test_module.Test
[]
-Underfull \hbox (badness 10000) in paragraph at lines 382--383
+Underfull \hbox (badness 10000) in paragraph at lines 389--390
[]\T1/ptm/m/n/10 prepend() (src.fileEnviron.LauncherFileEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 385--386
+Underfull \hbox (badness 10000) in paragraph at lines 392--393
[]\T1/ptm/m/n/10 prepend_value() (src.fileEnviron.ContextFileEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 423--424
+Underfull \hbox (badness 10000) in paragraph at lines 429--430
[]\T1/ptm/m/n/10 put_txt_log_in_appli_log_dir()
[]
-Underfull \hbox (badness 10000) in paragraph at lines 449--450
+Underfull \hbox (badness 10000) in paragraph at lines 455--456
[]\T1/ptm/m/n/10 reset_all() (src.colorama.ansitowin32.AnsiToWin32
[]
-Underfull \hbox (badness 10000) in paragraph at lines 454--455
+Underfull \hbox (badness 10000) in paragraph at lines 460--461
[]\T1/ptm/m/n/10 run_env_script() (src.environment.SalomeEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 455--456
+Underfull \hbox (badness 10000) in paragraph at lines 461--462
[]\T1/ptm/m/n/10 run_env_script() (src.fileEnviron.ScreenEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 459--460
+Underfull \hbox (badness 10000) in paragraph at lines 465--466
[]\T1/ptm/m/n/10 run_simple_env_script()
[]
-Underfull \hbox (badness 10000) in paragraph at lines 459--460
+Underfull \hbox (badness 10000) in paragraph at lines 465--466
\T1/ptm/m/n/10 (src.environment.SalomeEnviron method),
[]
-[77]
-Underfull \hbox (badness 10000) in paragraph at lines 481--482
+[79]
+Underfull \hbox (badness 10000) in paragraph at lines 477--478
+[]\T1/ptm/m/n/10 sendMessageToCurrentLogger() (in mod-ule
+ []
+
+
+Underfull \hbox (badness 10000) in paragraph at lines 488--489
[]\T1/ptm/m/n/10 set_a_product() (src.environment.SalomeEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 484--485
+Underfull \hbox (badness 10000) in paragraph at lines 491--492
[]\T1/ptm/m/n/10 set_console() (src.colorama.winterm.WinTerm
[]
-Underfull \hbox (badness 10000) in paragraph at lines 485--486
+Underfull \hbox (badness 10000) in paragraph at lines 492--493
[]\T1/ptm/m/n/10 set_cpp_env() (src.environment.SalomeEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 487--488
+Underfull \hbox (badness 10000) in paragraph at lines 494--495
[]\T1/ptm/m/n/10 set_full_environ() (src.environment.SalomeEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 488--489
+Underfull \hbox (badness 10000) in paragraph at lines 495--496
[]\T1/ptm/m/n/10 set_products() (src.environment.SalomeEnviron
[]
-Underfull \hbox (badness 6445) in paragraph at lines 489--490
+Underfull \hbox (badness 6445) in paragraph at lines 496--497
[]\T1/ptm/m/n/10 set_python_libdirs() (src.environment.SalomeEnviron
[]
-Underfull \hbox (badness 10000) in paragraph at lines 490--491
+Underfull \hbox (badness 10000) in paragraph at lines 497--498
[]\T1/ptm/m/n/10 set_salome_generic_product_env()
[]
-Underfull \hbox (badness 10000) in paragraph at lines 490--491
+Underfull \hbox (badness 10000) in paragraph at lines 497--498
\T1/ptm/m/n/10 (src.environment.SalomeEnviron method),
[]
-Underfull \hbox (badness 10000) in paragraph at lines 491--492
+Underfull \hbox (badness 10000) in paragraph at lines 498--499
[]\T1/ptm/m/n/10 set_salome_minimal_product_env()
[]
-Underfull \hbox (badness 10000) in paragraph at lines 491--492
+Underfull \hbox (badness 10000) in paragraph at lines 498--499
\T1/ptm/m/n/10 (src.environment.SalomeEnviron method),
[]
-Underfull \hbox (badness 10000) in paragraph at lines 494--495
+Underfull \hbox (badness 10000) in paragraph at lines 501--502
[]\T1/ptm/m/n/10 SetConsoleTextAttribute() (in mod-ule
[]
-Overfull \hbox (3.09415pt too wide) in paragraph at lines 498--499
+Overfull \hbox (3.09415pt too wide) in paragraph at lines 506--507
[]\T1/ptm/m/n/10 should_wrap() (src.colorama.ansitowin32.AnsiToWin32
[]
-Underfull \hbox (badness 10000) in paragraph at lines 559--560
+Underfull \hbox (badness 10000) in paragraph at lines 567--568
[]\T1/ptm/m/n/10 write() (src.colorama.ansitowin32.AnsiToWin32
[]
-Underfull \hbox (badness 10000) in paragraph at lines 560--561
+Underfull \hbox (badness 10000) in paragraph at lines 568--569
[]\T1/ptm/m/n/10 write() (src.colorama.ansitowin32.StreamWrapper
[]
-
-Overfull \hbox (25.864pt too wide) in paragraph at lines 565--566
+[80]
+Overfull \hbox (25.864pt too wide) in paragraph at lines 573--574
[]\T1/ptm/m/n/10 write_and_convert() (src.colorama.ansitowin32.AnsiToWin32
[]
-[78]
-Underfull \hbox (badness 10000) in paragraph at lines 568--569
+
+Underfull \hbox (badness 10000) in paragraph at lines 576--577
[]\T1/ptm/m/n/10 write_env_file() (src.environment.FileEnvWriter
[]
-Overfull \hbox (16.8337pt too wide) in paragraph at lines 569--570
+Overfull \hbox (16.8337pt too wide) in paragraph at lines 577--578
[]\T1/ptm/m/n/10 write_plain_text() (src.colorama.ansitowin32.AnsiToWin32
[]
-[79
+[81
])
-Package atveryend Info: Empty hook `BeforeClearDocument' on input line 8022.
-Package atveryend Info: Empty hook `AfterLastShipout' on input line 8022.
+Package atveryend Info: Empty hook `BeforeClearDocument' on input line 8080.
+Package atveryend Info: Empty hook `AfterLastShipout' on input line 8080.
(./salomeTools.aux)
-Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 8022.
-Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 8022.
+Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 8080.
+Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 8080.
Package rerunfilecheck Info: File `salomeTools.out' has not changed.
-(rerunfilecheck) Checksum: C17A5699956F0A7FE0D4242598FFB5FE;3075.
-Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 8022.
+(rerunfilecheck) Checksum: 101E36BBBDB8D120FE7A2C74AB3C41F0;3075.
+Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 8080.
)
Here is how much of TeX's memory you used:
- 15051 strings out of 492982
- 234938 string characters out of 6124607
- 346000 words of memory out of 5000000
- 17564 multiletter control sequences out of 15000+600000
+ 15069 strings out of 492982
+ 235454 string characters out of 6124607
+ 346380 words of memory out of 5000000
+ 17572 multiletter control sequences out of 15000+600000
64980 words of font info for 97 fonts, out of 8000000 for 9000
1142 hyphenation exceptions out of 8191
- 37i,12n,45p,550b,637s stack positions out of 5000i,500n,10000p,200000b,80000s
+ 37i,12n,45p,550b,639s stack positions out of 5000i,500n,10000p,200000b,80000s
{/data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts/enc/dvips/base/8r.
enc}</data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts/type1/public/ams
fonts/cm/cmmi5.pfb></data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts/t
urw/times/utmb8a.pfb></data/tmplgls/wambeke/share/texlive/2017/texmf-dist/fonts
/type1/urw/times/utmr8a.pfb></data/tmplgls/wambeke/share/texlive/2017/texmf-dis
t/fonts/type1/urw/times/utmri8a.pfb>
-Output written on salomeTools.pdf (83 pages, 695959 bytes).
+Output written on salomeTools.pdf (85 pages, 699075 bytes).
PDF statistics:
- 1902 PDF objects out of 2073 (max. 8388607)
- 1781 compressed objects within 18 object streams
- 713 named destinations out of 1000 (max. 500000)
+ 1931 PDF objects out of 2073 (max. 8388607)
+ 1807 compressed objects within 19 object streams
+ 723 named destinations out of 1000 (max. 500000)
218 words of extra memory for PDF output out of 10000 (max. 10000000)
\BOOKMARK [1][-]{section.4.1}{\376\377\000s\000r\000c}{chapter.4}% 20
\BOOKMARK [0][-]{chapter.5}{\376\377\000R\000e\000l\000e\000a\000s\000e\000\040\000N\000o\000t\000e\000s}{}% 21
\BOOKMARK [1][-]{section.5.1}{\376\377\000R\000e\000l\000e\000a\000s\000e\000\040\000n\000o\000t\000e\000s}{chapter.5}% 22
-\BOOKMARK [0][-]{section*.538}{\376\377\000P\000y\000t\000h\000o\000n\000\040\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 23
-\BOOKMARK [0][-]{section*.539}{\376\377\000I\000n\000d\000e\000x}{}% 24
+\BOOKMARK [0][-]{section*.546}{\376\377\000P\000y\000t\000h\000o\000n\000\040\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 23
+\BOOKMARK [0][-]{section*.547}{\376\377\000I\000n\000d\000e\000x}{}% 24
\title{salomeTools Documentation}
-\date{Jun 19, 2018}
+\date{Jun 26, 2018}
\release{5.0.0dev}
\author{CEA DEN/DANS/DM2S/STMF/LGLS}
\newcommand{\sphinxlogo}{\vbox{}}
\subsection{Usage}
\label{\detokenize{commands/doc:usage}}\begin{itemize}
\item {}
-Show (in a web browser) the sat documentation:
+Show (in a web browser) the sat documentation in format xml/html:
\fvset{hllines={, ,}}%
\begin{sphinxVerbatim}[commandchars=\\\{\}]
-\PYG{n}{sat} \PYG{n}{doc} \PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{n}{html}
+\PYG{n}{sat} \PYG{n}{doc} \PYG{o}{\PYGZhy{}}\PYG{o}{\PYGZhy{}}\PYG{n}{xml}
\end{sphinxVerbatim}
\item {}
\subsubsection{src.debug module}
\label{\detokenize{commands/apidoc/src:module-src.debug}}\label{\detokenize{commands/apidoc/src:src-debug-module}}\index{src.debug (module)}
-This file assume DEBUG functionalities use
-\begin{itemize}
-\item {}
-print debug messages in sys.stderr for salomeTools
-
-\item {}
-show pretty print debug representation from instances of SAT classes
-(pretty print src.pyconf.Config), and python dict/list etc. (as ‘aVariable’)
-
-\end{itemize}
-
-WARNING: obviously supposedly show messages in SAT development phase, not production
-
-usage:
-\textgreater{}\textgreater{} import debug as DBG
-\textgreater{}\textgreater{} DBG.write(“aTitle”, aVariable) \# not shown in production
-\textgreater{}\textgreater{} DBG.write(“aTitle”, aVariable, True) \# unconditionaly shown (as show=True)
-
-to set show message as development phase:
-\textgreater{}\textgreater{} DBG.push\_debug(True)
-
-to set no show message as production phase:
-\textgreater{}\textgreater{} DBG.push\_debug(False)
+This file assume DEBUG functionalities use.
+Print salomeTools debug messages in sys.stderr.
+Show pretty print debug representation from instances of SAT classes
+(pretty print src.pyconf.Config)
-to set show message temporary as development phase, only in a method:
-\textgreater{}\textgreater{} def aMethodToDebug(…):
-\textgreater{}\textgreater{} DBG.push\_debug(True) \#force show as appended status
-\textgreater{}\textgreater{} etc. method code with some DBG.write()
-\textgreater{}\textgreater{} DBG.pop\_debug() \#restore previous status (show or not show)
-\textgreater{}\textgreater{} return
-
-to set a message for future fix, as temporary problem to not forget:
-DBG.tofix(“aTitle”, aVariable, True/False) \#True/False in production shown, or not
-
-in command line interface you could redirect stderr to file ‘myDebug.log’:
-\textgreater{}\textgreater{} sat compile … 2\textgreater{} myDebug.log \# only stderr
-\textgreater{}\textgreater{} sat compile … \&\textgreater{} myDebug.log \# stdout and stderr
+\begin{DUlineblock}{0em}
+\item[] Warning: supposedly show messages in SAT development phase, not production
+\item[]
+\item[] Usage:
+\item[] \textgreater{}\textgreater{} import debug as DBG
+\item[] \textgreater{}\textgreater{} DBG.write(“aTitle”, aVariable) \# not shown in production
+\item[] \textgreater{}\textgreater{} DBG.write(“aTitle”, aVariable, True) \# unconditionaly shown (as show=True)
+\item[]
+\item[] to set show message as development phase:
+\item[] \textgreater{}\textgreater{} DBG.push\_debug(True)
+\item[]
+\item[] to set no show message as production phase:
+\item[] \textgreater{}\textgreater{} DBG.push\_debug(False)
+\item[]
+\item[] to set show message temporary as development phase, only in a method:
+\item[] \textgreater{}\textgreater{} def aMethodToDebug(…):
+\item[] \textgreater{}\textgreater{} DBG.push\_debug(True) \#force show as appended status
+\item[] \textgreater{}\textgreater{} etc. method code with some DBG.write()
+\item[] \textgreater{}\textgreater{} DBG.pop\_debug() \#restore previous status (show or not show)
+\item[] \textgreater{}\textgreater{} return
+\item[]
+\item[] to set a message for future fix, as temporary problem to not forget:
+\item[] DBG.tofix(“aTitle”, aVariable, True/False) \#True/False in production shown, or not
+\item[]
+\item[] in command line interface you could redirect stderr to file ‘myDebug.log’:
+\item[] \textgreater{}\textgreater{} sat compile … 2\textgreater{} myDebug.log \# only stderr
+\item[] \textgreater{}\textgreater{} sat compile … \&\textgreater{} myDebug.log \# stdout and stderr
+\end{DUlineblock}
\index{InStream (class in src.debug)}
\begin{fulllineitems}
\end{fulllineitems}
+\end{fulllineitems}
+
+\index{format\_color\_exception() (in module src.debug)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.debug.format_color_exception}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.debug.}}\sphinxbfcode{\sphinxupquote{format\_color\_exception}}}{\emph{msg}, \emph{limit=None}, \emph{trace=None}}{}
+Format a stack trace and the exception information.
+as traceback.format\_exception(), with color
+with traceback only if (\_debug) or (DBG.\_user in DBG.\_developpers)
+
+\end{fulllineitems}
+
+\index{format\_exception() (in module src.debug)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.debug.format_exception}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.debug.}}\sphinxbfcode{\sphinxupquote{format\_exception}}}{\emph{msg}, \emph{limit=None}, \emph{trace=None}}{}
+Format a stack trace and the exception information.
+as traceback.format\_exception(), without color
+with traceback only if (\_debug) or (DBG.\_user in DBG.\_developpers)
+
\end{fulllineitems}
\index{getLocalEnv() (in module src.debug)}
\end{fulllineitems}
+\index{isTypeConfig() (in module src.debug)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.debug.isTypeConfig}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.debug.}}\sphinxbfcode{\sphinxupquote{isTypeConfig}}}{\emph{var}}{}
+To know if var is instance from Config/pyconf
+
+\end{fulllineitems}
+
\index{pop\_debug() (in module src.debug)}
\begin{fulllineitems}
\begin{fulllineitems}
\phantomsection\label{\detokenize{commands/apidoc/src:src.debug.tofix}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.debug.}}\sphinxbfcode{\sphinxupquote{tofix}}}{\emph{title}, \emph{var=''}, \emph{force=None}}{}
write sys.stderr a message if \_debug{[}-1{]}==True or optionaly force=True
-use this only if no logger accessible for classic
-logger.warning(message) or logger.debug(message)
+use this only if no logger accessible for classic logger.warning(message)
\end{fulllineitems}
\index{Logger (class in src.logger)}
\begin{fulllineitems}
-\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.Logger}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{Logger}}}{\emph{config}, \emph{silent\_sysstd=False}, \emph{all\_in\_terminal=False}, \emph{micro\_command=False}}{}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.Logger}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{Logger}}}{\emph{config=None}, \emph{silent\_sysstd=False}, \emph{all\_in\_terminal=False}, \emph{micro\_command=False}}{}
Bases: \sphinxcode{\sphinxupquote{object}}
Class to handle log mechanism.
\end{fulllineitems}
+\index{getCurrentLogger() (in module src.logger)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.getCurrentLogger}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{getCurrentLogger}}}{}{}
+get current logging logger, set as DefaultLogger if not set yet
+
+\end{fulllineitems}
+
+\index{getDefaultLogger() (in module src.logger)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.getDefaultLogger}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{getDefaultLogger}}}{}{}
+get simple logging logger DefaultLogger, set it as current
+
+\end{fulllineitems}
+
+\index{getUnittestLogger() (in module src.logger)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.getUnittestLogger}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{getUnittestLogger}}}{}{}
+get simple logging logger UnittestLogger, set it as current
+
+\end{fulllineitems}
+
+\index{isCurrentLoggerUnittest() (in module src.logger)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.isCurrentLoggerUnittest}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{isCurrentLoggerUnittest}}}{}{}
+\end{fulllineitems}
+
\index{list\_log\_file() (in module src.logger)}
\begin{fulllineitems}
\end{fulllineitems}
+\index{sendMessageToCurrentLogger() (in module src.logger)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.sendMessageToCurrentLogger}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{sendMessageToCurrentLogger}}}{\emph{message}, \emph{level}}{}
+assume relay from obsolescent
+logger.write(msg, 1/2/3…) to future
+logging.critical/warning/info…(msg) (as logging package tips)
+
+\end{fulllineitems}
+
+\index{setCurrentLogger() (in module src.logger)}
+
+\begin{fulllineitems}
+\phantomsection\label{\detokenize{commands/apidoc/src:src.logger.setCurrentLogger}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{src.logger.}}\sphinxbfcode{\sphinxupquote{setCurrentLogger}}}{\emph{logger}}{}
+temporary send all in stdout as simple logging logger
+
+\end{fulllineitems}
+
\index{show\_command\_log() (in module src.logger)}
\begin{fulllineitems}
\end{fulllineitems}
-\index{print\_help() (src.options.Options method)}
-
-\begin{fulllineitems}
-\phantomsection\label{\detokenize{commands/apidoc/src:src.options.Options.print_help}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{print\_help}}}{}{}
-Method that display all options stored in self.options and there help
-\begin{quote}\begin{description}
-\item[{Returns}] \leavevmode
-None
-
-\end{description}\end{quote}
-
-\end{fulllineitems}
-
\end{fulllineitems}
\contentsline {subsubsection}{src.architecture module}{34}{subsubsection*.162}
\contentsline {subsubsection}{src.compilation module}{34}{subsubsection*.169}
\contentsline {subsubsection}{src.debug module}{35}{subsubsection*.188}
-\contentsline {subsubsection}{src.environment module}{36}{subsubsection*.202}
-\contentsline {subsubsection}{src.fileEnviron module}{40}{subsubsection*.240}
-\contentsline {subsubsection}{src.fork module}{46}{subsubsection*.305}
-\contentsline {subsubsection}{src.logger module}{46}{subsubsection*.311}
-\contentsline {subsubsection}{src.options module}{48}{subsubsection*.324}
-\contentsline {subsubsection}{src.printcolors module}{49}{subsubsection*.336}
-\contentsline {subsubsection}{src.product module}{50}{subsubsection*.349}
-\contentsline {subsubsection}{src.pyconf module}{55}{subsubsection*.379}
-\contentsline {subsubsection}{src.system module}{62}{subsubsection*.451}
-\contentsline {subsubsection}{src.template module}{63}{subsubsection*.457}
-\contentsline {subsubsection}{src.test\_module module}{63}{subsubsection*.462}
-\contentsline {subsubsection}{src.xmlManager module}{64}{subsubsection*.482}
-\contentsline {subsubsection}{Module contents}{66}{subsubsection*.496}
-\contentsline {chapter}{\numberline {5}Release Notes}{69}{chapter.5}
-\contentsline {section}{\numberline {5.1}Release notes}{69}{section.5.1}
-\contentsline {chapter}{Python Module Index}{71}{section*.538}
-\contentsline {chapter}{Index}{73}{section*.539}
+\contentsline {subsubsection}{src.environment module}{36}{subsubsection*.205}
+\contentsline {subsubsection}{src.fileEnviron module}{40}{subsubsection*.243}
+\contentsline {subsubsection}{src.fork module}{46}{subsubsection*.308}
+\contentsline {subsubsection}{src.logger module}{47}{subsubsection*.314}
+\contentsline {subsubsection}{src.options module}{48}{subsubsection*.333}
+\contentsline {subsubsection}{src.printcolors module}{49}{subsubsection*.344}
+\contentsline {subsubsection}{src.product module}{51}{subsubsection*.357}
+\contentsline {subsubsection}{src.pyconf module}{55}{subsubsection*.387}
+\contentsline {subsubsection}{src.system module}{62}{subsubsection*.459}
+\contentsline {subsubsection}{src.template module}{64}{subsubsection*.465}
+\contentsline {subsubsection}{src.test\_module module}{64}{subsubsection*.470}
+\contentsline {subsubsection}{src.xmlManager module}{64}{subsubsection*.490}
+\contentsline {subsubsection}{Module contents}{66}{subsubsection*.504}
+\contentsline {chapter}{\numberline {5}Release Notes}{71}{chapter.5}
+\contentsline {section}{\numberline {5.1}Release notes}{71}{section.5.1}
+\contentsline {chapter}{Python Module Index}{73}{section*.546}
+\contentsline {chapter}{Index}{75}{section*.547}
Usage
=====
-* Show (in a web browser) the sat documentation: ::
+* Show (in a web browser) the sat documentation in format xml/html: ::
- sat doc --html
+ sat doc --xml
* Show (in evince, for example) the (same) sat documentation in format pdf: ::
#!/usr/bin/env python
#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
+
+# Copyright (C) 2010-2018 CEA/DEN
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-'''This file is the main entry file to salomeTools
-'''
-# python imports
+"""
+This file is the main entry file to use salomeTools,
+in mode Command Line Argument(s) (CLI)
+"""
+
import os
import sys
-import re
-import tempfile
-import imp
-import types
-import gettext
-import traceback
-# salomeTools imports
-import src
+# exit OKSYS and KOSYS seems equal on linux or windows
+OKSYS = 0 # OK
+KOSYS = 1 # KO
# get path to salomeTools sources
-satdir = os.path.dirname(os.path.realpath(__file__))
+satdir = os.path.dirname(os.path.realpath(__file__))
+srcdir = os.path.join(satdir, 'src')
cmdsdir = os.path.join(satdir, 'commands')
-# Make the src package accessible from all code
-sys.path.append(satdir)
-sys.path.append(cmdsdir)
-
-import config
-
-# load resources for internationalization
-#es = gettext.translation('salomeTools', os.path.join(satdir, 'src', 'i18n'))
-#es.install()
-gettext.install('salomeTools', os.path.join(satdir, 'src', 'i18n'))
-
-# The possible hooks :
-# pre is for hooks to be executed before commands
-# post is for hooks to be executed after commands
-C_PRE_HOOK = "pre"
-C_POST_HOOK = "post"
-
-def find_command_list(dirPath):
- ''' Parse files in dirPath that end with .py : it gives commands list
-
- :param dirPath str: The directory path where to search the commands
- :return: cmd_list : the list containing the commands name
- :rtype: list
- '''
- cmd_list = []
- for item in os.listdir(dirPath):
- if item.endswith('.py'):
- cmd_list.append(item[:-len('.py')])
- return cmd_list
-
-# The list of valid salomeTools commands
-#lCommand = ['config', 'compile', 'prepare']
-lCommand = find_command_list(cmdsdir)
-
-# Define all possible option for salomeTools command : sat <option> <args>
-parser = src.options.Options()
-parser.add_option('h', 'help', 'boolean', 'help',
- _("shows global help or help on a specific command."))
-parser.add_option('o', 'overwrite', 'list', "overwrite",
- _("overwrites a configuration parameters."))
-parser.add_option('g', 'debug', 'boolean', 'debug_mode',
- _("run salomeTools in debug mode."))
-parser.add_option('v', 'verbose', 'int', "output_verbose_level",
- _("change output verbose level (default is 3)."))
-parser.add_option('b', 'batch', 'boolean', "batch",
- _("batch mode (no question)."))
-parser.add_option('t', 'all_in_terminal', 'boolean', "all_in_terminal",
- _("All traces in the terminal (for example compilation logs)."))
-parser.add_option('l', 'logs_paths_in_file', 'string', "logs_paths_in_file",
- _("Put the command result and paths to log files in ."))
-
-class Sat(object):
- '''The main class that stores all the commands of salomeTools
- '''
- def __init__(self, opt='', datadir=None):
- '''Initialization
-
- :param opt str: The sat options
- :param: datadir str : the directory that contain all the external
- data (like software pyconf and software scripts)
- '''
- # Read the salomeTools options (the list of possible options is
- # at the beginning of this file)
- try:
- (options, argus) = parser.parse_args(opt)
- except Exception as exc:
- write_exception(exc)
- sys.exit(-1)
-
- # initialization of class attributes
- self.__dict__ = dict()
- self.cfg = None # the config that will be read using pyconf module
- self.arguments = opt
- self.options = options # the options passed to salomeTools
- self.datadir = datadir # default value will be <salomeTools root>/data
- # set the commands by calling the dedicated function
- self._setCommands(cmdsdir)
-
- # if the help option has been called, print help and exit
- if options.help:
- try:
- self.print_help(argus)
- sys.exit(0)
- except Exception as exc:
- write_exception(exc)
- sys.exit(1)
-
- def __getattr__(self, name):
- ''' overwrite of __getattr__ function in order to display
- a customized message in case of a wrong call
-
- :param name str: The name of the attribute
- '''
- if name in self.__dict__:
- return self.__dict__[name]
- else:
- raise AttributeError(name + _(" is not a valid command"))
-
- def _setCommands(self, dirPath):
- '''set class attributes corresponding to all commands that are
- in the dirPath directory
-
- :param dirPath str: The directory path containing the commands
- '''
- # loop on the commands name
- for nameCmd in lCommand:
-
- # Exception for the jobs command that requires the paramiko module
- if nameCmd == "jobs":
- try:
- saveout = sys.stderr
- ff = tempfile.TemporaryFile()
- sys.stderr = ff
- import paramiko
- sys.stderr = saveout
- except:
- sys.stderr = saveout
- continue
-
- # load the module that has name nameCmd in dirPath
- (file_, pathname, description) = imp.find_module(nameCmd, [dirPath])
- module = imp.load_module(nameCmd, file_, pathname, description)
-
- def run_command(args='',
- options=None,
- batch = False,
- verbose = -1,
- logger_add_link = None):
- '''The function that will load the configuration (all pyconf)
- and return the function run of the command corresponding to module
-
- :param args str: The arguments of the command
- '''
- # Make sure the internationalization is available
- gettext.install('salomeTools', os.path.join(satdir, 'src', 'i18n'))
-
- # Get the arguments in a list and remove the empty elements
- if type(args) == type(''):
- # split by spaces without considering spaces in quotes
- argv_0 = re.findall(r'(?:"[^"]*"|[^\s"])+', args)
- else:
- argv_0 = args
-
- if argv_0 != ['']:
- while "" in argv_0: argv_0.remove("")
-
- # Format the argv list in order to prevent strings
- # that contain a blank to be separated
- argv = []
- elem_old = ""
- for elem in argv_0:
- if argv == [] or elem_old.startswith("-") or elem.startswith("-"):
- argv.append(elem)
- else:
- argv[-1] += " " + elem
- elem_old = elem
-
- # if it is provided by the command line, get the application
- appliToLoad = None
- if argv not in [[''], []] and argv[0][0] != "-":
- appliToLoad = argv[0].rstrip('*')
- argv = argv[1:]
-
- # Check if the global options of salomeTools have to be changed
- if options:
- options_save = self.options
- self.options = options
-
- # read the configuration from all the pyconf files
- cfgManager = config.ConfigManager()
- self.cfg = cfgManager.get_config(datadir=self.datadir,
- application=appliToLoad,
- options=self.options,
- command=__nameCmd__)
-
- # Set the verbose mode if called
- if verbose > -1:
- verbose_save = self.options.output_verbose_level
- self.options.__setattr__("output_verbose_level", verbose)
-
- # Set batch mode if called
- if batch:
- batch_save = self.options.batch
- self.options.__setattr__("batch", True)
-
- # set output level
- if self.options.output_verbose_level is not None:
- self.cfg.USER.output_verbose_level = self.options.output_verbose_level
- if self.cfg.USER.output_verbose_level < 1:
- self.cfg.USER.output_verbose_level = 0
- silent = (self.cfg.USER.output_verbose_level == 0)
-
- # create log file
- micro_command = False
- if logger_add_link:
- micro_command = True
- logger_command = src.logger.Logger(self.cfg,
- silent_sysstd=silent,
- all_in_terminal=self.options.all_in_terminal,
- micro_command=micro_command)
-
- # Check that the path given by the logs_paths_in_file option
- # is a file path that can be written
- if self.options.logs_paths_in_file and not micro_command:
- try:
- self.options.logs_paths_in_file = os.path.abspath(
- self.options.logs_paths_in_file)
- dir_file = os.path.dirname(self.options.logs_paths_in_file)
- if not os.path.exists(dir_file):
- os.makedirs(dir_file)
- if os.path.exists(self.options.logs_paths_in_file):
- os.remove(self.options.logs_paths_in_file)
- file_test = open(self.options.logs_paths_in_file, "w")
- file_test.close()
- except Exception as e:
- msg = _("WARNING: the logs_paths_in_file option will "
- "not be taken into account.\nHere is the error:")
- logger_command.write("%s\n%s\n\n" % (
- src.printcolors.printcWarning(msg),
- str(e)))
- self.options.logs_paths_in_file = None
-
- options_launched = ""
- res = None
- try:
- # Execute the hooks (if there is any)
- # and run method of the command
- self.run_hook(__nameCmd__, C_PRE_HOOK, logger_command)
- res = __module__.run(argv, self, logger_command)
- self.run_hook(__nameCmd__, C_POST_HOOK, logger_command)
- if res is None:
- res = 0
-
- except Exception as e:
- # Get error
- logger_command.write("\n***** ", 1)
- logger_command.write(src.printcolors.printcError(
- "salomeTools ERROR:"), 1)
- logger_command.write("\n" + str(e) + "\n\n", 1)
- # get stack
- __, __, exc_traceback = sys.exc_info()
- fp = tempfile.TemporaryFile()
- traceback.print_tb(exc_traceback, file=fp)
- fp.seek(0)
- stack = fp.read()
- verbosity = 5
- if self.options.debug_mode:
- verbosity = 1
- logger_command.write("TRACEBACK: %s" % stack.replace('"',"'"),
- verbosity)
- finally:
- # set res if it is not set in the command
- if res is None:
- res = 1
-
- # come back to the original global options
- if options:
- options_launched = get_text_from_options(self.options)
- self.options = options_save
-
- # come back in the original batch mode if
- # batch argument was called
- if batch:
- self.options.__setattr__("batch", batch_save)
-
- # come back in the original verbose mode if
- # verbose argument was called
- if verbose > -1:
- self.options.__setattr__("output_verbose_level",
- verbose_save)
- # put final attributes in xml log file
- # (end time, total time, ...) and write it
- launchedCommand = ' '.join([self.cfg.VARS.salometoolsway +
- os.path.sep +
- 'sat',
- options_launched,
- __nameCmd__,
- ' '.join(argv_0)])
- launchedCommand = launchedCommand.replace('"', "'")
-
- # Add a link to the parent command
- if logger_add_link is not None:
- logger_add_link.add_link(logger_command.logFileName,
- __nameCmd__,
- res,
- launchedCommand)
- logger_add_link.l_logFiles += logger_command.l_logFiles
-
- # Put the final attributes corresponding to end time and
- # Write the file to the hard drive
- logger_command.end_write(
- {"launchedCommand" : launchedCommand})
-
- if res != 0:
- res = 1
-
- # print the log file path if
- # the maximum verbose mode is invoked
- if not micro_command:
- logger_command.write("\nPath to the xml log file :\n",
- 5)
- logger_command.write("%s\n\n" % src.printcolors.printcInfo(
- logger_command.logFilePath), 5)
-
- # If the logs_paths_in_file was called, write the result
- # and log files in the given file path
- if self.options.logs_paths_in_file and not micro_command:
- file_res = open(self.options.logs_paths_in_file, "w")
- file_res.write(str(res) + "\n")
- for i, filepath in enumerate(logger_command.l_logFiles):
- file_res.write(filepath)
- if i < len(logger_command.l_logFiles):
- file_res.write("\n")
- file_res.flush()
-
- return res
-
- # Make sure that run_command will be redefined
- # at each iteration of the loop
- globals_up = {}
- globals_up.update(run_command.__globals__)
- globals_up.update({'__nameCmd__': nameCmd, '__module__' : module})
- func = types.FunctionType(run_command.__code__,
- globals_up,
- run_command.__name__,
- run_command.__defaults__,
- run_command.__closure__)
-
- # set the attribute corresponding to the command
- self.__setattr__(nameCmd, func)
-
- def run_hook(self, cmd_name, hook_type, logger):
- '''Execute a hook file for a given command regarding the fact
- it is pre or post
-
- :param cmd_name str: The the command on which execute the hook
- :param hook_type str: pre or post
- :param logger Logger: the logging instance to use for the prints
- '''
- # The hooks must be defined in the application pyconf
- # So, if there is no application, do not do anything
- if not src.config_has_application(self.cfg):
- return
-
- # The hooks must be defined in the application pyconf in the
- # APPLICATION section, hook : { command : 'script_path.py'}
- if "hook" not in self.cfg.APPLICATION \
- or cmd_name not in self.cfg.APPLICATION.hook:
- return
-
- # Get the hook_script path and verify that it exists
- hook_script_path = self.cfg.APPLICATION.hook[cmd_name]
- if not os.path.exists(hook_script_path):
- raise src.SatException(_("Hook script not found: %s") %
- hook_script_path)
-
- # Try to execute the script, catch the exception if it fails
- try:
- # import the module (in the sense of python)
- pymodule = imp.load_source(cmd_name, hook_script_path)
-
- # format a message to be printed at hook execution
- msg = src.printcolors.printcWarning(_("Run hook script"))
- msg = "%s: %s\n" % (msg,
- src.printcolors.printcInfo(hook_script_path))
-
- # run the function run_pre_hook if this function is called
- # before the command, run_post_hook if it is called after
- if hook_type == C_PRE_HOOK and "run_pre_hook" in dir(pymodule):
- logger.write(msg, 1)
- pymodule.run_pre_hook(self.cfg, logger)
- elif hook_type == C_POST_HOOK and "run_post_hook" in dir(pymodule):
- logger.write(msg, 1)
- pymodule.run_post_hook(self.cfg, logger)
-
- except Exception as exc:
- msg = _("Unable to run hook script: %s") % hook_script_path
- msg += "\n" + str(exc)
- raise src.SatException(msg)
-
- def print_help(self, opt):
- '''Prints help for a command. Function called when "sat -h <command>"
-
- :param argv str: the options passed (to get the command name)
- '''
- # if no command as argument (sat -h)
- if len(opt)==0:
- print_help()
- return
- # get command name
- command = opt[0]
- # read the configuration from all the pyconf files
- cfgManager = config.ConfigManager()
- self.cfg = cfgManager.get_config(datadir=self.datadir)
-
- # Check if this command exists
- if not hasattr(self, command):
- raise src.SatException(_("Command '%s' does not exist") % command)
-
- # Print salomeTools version
- print_version()
-
- # load the module
- module = self.get_module(command)
+# Make the src & commands package accessible from all code
+sys.path.insert(0, satdir)
+sys.path.insert(0, srcdir) # TODO remove that
+sys.path.insert(0, cmdsdir) # TODO remove that
- # print the description of the command that is done in the command file
- if hasattr( module, "description" ) :
- print(src.printcolors.printcHeader( _("Description:") ))
- print(module.description() + '\n')
+import src.logger as LOG
+import src.debug as DBG # Easy print stderr (for DEBUG only)
- # print the description of the command options
- if hasattr( module, "parser" ) :
- module.parser.print_help()
+logger = LOG.getDefaultLogger()
- def get_module(self, module):
- '''Loads a command. Function called only by print_help
-
- :param module str: the command to load
- '''
- # Check if this command exists
- if not hasattr(self, module):
- raise src.SatException(_("Command '%s' does not exist") % module)
+#################################
+# MAIN
+#################################
+if __name__ == "__main__":
+ from src.salomeTools import Sat # it is time to do import
- # load the module
- (file_, pathname, description) = imp.find_module(module, [cmdsdir])
- module = imp.load_module(module, file_, pathname, description)
- return module
+ _debug = False # Have to be False in production (for programmers DEBUG only)
+ DBG.push_debug(_debug) # as __main__ with sys.exit so no need pop_debug
-def get_text_from_options(options):
- text_options = ""
- for attr in dir(options):
- if attr.startswith("__"):
- continue
- if options.__getattr__(attr) != None:
- option_contain = options.__getattr__(attr)
- if type(option_contain)==type([]):
- option_contain = ",".join(option_contain)
- if type(option_contain)==type(True):
- option_contain = ""
- text_options+= "--%s %s " % (attr, option_contain)
- return text_options
-
+ args = sys.argv[1:] # skip useless "sat'
+ sat = Sat(logger) # instantiate the salomeTools class
-def print_version():
- '''prints salomeTools version (in src/internal_config/salomeTools.pyconf)
- '''
- # read the config
- cfgManager = config.ConfigManager()
- cfg = cfgManager.get_config()
- # print the key corresponding to salomeTools version
- print(src.printcolors.printcHeader( _("Version: ") ) +
- cfg.INTERNAL.sat_version + '\n')
+ try:
+ returnCode = sat.execute_cli(args)
+ except Exception as e:
+ # error as may be unknown problem
+ # verbose debug message with traceback if developers
+ msg = "Exception raised for execute_cli('%s'):\n" % " ".join(args)
+ logger.critical(DBG.format_exception(msg))
+ logger.close() # important to close logger
+ sys.exit(KOSYS)
+ # no Exception but may be known problem
+ DBG.write("execute_cli return code", returnCode)
+ if returnCode.isOk():
+ # OK no trace
+ logger.step("sat exit code: %s" % returnCode)
+ else:
+ # KO warning as known problem have to say why
+ logger.warning("sat exit code: %s" % returnCode)
+ logger.close() # important to close logger
+ sys.exit(returnCode.toSys())
-def print_help():
- '''prints salomeTools general help
-
- :param options str: the options
- '''
- print_version()
-
- print(src.printcolors.printcHeader( _("Usage: ") ) +
- "sat [sat_options] <command> [product] [command_options]\n")
- parser.print_help()
+else:
+ logger.critical("forbidden/unexpected mode for __name__ '%s'" % __name__)
+ logger.close() # important to close logger
+ sys.exit(KOSYS)
- # display all the available commands.
- print(src.printcolors.printcHeader(_("Available commands are:\n")))
- for command in lCommand:
- print(" - %s" % (command))
-
- # Explain how to get the help for a specific command
- print(src.printcolors.printcHeader(_("\nGetting the help for a specific"
- " command: ")) + "sat --help <command>\n")
-def write_exception(exc):
- '''write exception in case of error in a command
-
- :param exc exception: the exception to print
- '''
- sys.stderr.write("\n***** ")
- sys.stderr.write(src.printcolors.printcError("salomeTools ERROR:"))
- sys.stderr.write("\n" + str(exc) + "\n")
-# ###############################
-# MAIN : terminal command usage #
-# ###############################
-if __name__ == "__main__":
- # Initialize the code that will be returned by the terminal command
- code = 0
- (options, args) = parser.parse_args(sys.argv[1:])
-
- # no arguments : print general help
- if len(args) == 0:
- print_help()
- sys.exit(0)
-
- # instantiate the salomeTools class with correct options
- sat = Sat(sys.argv[1:])
- # the command called
- command = args[0]
- # get dynamically the command function to call
- fun_command = sat.__getattr__(command)
- # Run the command using the arguments
- code = fun_command(args[1:])
-
- # exit salomeTools with the right code (0 if no errors, else 1)
- if code is None: code = 0
- sys.exit(code)
-
\ No newline at end of file
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-"""\
-This file assume DEBUG functionalities use
-
-- print debug messages in sys.stderr for salomeTools
-- show pretty print debug representation from instances of SAT classes
- (pretty print src.pyconf.Config), and python dict/list etc. (as 'aVariable')
-
-WARNING: obviously supposedly show messages in SAT development phase, not production
-
-usage:
->> import debug as DBG
->> DBG.write("aTitle", aVariable) # not shown in production
->> DBG.write("aTitle", aVariable, True) # unconditionaly shown (as show=True)
-
-to set show message as development phase:
->> DBG.push_debug(True)
-
-to set no show message as production phase:
->> DBG.push_debug(False)
-
-to set show message temporary as development phase, only in a method:
->> def aMethodToDebug(...):
->> DBG.push_debug(True) #force show as appended status
->> etc. method code with some DBG.write()
->> DBG.pop_debug() #restore previous status (show or not show)
->> return
-
-to set a message for future fix, as temporary problem to not forget:
-DBG.tofix("aTitle", aVariable, True/False) #True/False in production shown, or not
+"""
+This file assume DEBUG functionalities use.
+Print salomeTools debug messages in sys.stderr.
+Show pretty print debug representation from instances of SAT classes
+(pretty print src.pyconf.Config)
-in command line interface you could redirect stderr to file 'myDebug.log':
->> sat compile ... 2> myDebug.log # only stderr
->> sat compile ... &> myDebug.log # stdout and stderr
+| Warning: supposedly show messages in SAT development phase, not production
+|
+| Usage:
+| >> import debug as DBG
+| >> DBG.write("aTitle", aVariable) # not shown in production
+| >> DBG.write("aTitle", aVariable, True) # unconditionaly shown (as show=True)
+|
+| to set show message as development phase:
+| >> DBG.push_debug(True)
+|
+| to set no show message as production phase:
+| >> DBG.push_debug(False)
+|
+| to set show message temporary as development phase, only in a method:
+| >> def aMethodToDebug(...):
+| >> DBG.push_debug(True) #force show as appended status
+| >> etc. method code with some DBG.write()
+| >> DBG.pop_debug() #restore previous status (show or not show)
+| >> return
+|
+| to set a message for future fix, as temporary problem to not forget:
+| DBG.tofix("aTitle", aVariable, True/False) #True/False in production shown, or not
+|
+| in command line interface you could redirect stderr to file 'myDebug.log':
+| >> sat compile ... 2> myDebug.log # only stderr
+| >> sat compile ... &> myDebug.log # stdout and stderr
"""
import os
import sys
+import traceback
import StringIO as SIO
import pprint as PP
_debug = [False] #support push/pop for temporary activate debug outputs
+_user = os.environ['USER']
+# wambeke is christian at home
+_developpers = ["christian", "wambeke", "crouzet"] # crouzet, kloss ...
+
+
def indent(text, amount=2, ch=' '):
"""indent multi lines message"""
padding = amount * ch
return ''.join(padding + line for line in text.splitlines(True))
+def isTypeConfig(var):
+ """To know if var is instance from Config/pyconf"""
+ typ = str(type(var))
+ # print "isTypeConfig" ,type, dir(var)
+ if ".pyconf.Config" in typ: return True
+ if ".pyconf.Mapping" in typ: return True
+ if ".pyconf.Sequence" in typ: return True
+ # print "NOT isTypeConfig %s" % typ
+ return False
+
def write(title, var="", force=None, fmt="\n#### DEBUG: %s:\n%s\n"):
"""write sys.stderr a message if _debug[-1]==True or optionaly force=True"""
if _debug[-1] or force:
- if 'src.pyconf.' in str(type(var)):
- sys.stderr.write(fmt % (title, indent(getStrConfigDbg(var))))
- elif type(var) is not str:
- sys.stderr.write(fmt % (title, indent(PP.pformat(var))))
- else:
- sys.stderr.write(fmt % (title, indent(var)))
+ tvar = type(var)
+ typ = str(tvar)
+ if isTypeConfig(var):
+ sys.stderr.write(fmt % (title, indent(COLS.toColor(getStrConfigDbg(var)))))
+ return
+ if 'UnittestStream' in typ:
+ sys.stderr.write(fmt % (title, indent(var.getLogs())))
+ return
+ if tvar is not str and tvar is not unicode:
+ sys.stderr.write(fmt % (title, indent(PP.pformat(var))))
+ return
+ sys.stderr.write(fmt % (title, indent(var)))
+ return
return
def tofix(title, var="", force=None):
- """\
+ """
write sys.stderr a message if _debug[-1]==True or optionaly force=True
- use this only if no logger accessible for classic
- logger.warning(message) or logger.debug(message)
+ use this only if no logger accessible for classic logger.warning(message)
"""
fmt = "\n#### TOFIX: %s:\n%s\n"
write(title, var, force, fmt)
sys.stderr.write("\nERROR: pop_debug: too much pop.")
return None
+
+def format_exception(msg, limit=None, trace=None):
+ """
+ Format a stack trace and the exception information.
+ as traceback.format_exception(), without color
+ with traceback only if (_debug) or (DBG._user in DBG._developpers)
+ """
+ etype, value, tb = sys.exc_info()
+ if (_debug[-1]) or (_user in _developpers):
+ res = msg
+ if tb:
+ res += "\nTraceback (most recent call last):\n"
+ res += "".join(traceback.format_tb(tb, limit)) # [:-1])
+ res += "\n"
+ res += "\n".join(traceback.format_exception_only(etype, value))
+ return res
+ else:
+ res = msg
+ res += "".join(traceback.format_exception_only(etype, value))
+ return res
+
+def format_color_exception(msg, limit=None, trace=None):
+ """
+ Format a stack trace and the exception information.
+ as traceback.format_exception(), with color
+ with traceback only if (_debug) or (DBG._user in DBG._developpers)
+ """
+ etype, value, tb = sys.exc_info()
+ if (_debug[-1]) or (_user in _developpers):
+ res = "<red>" + msg
+ if tb:
+ res += "<yellow>\nTraceback (most recent call last):\n"
+ res += "".join(traceback.format_tb(tb, limit)) # [:-1])
+ res += "\n<red>"
+ res += "\n".join(traceback.format_exception_only(etype, value))
+ return res + "<reset>"
+ else:
+ res = "<red>" + msg # + "<bright>"
+ res += "".join(traceback.format_exception_only(etype, value))
+ return res + "<reset>"
+
+
###############################################
# utilitaires divers pour debug
###############################################
class OutStream(SIO.StringIO):
- """utility class for pyconf.Config output iostream"""
+ """
+ utility class for pyconf.Config output iostream
+ """
def close(self):
- """because Config.__save__ calls close() stream as file
+ """
+ because Config.__save__ calls close() stream as file
keep value before lost as self.value
"""
self.value = self.getvalue()
return outStream.value
def getStrConfigDbg(config):
- """\
+ """
set string as saveConfigDbg,
as (path expression evaluation) for debug
"""
def saveConfigDbg(config, aStream, indent=0, path=""):
"""pyconf returns multilines (path expression evaluation) for debug"""
- _saveConfigRecursiveDbg(config, aStream, indent, path)
+ _saveConfigRecursiveDbg(config, aStream, indent, path, 0)
aStream.close() # as config.__save__()
-def _saveConfigRecursiveDbg(config, aStream, indent, path):
+def _saveConfigRecursiveDbg(config, aStream, indent, path, nb):
"""pyconf inspired from Mapping.__save__"""
debug = False
+ nbp = nb + 1 # depth recursive
if indent <= 0:
indentp = 0
else:
- indentp = indentp + 2
+ indentp = indent + 2
+
+ if nbp > 10: # protection
+ # raise Exception("!!! ERROR: Circular reference after %s" % aStream.getvalue())
+ # raise Exception("!!! ERROR: Circular reference %s" % path)
+ aStream.write("<red>!!! ERROR: Circular reference after %s<reset>\n" % path)
+ return
+
indstr = indent * ' ' # '':no indent, ' ':indent
strType = str(type(config))
+ if debug: print "saveDbg Type", path, strType
+
if "Sequence" in strType:
for i in range(len(config)):
- _saveConfigRecursiveDbg(config[i], aStream, indentp, path+"[%i]" % i)
+ _saveConfigRecursiveDbg(config[i], aStream, indentp, path+"[%i]" % i, nbp)
return
- try:
+ '''
+ if "Reference" in strType:
+ try:
+ #evaluate = value.resolve(config)
+ aStream.write("<header>%s%s<reset> : %s <yellow>--> '%s'<reset>\n" % (indstr, path, config, str(config)))
+ except Exception as e:
+ aStream.write("<header>%s%s<reset> : <red>!!! ERROR: %s !!!<reset>\n" % (indstr, path, e.message))
+ return
+ '''
+
+ try: #type config, mapping
order = object.__getattribute__(config, 'order')
data = object.__getattribute__(config, 'data')
except:
aStream.write("%s%s : '%s'\n" % (indstr, path, str(config)))
return
- for key in sorted(order):
+ for key in sorted(data): #order): # data as sort alphabetical, order as initial order
value = data[key]
strType = str(type(value))
- if debug: print indstr + 'strType = %s' % strType, key
+ if debug: print 'strType', path, key, strType
if "Config" in strType:
- _saveConfigRecursiveDbg(value, aStream, indentp, path+"."+key)
+ _saveConfigRecursiveDbg(value, aStream, indentp, path+"."+key, nbp)
continue
if "Mapping" in strType:
- _saveConfigRecursiveDbg(value, aStream, indentp, path+"."+key)
+ _saveConfigRecursiveDbg(value, aStream, indentp, path+"."+key, nbp)
continue
if "Sequence" in strType:
for i in range(len(value)):
- _saveConfigRecursiveDbg(value[i], aStream, indentp, path+"."+key+"[%i]" % i)
+ _saveConfigRecursiveDbg(value.data[i], aStream, indentp, path+"."+key+"[%i]" % i, nbp)
continue
if "Expression" in strType:
try:
import datetime
import re
import tempfile
+import shutil
import src
-from . import printcolors
-from . import xmlManager
+import printcolors
+import xmlManager
+
+import src.debug as DBG
log_macro_command_file_expression = "^[0-9]{8}_+[0-9]{6}_+.*\.xml$"
log_all_command_file_expression = "^.*[0-9]{8}_+[0-9]{6}_+.*\.xml$"
Class to handle log mechanism.
"""
def __init__(self,
- config,
+ config= None,
silent_sysstd=False,
all_in_terminal=False,
micro_command = False):
:param silent_sysstd boolean: if True, do not write anything
in terminal.
"""
+ DBG.write("src.logger.Logger", id(self))
self.config = config
self.default_level = 3
self.silentSysStd = silent_sysstd
("sat command ...")
"""
xmlLinks = self.xmlFile.xmlroot.find("Links")
- src.xmlManager.add_simple_node(xmlLinks,
- "link",
- text = log_file_name,
- attrib = {"command" : command_name,
- "passed" : command_res,
- "launchedCommand" : full_launched_command})
+ flc = src.xmlManager.escapeSequence(full_launched_command)
+ att = {"command" : command_name, "passed" : command_res, "launchedCommand" : flc}
+ src.xmlManager.add_simple_node(xmlLinks, "link", text = log_file_name, attrib = att)
def write(self, message, level=None, screenOnly=False):
"""\
to the message 0 < level < 6.
:param screenOnly boolean: if True, do not write in log file.
"""
+ # avoid traces if unittest
+ if isCurrentLoggerUnittest():
+ # print("doing unittest")
+ sendMessageToCurrentLogger(message, level)
+ return
+
# do not write message starting with \r to log file
if not message.startswith("\r") and not screenOnly:
self.xmlFile.append_node_text("Log",
# Call the method to write the xml file on the hard drive
self.xmlFile.write_tree(stylesheet = "command.xsl")
+
+ # so unconditionnaly copy stylesheet file(s)
+ xslDir = os.path.join(self.config.VARS.srcDir, 'xsl')
+ xslCommand = "command.xsl"
+ # xslHat = "hat.xsl" # have to be completed (one time at end)
+ xsltest = "test.xsl"
+ imgLogo = "LOGO-SAT.png"
+ files_to_copy = [xslCommand, xsltest, imgLogo]
+
+ logDir = src.get_log_path(self.config)
+ # copy the stylesheets in the log directory as soon as possible here
+ # because referenced in self.xmlFile.write_tree above
+ # OP We use copy instead of copy2 to update the creation date
+ # So we can clean the LOGS directories easily
+ for f in files_to_copy:
+ f_init = os.path.join(xslDir, f)
+ f_target = os.path.join(logDir, f)
+ if not os.path.isfile(f_target): # do not overrride
+ shutil.copy(f_init, logDir)
# Dump the config in a pyconf file in the log directory
- logDir = src.get_log_path(self.config)
- dumpedPyconfFileName = (self.config.VARS.datehour
+ dumpedPyconfFileName = (self.config.VARS.datehour
+ "_"
+ self.config.VARS.command
+ ".pyconf")
# Write the file on the hard drive
xmlHat.write_tree('hat.xsl')
+
+
+# TODO for future
+# prepare skip to logging logger sat5.1
+# suppose only one logger in sat5.1
+_currentLogger = []
+
+def getCurrentLogger():
+ """get current logging logger, set as DefaultLogger if not set yet"""
+ if len(_currentLogger) == 0:
+ import src.loggingSimple as LOGSI
+ logger = LOGSI.getDefaultLogger()
+ _currentLogger.append(logger)
+ logger.warning("set by default current logger as %s" % logger.name)
+ return _currentLogger[0]
+
+def getDefaultLogger():
+ """get simple logging logger DefaultLogger, set it as current"""
+ import src.loggingSimple as LOGSI
+ logger = LOGSI.getDefaultLogger()
+ setCurrentLogger(logger) # set it as current
+ return logger
+
+def getUnittestLogger():
+ """get simple logging logger UnittestLogger, set it as current"""
+ import src.loggingSimple as LOGSI
+ logger = LOGSI.getUnittestLogger()
+ setCurrentLogger(logger) # set it as current
+ return logger
+
+def setCurrentLogger(logger):
+ """temporary send all in stdout as simple logging logger"""
+ if len(_currentLogger) == 0:
+ _currentLogger.append(logger)
+ logger.warning("set current logger as %s" % logger.name)
+ else:
+ if _currentLogger[0].name != logger.name:
+ # logger.debug("quit current logger as default %s" % _currentLogger[0].name)
+ _currentLogger[0] = logger
+ logger.warning("change current logger as %s" % logger.name)
+ return _currentLogger[0]
+
+def isCurrentLoggerUnittest():
+ logger = getCurrentLogger()
+ if "Unittest" in logger.name:
+ res = True
+ else:
+ res = False
+ DBG.write("isCurrentLoggerUnittest %s" % logger.name, res)
+ return res
+
+def sendMessageToCurrentLogger(message, level):
+ """
+ assume relay from obsolescent
+ logger.write(msg, 1/2/3...) to future
+ logging.critical/warning/info...(msg) (as logging package tips)
+ """
+ logger = getCurrentLogger()
+ if level is None:
+ lev = 2
+ else:
+ lev = level
+ if lev <= 1:
+ logger.critical(message)
+ return
+ if lev == 2:
+ logger.warning(message)
+ return
+ if lev == 3:
+ logger.info(message)
+ return
+ if lev == 4:
+ logger.step(message)
+ return
+ if lev == 5:
+ logger.trace(message)
+ return
+ if lev >= 6:
+ logger.debug(message)
+ return
+ msg = "What is this level: '%s' for message:\n%s" % (level, message)
+ logger.warning(msg)
+ return
--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+salomeTools logger. using logging package
+
+| http://sametmax.com/ecrire-des-logs-en-python/
+|
+| Define two LoggerSat instances in salomeTools, no more need.
+| - _loggerDefault as production/development logger
+| - _loggerUnittest as unittest logger
+|
+
+"""
+
+
+import os
+import sys
+import time
+import random
+import logging as LOGI
+
+from logging.handlers import BufferingHandler
+import pprint as PP
+
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+
+_verbose = False
+_name = "loggingSimple"
+_loggerDefaultName = 'SimpleDefaultLogger'
+_loggerUnittestName = 'SimpleUnittestLogger'
+
+_STEP = LOGI.INFO - 1 # step level is just below INFO
+_TRACE = LOGI.INFO - 2 # trace level is just below STEP
+
+LOGI.STEP = _STEP # only for coherency,
+LOGI.TRACE = _TRACE # only for coherency,
+
+_knownLevels = "CRITICAL ERROR WARNING INFO STEP TRACE DEBUG".upper().split()
+_knownLevelsStr = "[%s]" % "|".join(_knownLevels)
+
+
+#################################################################
+# utilities methods
+#################################################################
+
+def filterLevel(aLevel):
+ """
+ filter levels logging values from firsts characters levels.
+ No case sensitive
+
+ | example:
+ | 'i' -> 'INFO'
+ | 'cRiT' -> 'CRITICAL'
+ """
+ aLev = aLevel.upper()
+ knownLevels = _knownLevels
+ maxLen = max([len(i) for i in knownLevels])
+ for i in range(maxLen):
+ for lev in knownLevels:
+ if aLev == lev[:i]:
+ # DBG.write("filterLevel", "%s -> %s" % (aLevel, lev))
+ return lev
+ msg = "Unknown level '%s', accepted are:\n%s" % (aLev, ", ".join(knownLevels))
+ return msg
+ # raise Exception(msg)
+
+
+def indent(msg, nb, car=" "):
+ """indent nb car (spaces) multi lines message except first one"""
+ s = msg.split("\n")
+ res = ("\n" + car * nb).join(s)
+ return res
+
+
+def indentUnittest(msg, prefix=" | "):
+ """
+ indent multi lines message except first one with prefix.
+ prefix default is designed for less spaces for size logs files
+ and keep logs human eye readable
+ """
+ s = msg.split("\n")
+ res = ("\n" + prefix).join(s)
+ return res
+
+
+def log(msg, force=False):
+ """elementary log when no logging.Logger yet"""
+ prefix = "---- %s.log: " % _name
+ nb = len(prefix)
+ if _verbose or force:
+ print(prefix + indent(msg, nb))
+
+
+# just for debug info where is import logging
+log("import logging on %s" % LOGI.__file__)
+
+
+def getStrDirLogger(logger):
+ """
+ Returns multi line string for logger description, with dir(logger).
+ Used for debug
+ """
+ lgr = logger # shortcut
+ msg = "%s(name=%s, dateLogger=%s):\n%s\n"
+ cName = lgr.__class__.__name__
+ res = msg % (cName, lgr.name, lgr.dateLogger, PP.pformat(dir(lgr)))
+ return res
+
+
+def getStrHandler(handler):
+ """
+ Returns one line string for handler description
+ (as inexisting __repr__)
+ to avoid create inherited classe(s) handler
+ """
+ h = handler # shortcut
+ msg = "%s(name=%s)"
+ cName = h.__class__.__name__
+ res = msg % (cName, h.get_name())
+ return res
+
+
+def getStrShort(msg):
+ """Returns short string for msg (as first caracters without line feed"""
+ # log("getStrShort " + str(msg), True)
+ res = msg.replace("\n", "//")[0:30]
+ return res
+
+
+def getStrLogRecord(logRecord):
+ """
+ Returns one line string for simple logging LogRecord description
+ """
+ msg = "LogRecord(level='%s', msg='%s...')"
+ shortMsg = getStrShort(logRecord.msg)
+ levelName = logRecord.levelname
+ res = msg % (levelName, shortMsg)
+ return res
+
+
+def getListOfStrLogRecord(listOfLogRecord):
+ """
+ Returns one line string for logging LogRecord description
+ """
+ res = [getStrLogRecord(l) for l in listOfLogRecord]
+ return res
+
+
+#################################################################
+# salometools logger classes
+#################################################################
+
+try:
+ unicode
+ _unicode = True
+except NameError:
+ _unicode = False
+
+
+def getMessage(self):
+ """
+ modified from logging.__init__.LogRecord.getMessage,
+ better message on format error
+ Return the message for this LogRecord.
+
+ Return the message for this LogRecord after merging any user-supplied
+ arguments with the message.
+ """
+ if not _unicode: # if no unicode support...
+ msg = str(self.msg)
+ else:
+ msg = self.msg
+ if not isinstance(msg, basestring):
+ try:
+ msg = str(self.msg)
+ except UnicodeError:
+ msg = self.msg # Defer encoding till later
+ if self.args:
+ try: # better message on format error
+ msg = msg % self.args
+ except Exception as e:
+ msg = "ERROR: %s with args %s" % (msg, PP.pformat(self.args))
+ log(msg, True)
+ return msg
+
+
+LOGI.LogRecord.getMessage = getMessage # better message if error
+
+
+#################################################################
+class LoggerSimple(LOGI.Logger):
+ """
+ Inherited class logging.Logger for logger salomeTools
+
+ | add a level STEP as log.step(msg)
+ | add a level TRACE as log.trace(msg)
+ | below log.info(msg)
+ | above log.debug(msg)
+ | to assume message step inside files xml 'command's internal traces'
+ | to assume store long log asci in files txt outside files xml
+ |
+ | see: /usr/lib64/python2.7/logging/__init__.py etc.
+ """
+
+ def __init__(self, name, level=LOGI.INFO):
+ """
+ Initialize the logger with a name and an optional level.
+ """
+ super(LoggerSimple, self).__init__(name, level)
+ LOGI.addLevelName(_STEP, "STEP")
+ LOGI.addLevelName(_TRACE, "TRACE")
+ self.dateLogger = "NoDateLogger"
+ self.dateHour = None # datehour of main command
+ self.isClosed = False
+ self.STEP = _STEP
+ self.TRACE = _TRACE
+
+ def close(self):
+ """
+ final stuff for logger, done at end salomeTools
+ flushed and closed xml files have to be not overriden/appended
+ """
+ if self.isClosed:
+ raise Exception("logger closed yet: %s" % self)
+ log("close stuff logger %s" % self) # getStrDirLogger(self)
+ for handl in list(self.handlers): # get original list
+ log("close stuff handler %s" % getStrHandler(handl))
+ handl.close() # Tidy up any resources used by the handler.
+ self.removeHandler(handl)
+ # todo etc
+ self.isClosed = True # done at end of execution
+ return
+
+ def __repr__(self):
+ """one line string representation"""
+ msg = "%s(name=%s, dateLogger=%s, handlers=%s)"
+ cName = self.__class__.__name__
+ h = [getStrHandler(h) for h in self.handlers]
+ h = "[" + ", ".join(h) + "]"
+ res = msg % (cName, self.name, self.dateLogger, h)
+ return res
+
+ def trace(self, msg, *args, **kwargs):
+ """
+ Log 'msg % args' with severity '_TRACE'.
+ """
+ log("trace stuff logger '%s' msg '%s...'" % (self.name, getStrShort(msg)))
+ if self.isEnabledFor(_TRACE):
+ self._log(_TRACE, msg, args, **kwargs)
+
+ def step(self, msg, *args, **kwargs):
+ """
+ Log 'msg % args' with severity '_STEP'.
+ """
+ log("step stuff logger '%s' msg '%s...'" % (self.name, getStrShort(msg)))
+ if self.isEnabledFor(_STEP):
+ self._log(_STEP, msg, args, **kwargs)
+
+ def setLevelMainHandler(self, level):
+ handl = self.handlers[0] # get main handler
+ log("setLevelMainHandler %s" % level)
+ handl.setLevel(level)
+
+
+#################################################################
+class UnittestFormatter(LOGI.Formatter):
+ """
+ this formatter prefixes level name and indents all messages
+ """
+ def format(self, record):
+ # print "", record.levelname #type(record), dir(record)
+ # nb = len("2018-03-17 12:15:41 :: INFO :: ")
+ res = super(UnittestFormatter, self).format(record)
+ res = indentUnittest(res)
+ return res
+
+#################################################################
+class DefaultFormatter(LOGI.Formatter):
+ """
+ this formatter prefixes level name and indents all messages but INFO stay "as it"
+ """
+ def format(self, record):
+ # print "", record.levelname #type(record), dir(record)
+ # nb = len("2018-03-17 12:15:41 :: INFO :: ")
+ if record.levelname == "INFO":
+ res = record.getMessage()
+ else:
+ res = super(DefaultFormatter, self).format(record)
+ res = indentUnittest(res)
+ return res
+
+
+#################################################################
+class UnittestStream(object):
+ """
+ write my stream class
+ only write and flush are used for the streaming
+
+ | https://docs.python.org/2/library/logging.handlers.html
+ | https://stackoverflow.com/questions/31999627/storing-logger-messages-in-a-string
+ """
+
+ def __init__(self):
+ self._logs = ''
+
+ def getLogs(self):
+ return self._logs
+
+ def getLogsAndClear(self):
+ res = self._logs
+ self._logs = ''
+ return res
+
+ def write(self, astr):
+ """final method called when message is logged"""
+ # log("UnittestStream.write('%s')" % astr, True) # for debug ...
+ self._logs += astr
+
+ def flush(self):
+ pass
+
+ def __str__(self):
+ return self._logs
+
+
+#################################################################
+class StreamHandlerSimple(LOGI.StreamHandler):
+ """
+ A handler class which writes logging records, appropriately formatted,
+ to a stream. Note that this class does not close the stream, as
+ sys.stdout or sys.stderr may be used.
+
+ from logging.StreamHandler class,
+ modified for 'no return' mode line if '...' at end of record message
+ """
+
+ def emit(self, record):
+ """
+ Emit a record.
+
+ If a formatter is specified, it is used to format the record.
+ The record is then written to the stream with a trailing newline. If
+ exception information is present, it is formatted using
+ traceback.print_exception and appended to the stream. If the stream
+ has an 'encoding' attribute, it is used to determine how to do the
+ output to the stream.
+ """
+ # log("StreamHandlerSimple.emit('%s')" % record, True) # for debug ...
+ try:
+ msg = self.format(record)
+ stream = self.stream
+ fs = '%s\n'
+ ufs = u'%s\n'
+ if not _unicode: # if no unicode support...
+ stream.write(fs % msg)
+ else:
+ try:
+ if (isinstance(msg, unicode) and
+ getattr(stream, 'encoding', None)):
+ # ufs = u'%s\n'
+ try:
+ stream.write(ufs % msg)
+ except UnicodeEncodeError:
+ # Printing to terminals sometimes fails. For example,
+ # with an encoding of 'cp1251', the above write will
+ # work if written to a stream opened or wrapped by
+ # the codecs module, but fail when writing to a
+ # terminal even when the codepage is set to cp1251.
+ # An extra encoding step seems to be needed.
+ stream.write((ufs % msg).encode(stream.encoding))
+ else:
+ stream.write(fs % msg)
+ except UnicodeError:
+ stream.write(fs % msg.encode("UTF-8"))
+ self.flush()
+ except (KeyboardInterrupt, SystemExit):
+ raise
+ except:
+ self.handleError(record)
+
+
+
+#################################################################
+# methods to define two LoggerSimple instances in salomeTools,
+# no more need
+#################################################################
+def initLoggerAsDefault(logger, fmt=None, level=None):
+ """
+ init logger as prefixed message and indented message if multi line
+ exept info() outed 'as it' without any format.
+ level could be modified during execution
+ """
+ log("initLoggerAsDefault name=%s\nfmt='%s' level='%s'" % (logger.name, fmt, level))
+ #handler = StreamHandlerSimple(sys.stdout) # Logging vers console
+ handler = LOGI.StreamHandler(sys.stdout) # Logging vers console
+ handler.set_name(logger.name + "_console")
+ if fmt is not None:
+ # formatter = UnittestFormatter(fmt, "%y-%m-%d %H:%M:%S")
+ formatter = DefaultFormatter(fmt, "%y-%m-%d %H:%M:%S")
+ handler.setFormatter(formatter)
+ handler.idCommandHandlers = 0
+ logger.addHandler(handler)
+ # as RootLogger is level WARNING
+ # my logger is not notset but low, handlers needs setlevel greater
+ logger.setLevel(LOGI.DEBUG)
+ # import src/debug as DBG
+ # tmp = (logger.getEffectiveLevel(), LOGI.NOTSET, logger.level, logger.parent.level)
+ # DBG.write("logger levels tmp, True)
+ if level is not None: # level could be modified during execution
+ handler.setLevel(level) # on screen log as user wants
+ else:
+ handler.setLevel(LOGI.STEP) # on screen no log step, which are in xml files
+ return
+
+
+def initLoggerAsUnittest(logger, fmt=None, level=None):
+ """
+ init logger as silent on stdout/stderr
+ used for retrieve messages in memory for post execution unittest
+ https://docs.python.org/2/library/logging.handlers.html
+ """
+ log("initLoggerAsUnittest name=%s\nfmt='%s' level='%s'" % (logger.name, fmt, level))
+ stream = UnittestStream()
+ handler = LOGI.StreamHandler(stream) # Logging vers stream
+ handler.set_name(logger.name + "_unittest")
+ if fmt is not None:
+ # formatter = LOGI.Formatter(fmt, "%Y-%m-%d %H:%M:%S")
+ formatter = UnittestFormatter(fmt, "%Y-%m-%d %H:%M:%S")
+ handler.setFormatter(formatter)
+ handler.idCommandHandlers = 0
+ logger.addHandler(handler)
+ logger.stream = stream
+ logger.getLogs = stream.getLogs
+ logger.getLogsAndClear = stream.getLogsAndClear
+ if level is not None:
+ logger.setLevel(level)
+ else:
+ logger.setLevel(LOGI.DEBUG)
+
+
+def getDefaultLogger():
+ log("getDefaultLogger %s" % _loggerDefaultName)
+ # case multithread may be problem as not LOGI._acquireLock()
+ previousClass = LOGI._loggerClass
+ LOGI.setLoggerClass(LoggerSimple) # to get LoggerSimple instance with trace etc.
+ res = LOGI.getLogger(_loggerDefaultName)
+ LOGI.setLoggerClass(previousClass)
+ return res
+
+
+def getUnittestLogger():
+ log("getUnittestLogger %s" % _loggerUnittestName)
+ # case multithread may be problem as not LOGI._acquireLock()
+ previousClass = LOGI._loggerClass
+ LOGI.setLoggerClass(LoggerSimple) # to get LoggerSimple instance with trace etc.
+ res = LOGI.getLogger(_loggerUnittestName)
+ LOGI.setLoggerClass(previousClass)
+ return res
+
+
+#################################################################
+# small tests as demonstration, see unittest also
+#################################################################
+def testLogger_2(logger):
+ """small test"""
+ # print getStrDirLogger(logger)
+ logger.debug('test logger debug')
+ logger.trace('test logger trace')
+ logger.info('test logger info')
+ logger.warning('test logger warning')
+ logger.error('test logger error')
+ logger.critical('test logger critical')
+ logger.info('\ntest logger info:\n- second line\n- third line\n')
+ logger.warning('test logger warning:\n- second line\n- third line')
+
+def testMain_2():
+ print("\n**** DEFAULT logger")
+ logdef = getDefaultLogger()
+ # use of setColorLevelname <color>...<reset>, so do not use %(levelname)-8s
+ initLoggerAsDefault(logdef, '%(levelname)-8s :: %(message)s', level=LOGI.DEBUG)
+ testLogger_2(logdef)
+
+ print("\n**** UNITTEST logger")
+ loguni = getUnittestLogger()
+ initLoggerAsUnittest(loguni, '%(asctime)s :: %(levelname)-8s :: %(message)s', level=LOGI.DEBUG)
+ testLogger_2(loguni) # is silent
+ # log("loguni.getLogs():\n%s" % loguni.getLogs())
+ print("loguni.streamUnittest:\n%s" % loguni.getLogs())
+
+
+#################################################################
+# in production, or not (if __main__)
+#################################################################
+if __name__ == "__main__":
+ # for example, not in production
+ # get path to salomeTools sources
+ curdir = os.path.dirname(os.path.dirname(__file__))
+ # Make the src & commands package accessible from all code
+ sys.path.insert(0, curdir)
+ testMain_2()
+ # here we have sys.exit()
+else:
+ # in production
+ # get two LoggerSat instance used in salomeTools, no more needed.
+ _loggerDefault = getDefaultLogger()
+ _loggerUnittest = getUnittestLogger()
+ initLoggerAsDefault(_loggerDefault, '%(levelname)-8s :: %(message)s')
+ initLoggerAsUnittest(_loggerUnittest, '%(asctime)s :: %(levelname)s :: %(message)s')
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-'''The Options class that manages the access to all options passed as
- parameters in salomeTools command lines
-'''
+
+"""
+The Options class that manages the access to all options passed as
+parameters in salomeTools command lines
+"""
+
import getopt
import sys
+import pprint as PP
+
from . import printcolors
+import src
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+
class OptResult(object):
- '''An instance of this class will be the object manipulated
- in code of all salomeTools commands
- The aim of this class is to have an elegant syntax
- to manipulate the options.
- ex:
- print(options.level)
- 5
- '''
+ """
+ An instance of this class will be the object manipulated
+ in code of all salomeTools commands
+ The aim of this class is to have an elegant syntax to manipulate the options.
+
+ | Example:
+ | >> options, remainderArgs = command.parseArguments(args)
+ | >> print(options.output_verbose_level)
+ | >> 'INFO'
+ """
def __init__(self):
- '''Initialization
- '''
+ """Initialization
+ """
self.__dict__ = dict()
def __getattr__(self, name):
- '''Overwrite of the __getattr__ function
- to customize it for option usage
+ """
+ Overwrite of the __getattr__ function
+ to customize it for option usage
- :param name str: The attribute to get the value.
- :return: the value corresponding to the attribute.
- :rtype: str,int,list,boolean
- '''
+ :param name: (str) The attribute to get the value.
+ :return: (str int list boolean level)
+ the value corresponding to the attribute.
+ """
if name in self.__dict__:
return self.__dict__[name]
else:
- raise AttributeError(name + _(u" is not a valid option"))
+ raise AttributeError("--" + name + _(u" is not a valid option"))
def __setattr__(self, name, value):
- '''Overwrite of the __setattr__ function
- to customize it for option usage
+ """
+ Overwrite of the __setattr__ function
+ to customize it for option usage
- :param name str: The attribute to set.
- :param value str: The value corresponding to the attribute.
- :return: Nothing.
- :rtype: N\A
- '''
- object.__setattr__(self,name,value)
-
-class Options:
- '''Class to manage all salomeTools options
- '''
+ :param name: (str) The attribute to set.
+ :param value: (str) The value corresponding to the attribute.
+ :return: None
+ """
+ object.__setattr__(self, name, value)
+
+ def __repr__(self):
+ aStr = PP.pformat(self.__dict__)
+ res = "%s(\n %s\n)" % (self.__class__.__name__, aStr[1:-1])
+ return res
+
+class Options(object):
+ """
+ Class to manage all salomeTools options
+ """
def __init__(self):
- '''Initialization
- '''
+ """Initialization
+ """
# The options field stocks all options of a command
# in a list that contains dicts
self.options = []
# The list of available option type
- self.availableOptions = ["boolean", "string", "int", "float",
- "long", "list", "list2"]
+ self.availableOptions = "noboolean boolean string int float long list list2 level".split()
+ self.noArgOptions = "noboolean boolean".split()
self.default = None
+ self.results = {}
- def add_option(self, shortName, longName,
- optionType, destName, helpString="", default = None):
- '''Method to add an option to a command. It gets all attributes
- of an option and append it in the options field
+ def add_option(self, shortName, longName, optionType, destName, helpString="", default=None):
+ """
+ Add an option to a command. It gets all attributes
+ of an option and append it in the options field
- :param shortName str: The short name of the option
- (ex "l" for level option).
- :param longName str: The long name of the option
- (ex "level" for level option).
- :param optionType str: The type of the option (ex "int").
- :param destName str: The name that will be used in the code.
- :param helpString str: The text to display
- when user ask for help on a command.
- :return: Nothing.
- :rtype: N\A
- '''
+ :param shortName: (str)
+ The short name of the option (as '-l' for level option).
+ :param longName: (str)
+ The long name of the option (as '--level' for level option).
+ :param optionType: (str) The type of the option (ex "int").
+ :param destName: (str) The name that will be used in the code.
+ :param helpString: (str)
+ The text to display when user ask for help on a command.
+ :return: None
+ """
+ tmp = [o['shortName'] for o in self.options if o['shortName'] != '']
+ if shortName in tmp:
+ raise Exception("option '-%s' existing yet" % shortName)
+ tmp = [o['longName'] for o in self.options if o['longName'] != '']
+ if longName in tmp:
+ raise Exception("option '--%s' existing yet" % longName)
+
option = dict()
option['shortName'] = shortName
option['longName'] = longName
if optionType not in self.availableOptions:
- print("error optionType", optionType, "not available.")
- sys.exit(-1)
+ raise Exception("error optionType '%s' not available." % optionType)
option['optionType'] = optionType
option['destName'] = destName
option['helpString'] = helpString
option['result'] = default
+
self.options.append(option)
+
+ def getDetailOption(self, option):
+ """
+ for convenience
+
+ :return: (tuple) 4-elements (shortName, longName, optionType, helpString)
+ """
+ oos = option['shortName']
+ ool = option['longName']
+ oot = option['optionType']
+ ooh = option['helpString']
+ return (oos, ool, oot, ooh)
- def print_help(self):
- '''Method that display all options stored in self.options and there help
+ def get_help(self):
+ """
+ Returns all options stored in self.options
+ as help message colored string
- :return: Nothing.
- :rtype: N\A
- '''
+ :return: (str) colored string
+ """
+ msg = ""
# Do nothing if there are no options
- if len(self.options) == 0:
- return
- # for all options, print its values.
- # "shortname" is an optional field of the options
- print(printcolors.printcHeader(_("Available options are:")))
+ #there is -h option, always
+ #if len(self.options) == 0:
+ # return _("No available options.")
+
+ # for all options, gets its values.
+ # "shortname" is an mandatory field of the options, could be ''
+ msg += printcolors.printcHeader(_("Available options are:"))
for option in self.options:
- if 'shortName' in option and len(option['shortName']) > 0:
- print(" -%(shortName)1s, --%(longName)s"
- " (%(optionType)s)\n\t%(helpString)s\n" % option)
+ oos, ool, oot, ooh = self.getDetailOption(option)
+ if len(oos) > 0:
+ msg += "\n -%1s, --%s (%s)\n" % (oos, ool, oot)
else:
- print(" --%(longName)s (%(optionType)s)\n\t%(helpString)s\n"
- % option)
+ msg += "\n --%s (%s)\n" % (ool, oot)
+
+ msg += "%s\n" % self.indent(ooh, 10)
+ return msg
+ def indent(self, text, amount, car=" "):
+ """indent multi lines message"""
+ padding = amount * car
+ return ''.join(padding + line for line in text.splitlines(True))
+
def parse_args(self, argList=None):
- '''Method that instantiates the class OptResult
- that gives access to all options in the code
+ """
+ Instantiates the class OptResult
+ that gives access to all options in the code
- :param argList list: the raw list of arguments that were passed
- :return: optResult, args : optResult is the option instance
- to manipulate in the code. args
- is the full raw list of passed options
- :rtype: (class 'common.options.OptResult',list)
- '''
+ :param argList: (list) the raw list of arguments that were passed
+ :return: (OptResult, list) as (optResult, args)
+ optResult is the option instance to manipulate in the code.
+ args is the full raw list of passed options
+ """
+ # see https://pymotw.com/2/getopt/
if argList is None:
argList = sys.argv[1:]
+ DBG.write("parse_args", argList)
+ # DBG.write("options", self.options)
# format shortNameOption and longNameOption
# to make right arguments to getopt.getopt function
shortNameOption = ""
longNameOption = []
for option in self.options:
shortNameOption = shortNameOption + option['shortName']
- if option['shortName'] != "" and option['optionType'] != "boolean":
+ if option['shortName'] != "" and option['optionType'] not in self.noArgOptions:
shortNameOption = shortNameOption + ":"
if option['longName'] != "":
- if option['optionType'] != "boolean":
+ if option['optionType'] not in self.noArgOptions:
longNameOption.append(option['longName'] + "=")
else:
longNameOption.append(option['longName'])
# call to getopt.getopt function to get the option
# passed in the command regarding the available options
- optlist, args = getopt.getopt(argList, shortNameOption, longNameOption)
-
+ try:
+ optlist, args = getopt.getopt(argList, shortNameOption, longNameOption)
+ except Exception as e:
+ msg = str(e) + " on '%s'\n\n" % " ".join(argList) + self.get_help()
+ raise Exception(msg)
+
# instantiate and completing the optResult that will be returned
optResult = OptResult()
for option in self.options:
option['result'] = opt[1]
elif optionType == "boolean":
option['result'] = True
+ elif optionType == "noboolean":
+ option['result'] = False
elif optionType == "int":
option['result'] = int(opt[1])
elif optionType == "float":
if option['result'] is None:
option['result'] = list()
option['result'].append(opt[1])
+ elif optionType == "level": #logger logging levels
+ option['result'] = self.filterLevel(opt[1])
elif optionType == "list2":
if option['result'] is None:
option['result'] = list()
- if opt[1].find(",") == -1:
- option['result'].append(opt[1])
- else:
- elts = filter(lambda l: len(l) > 0, opt[1].split(","))
- option['result'].extend(elts)
+ option['result'] = self.filterList2(opt[1])
optResult.__setattr__(option['destName'], option['result'])
# free the option in order to be able to make
# a new free call of options (API case)
option['result'] = None
+
+ self.results = {"optlist": optlist, "optResult": optResult, "args": args, "argList": argList}
+ DBG.write("results", self.results)
return optResult, args
+
+ def filterLevel(self, aLevel):
+ """filter level logging values"""
+ import src.loggingSat as LOG
+ aLev = aLevel.upper()
+ knownLevels = LOG._knownLevels
+ maxLen = max([len(i) for i in knownLevels])
+ for i in range(maxLen):
+ for lev in knownLevels:
+ if aLev == lev[:i]:
+ DBG.write("filterLevel", "%s -> %s" % (aLevel, lev))
+ return lev
+ msg = "Unknown level '%s', accepted are:\n%s" % (aLev, ", ".join(knownLevels))
+ raise Exception(msg)
+
+ def filterList2(self, aStr):
+ """filter a list as 'KERNEL,YACS,etc.'"""
+ aList = aStr.strip().split(",")
+ # fix list leading ',' as ',KERNEL,...'
+ aList = [i for i in aList if i != ""] # split old list leadin "," as ",KERNEL,ETC..."
+ return aList
+
+
+ def __repr__(self):
+ """
+ repr for only self.options and self.results (if present)
+ """
+ aDict = {'options': self.options, 'results': self.results}
+ aStr = PP.pformat(aDict)
+ res = "%s(\n %s\n)" % (self.__class__.__name__, aStr[1:-1])
+ return res
+
+ def __str__(self):
+ """
+ str for only resume expected self.options
+ """
+ #aDict = [(k["longName"], k["shortName", k["helpString"]) for k in self.options}
+ #aList = [(k, self.options[k]) for k in sorted(self.options.keys())]
+ aDict = {}
+ for o in self.options:
+ aDict[o["longName"]] = (o["shortName"], o["helpString"])
+ aStr = PP.pformat(aDict)
+ res = "%s(\n %s)" % (self.__class__.__name__, aStr[1:-1])
+ return res
+
+ def debug_write(self):
+ DBG.write("options and results", self, True)
+
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2018-20xx CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+This file contains ReturnCode class
+
+| Usage:
+| >> import returnCode as RCO
+"""
+
+import pprint as PP
+
+# global module variable
+_OK_STATUS = "OK"
+_KO_STATUS = "KO"
+_NA_STATUS = "NA" # not applicable
+_UNKNOWN_STATUS = "ND" # not defined
+_KNOWNFAILURE_STATUS = "KF"
+_TIMEOUT_STATUS = "TIMEOUT"
+
+#####################################################
+class ReturnCode(object):
+ """
+ assume simple return code for methods, with explanation as 'why'.
+ Obviously why is 'why it is not OK',
+ but also why is 'why it is OK' (if you want).
+ Optionaly contains a return value as self.getValue()
+
+ | Usage:
+ | >> import returnCode as RCO
+ |
+ | >> aValue = doSomethingToReturn()
+ | >> return RCO.ReturnCode("KO", "there is no problem here", aValue)
+ | >> return RCO.ReturnCode("KO", "there is a problem here because etc", None)
+ | >> return RCO.ReturnCode("TIMEOUT_STATUS", "too long here because etc")
+ | >> return RCO.ReturnCode("NA", "not applicable here because etc")
+ |
+ | >> rc = doSomething()
+ | >> print("short returnCode string", str(rc))
+ | >> print("long returnCode string with value", repr(rc))
+ |
+ | >> rc1 = RCO.ReturnCode("OK", ...)
+ | >> rc2 = RCO.ReturnCode("KO", ...)
+ | >> rcFinal = rc1 + rc2
+ | >> print("long returnCode string with value", repr(rcFinal)) # KO!
+ |
+ | >> rc = doSomething()
+ | >> if rc.isOk(): doSomethingAsOK()
+ | >> if not rc.isOk(): doSomethingAsKO()
+ |
+ | >> rc = doSomething().raiseIfKo() # raise Exception if KO
+ | >> doSomethingWithValue(rc.getValue()) # here i am sure that is OK
+ """
+
+ # redunctant but useful class variables
+ OK_STATUS = _OK_STATUS
+ KO_STATUS = _KO_STATUS
+ NA_STATUS = _NA_STATUS # not applicable
+ UNKNOWN_STATUS = _UNKNOWN_STATUS # not defined
+ KNOWNFAILURE_STATUS = _KNOWNFAILURE_STATUS
+ TIMEOUT_STATUS = _TIMEOUT_STATUS
+
+ # an integer for sys.exit(anInteger)
+ # OKSYS and KOSYS seems equal on linux or windows
+ OKSYS = 0 # OK
+ KOSYS = 1 # KO
+ NASYS = 2 # KO not applicable return code
+ NDSYS = 3 # KO not defined return code
+ KFSYS = 4 # KO known failure return code
+ TOSYS = 5 # KO time out
+
+ _TOSYS = {
+ OK_STATUS: OKSYS,
+ KO_STATUS: KOSYS,
+ NA_STATUS: NASYS,
+ UNKNOWN_STATUS: NDSYS,
+ KNOWNFAILURE_STATUS: KFSYS,
+ TIMEOUT_STATUS: TOSYS,
+ }
+ _DEFAULT_WHY = "No given explanation"
+ _DEFAULT_VALUE = None
+
+ def __init__(self, status=None, why=None, value=None):
+ self._why = self._DEFAULT_WHY
+ self._value = self._DEFAULT_VALUE
+ if status is None:
+ self._status = self.UNKNOWN_STATUS
+ else:
+ self.setStatus(status, why, value)
+
+ def __repr__(self):
+ """complete with value, 'ok, why, value' message"""
+ res = '%s: %s --value: %s' % (self._status, self._why, PP.pformat(self._value))
+ return res
+
+ def __str__(self):
+ """without value, only simple 'ok, why' message"""
+ res = '%s: %s' % (self._status, self._why)
+ return res
+
+ def indent(self, text, amount=5, ch=' '):
+ """indent multi lines message"""
+ padding = amount * ch
+ res = ''.join(padding + line for line in text.splitlines(True))
+ return res[amount:]
+
+ def __add__(self, rc2):
+ """allows expression 'returnCode1 + returnCode2 + ...' """
+ isOk = self.isOk() and rc2.isOk()
+ newWhy = self._toList(self.getWhy()) + self._toList(rc2.getWhy())
+ newValue = self._toList(self.getValue()) + self._toList(rc2.getValue())
+ if isOk:
+ return ReturnCode("OK", newWhy, newValue)
+ else:
+ return ReturnCode("KO", newWhy, newValue)
+
+ def __radd__(self, other):
+ # see http://www.marinamele.com/2014/04/modifying-add-method-of-python-class.html
+ if other == 0:
+ return self
+ else:
+ return self.__add__(other)
+
+ def _toList(self, strOrList):
+ """internal use"""
+ if type(strOrList) is not list:
+ return [strOrList]
+ else:
+ return strOrList
+
+ def toSys(self):
+ """return system return code as bash or bat"""
+ try:
+ return self._TOSYS[self._status]
+ except:
+ return self._TOSYS[self.NA_STATUS]
+
+ def toXmlPassed(self):
+ """return xml return code as '0' (passed) or '1' (not passed)"""
+ if self.isOk():
+ return "0"
+ else:
+ return "1"
+
+ def getWhy(self):
+ """return why as str or list if sum or some ReturnCode"""
+ return self._why
+
+ def setWhy(self, why):
+ self._why = why
+
+ def getValue(self):
+ return self._value
+
+ def setValue(self, value):
+ """choice as not deep copying if mutables value"""
+ # TODO deepcopy maybe for value, not yet
+ self._value = value
+
+ def setStatus(self, status, why=None, value=None):
+ if why is None:
+ aWhy = self._DEFAULT_WHY
+ else:
+ aWhy = why
+
+ if status in self._TOSYS.keys():
+ self._status = status
+ self._why = aWhy
+ else:
+ self._status = self.NA_STATUS
+ self._why = "Error status '%s' for '%s'" % (status, aWhy)
+
+ if value is not None:
+ # TODO deepcopy maybe for value, not yet
+ self._value = value
+ else:
+ self._value = self._DEFAULT_VALUE
+
+ def getStatus(self):
+ return self._status
+
+ def isOk(self):
+ """
+ return True if ok.
+ inexisting method isKo(), use more explicit/readability 'if not res.isOk()'
+ """
+ return (self._status == self.OK_STATUS)
+
+ def raiseIfKo(self):
+ """
+ raise an exception with message why if not ok, else return self.
+ This trick is to write usage
+
+ | Usage:
+ | >> rc = doSomething().raiseIfKo() # raise Exception if KO
+ | >> doSomethingWithValue(rc.getValue()) # here i am sure that is OK
+ """
+ if self.isOk():
+ return self
+ else:
+ raise Exception(self.getWhy())
+
+def ReturnCodeFromList(aListOfReturnCodes):
+ """
+ Create ReturnCode from list of ReturnCode
+
+ convenience over "+" operand
+ """
+ res = "OK"
+ whyes = []
+ for rc in aListOfReturnCodes:
+ if not rc.isOk():
+ res = "KO"
+ whyes.append(str(rc))
+ reswhy = "\n ".join(whyes)
+ return ReturnCode(res, "\n " + reswhy)
+
+
\ No newline at end of file
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+# Copyright (C) 2010-2012 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+This file is the main API file for salomeTools
+
+| Warning: NO '__main__ ' call allowed,
+| Use 'sat' (in parent directory)
+|
+| Usage: see file ../sat
+"""
+
+import sys
+
+# exit OKSYS and KOSYS seems equal on linux or windows
+_OKSYS = 0 # OK
+_KOSYS = 1 # KO
+
+########################################################################
+# NO __main__ entry allowed, use sat
+########################################################################
+if __name__ == "__main__":
+ msg = """
+ERROR: 'salomeTools.py' is not main command entry (CLI) for salomeTools.
+ Use 'sat' instead.\n\n"""
+ sys.stderr.write(msg)
+ sys.exit(_KOSYS)
+
+# python imports
+import os
+import re
+import tempfile
+import imp
+import types
+import gettext
+import traceback
+
+import src
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+import src.returnCode as RCO # Easy (ok/ko, why) return methods code
+import src.utilsSat as UTS
+
+# get path to salomeTools sources
+satdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+srcdir = os.path.join(satdir, 'src')
+cmdsdir = os.path.join(satdir, 'commands')
+
+import commands.config as CONFIG
+
+# load resources for internationalization
+gettext.install("salomeTools", os.path.join(srcdir, "i18n"))
+
+_LANG = os.environ["LANG"] # original locale
+
+# The possible hooks :
+# pre is for hooks to be executed before commands
+# post is for hooks to be executed after commands
+C_PRE_HOOK = "pre"
+C_POST_HOOK = "post"
+
+# Define all possible option for salomeTools command : sat <option> <args>
+parser = src.options.Options()
+parser.add_option('h', 'help', 'boolean', 'help',
+ _("shows global help or help on a specific command."))
+parser.add_option('o', 'overwrite', 'list', "overwrite",
+ _("overwrites a configuration parameters."))
+parser.add_option('g', 'debug', 'boolean', 'debug_mode',
+ _("run salomeTools in debug mode."))
+parser.add_option('v', 'verbose', 'int', "output_verbose_level",
+ _("change output verbose level (default is 3)."))
+parser.add_option('b', 'batch', 'boolean', "batch",
+ _("batch mode (no question)."))
+parser.add_option('t', 'all_in_terminal', 'boolean', "all_in_terminal",
+ _("All traces in the terminal (for example compilation logs)."))
+parser.add_option('l', 'logs_paths_in_file', 'string', "logs_paths_in_file",
+ _("Put the command result and paths to log files in ."))
+
+
+########################################################################
+# utility methods
+########################################################################
+def find_command_list(dirPath):
+ ''' Parse files in dirPath that end with .py : it gives commands list
+
+ :param dirPath str: The directory path where to search the commands
+ :return: cmd_list : the list containing the commands name
+ :rtype: list
+ '''
+ cmd_list = []
+ for item in os.listdir(dirPath):
+ if "__init__" in item: continue # skip __init__.py
+ if item.endswith('.py'):
+ cmd_list.append(item[:-len('.py')])
+ return cmd_list
+
+
+# The list of valid salomeTools commands from cmdsdir
+# ['config', 'compile', 'prepare', ...]
+_COMMANDS_NAMES = find_command_list(cmdsdir)
+lCommand = find_command_list(cmdsdir) # obsolete
+
+def getCommandsList():
+ """Gives commands list (as basename of files .py in directory commands"""
+ return _COMMANDS_NAMES
+
+def launchSat(command, logger=None):
+ """
+ launch sat as subprocess.Popen
+ command as string ('sat --help' for example)
+ used for unittest, or else...
+
+ :return: RCO.ReturnCode with getValue as subprocess.Popen output
+ """
+ if "sat" not in command.split()[0]:
+ raise Exception(_("Not a valid command for launchSat: '%s'") % command)
+ env = dict(os.environ) # copy
+ # theorically useless, in user environ $PATH,
+ # on ne sait jamais
+ # https://docs.python.org/2/library/os.html
+ # On some platforms, including FreeBSD and Mac OS X,
+ # setting environ may cause memory leaks.
+ # see test/initializeTest.py
+ if satdir not in env["PATH"].split(":"):
+ env["PATH"] = satdir + ":" + env["PATH"]
+ # TODO setLocale not 'fr' on subprocesses, why not?
+ # env["LANG"] == ''
+ res = UTS.Popen(command, env=env, logger=logger) # logger or not.
+ return res
+
+def setNotLocale():
+ """force english at any moment"""
+ os.environ["LANG"] = ''
+ gettext.install("salomeTools", os.path.join(srcdir, "i18n"))
+ DBG.write("setNotLocale", os.environ["LANG"])
+
+def setLocale():
+ """
+ reset initial locale at any moment
+ 'fr' or else (TODO) from initial environment var '$LANG'
+ 'i18n' as 'internationalization'
+ """
+ os.environ["LANG"] = _LANG
+ gettext.install("salomeTools", os.path.join(srcdir, "i18n"))
+ DBG.write("setLocale", os.environ["LANG"])
+
+def getVersion():
+ """get version number as string"""
+ return src.__version__
+
+def assumeAsList(strOrList):
+ """return a list as sys.argv if string"""
+ if type(strOrList) is list:
+ return list(strOrList) # copy
+ else:
+ res = strOrList.split(" ")
+ return [r for r in res if r != ""] # supposed string to split for convenience
+
+
+########################################################################
+# Sat class
+########################################################################
+class Sat(object):
+ """
+ The main class that stores all the commands of salomeTools
+ """
+ def __init__(self, logger=None):
+ """
+ Initialization
+
+ :param logger: The logger, if set from parent
+ """
+ # initialization of class attributes
+ self.__dict__ = dict()
+ # logger from parent
+ # future only one logger from src.loggingSimple at 2018/06
+ # to replace old loggers from src.logger
+ self.mainLogger = logger
+ src.logger.setCurrentLogger(logger)
+ self.cfg = None # the config that will be read using pyconf module
+ self.arguments = None
+ self.remaindersArgs = None
+ self.options = None # the options passed to salomeTools
+ self.datadir = None # default value will be <salomeTools root>/data
+
+ def obsolete__init__(self, opt='', datadir=None):
+ '''Initialization
+
+ :param opt str: The sat options
+ :param: datadir str : the directory that contain all the external
+ data (like software pyconf and software scripts)
+ '''
+ # Read the salomeTools options (the list of possible options is
+ # at the beginning of this file)
+ argList = self.assumeAsList(opt)
+ options, argus = parser.parse_args(argList)
+
+ # initialization of class attributes
+ self.__dict__ = dict()
+ self.cfg = None # the config that will be read using pyconf module
+ self.arguments = argList
+ self.options = options # the options passed to salomeTools
+ self.datadir = datadir # default value will be <salomeTools root>/data
+ # set the commands by calling the dedicated function
+ self._setCommands(cmdsdir)
+
+ # if the help option has been called, print help and exit
+ if options.help:
+ try:
+ self.print_help(argus)
+ sys.exit(0)
+ except Exception as exc:
+ write_exception(exc)
+ sys.exit(1)
+
+ ##################################################################
+ def setInternals(self, opt=None, datadir=None):
+ """set the commands by calling the dedicated function etc..."""
+ options, remaindersArgs = parser.parse_args(opt)
+ self.arguments = opt
+ self.options = options # the generic options passed to salomeTools
+ self.remaindersArgs = remaindersArgs # the command and their options
+ self.datadir = datadir # default value will be <salomeTools root>/data
+ self._setCommands(cmdsdir)
+
+ def getConfig(self):
+ return self.cfg
+
+ ##################################################################
+ def execute_cli(self, args):
+ """
+ assume launch command from args, pyconf config known yet
+ """
+ argList = self.assumeAsList(args)
+ # no arguments : print general help
+ if len(argList) == 0:
+ self.mainLogger.info(get_help())
+ return RCO.ReturnCode("OK", "no args as sat --help")
+
+ self.setInternals(opt=argList, datadir=None)
+
+ # print general help on -h
+ if self.options.help and len(self.remaindersArgs) == 0:
+ self.mainLogger.info(get_help())
+ return RCO.ReturnCode("OK", "help done")
+
+ DBG.write("options", self.options)
+ DBG.write("remaindersArgs", self.remaindersArgs)
+
+ if len(self.remaindersArgs) == 0:
+ return RCO.ReturnCode("KO", "Nothing to do")
+
+ # print command help on -h --help after name command
+ if "-h" in self.remaindersArgs or "--help" in self.remaindersArgs:
+ self.mainLogger.info(self.get_help(self.remaindersArgs))
+ return RCO.ReturnCode("OK", "sat --help command")
+
+ # print command help on -h and continue if something do do more
+ if self.options.help and len(self.remaindersArgs) >= 1:
+ self.mainLogger.info(self.get_help(self.remaindersArgs))
+
+ command = self.remaindersArgs[0]
+ # get dynamically the command function to call
+ fun_command = self.__getattr__(command)
+ # Run the command using the arguments
+ code = fun_command(self.remaindersArgs[1:])
+
+ if code is None: code = 0 # what?! do not know why so respect history
+
+ # return salomeTools command with the right message
+ # code (0 if no errors, else 1)
+ if code == _KOSYS:
+ return RCO.ReturnCode("KO", "problem on execute_cli 'sat %s'" % " ".join(argList))
+ else:
+ return RCO.ReturnCode("OK", "execute_cli 'sat %s' done" % " ".join(argList))
+
+ '''
+ # OBSOLETE... see file ../sat
+ # ###############################
+ # MAIN : terminal command usage #
+ # ###############################
+ if __name__ == "__main__":
+ # Initialize the code that will be returned by the terminal command
+ code = 0
+ (options, args) = parser.parse_args(sys.argv[1:])
+
+ # no arguments : print general help
+ if len(args) == 0:
+ print_help()
+ sys.exit(0)
+
+ # instantiate the salomeTools class with correct options
+ sat = Sat(sys.argv[1:])
+ # the command called
+ command = args[0]
+ # get dynamically the command function to call
+ fun_command = sat.__getattr__(command)
+ # Run the command using the arguments
+ code = fun_command(args[1:])
+
+ # exit salomeTools with the right code (0 if no errors, else 1)
+ if code is None: code = 0
+ sys.exit(code)
+
+ '''
+
+ def __getattr__(self, name):
+ '''
+ overwrite of __getattr__ function in order to display
+ a customized message in case of a wrong call
+
+ :param name str: The name of the attribute
+ '''
+ if name in self.__dict__:
+ return self.__dict__[name]
+ else:
+ raise AttributeError(name + _(" is not a valid command"))
+
+ def assumeAsList(self, strOrList):
+ # DBG.write("Sat assumeAsList", strOrList, True)
+ return assumeAsList(strOrList)
+
+ def _setCommands(self, dirPath):
+ '''set class attributes corresponding to all commands that are
+ in the dirPath directory
+
+ :param dirPath str: The directory path containing the commands
+ '''
+ # loop on the commands name
+ for nameCmd in lCommand:
+ DBG.write("load module command '%s.py'" % nameCmd, "")
+ # Exception for the jobs command that requires the paramiko module
+ if nameCmd == "jobs":
+ try:
+ saveout = sys.stderr
+ ff = tempfile.TemporaryFile()
+ sys.stderr = ff
+ import paramiko
+ sys.stderr = saveout
+ except:
+ sys.stderr = saveout
+ continue
+
+ # load the module that has name nameCmd in dirPath
+ (file_, pathname, description) = imp.find_module(nameCmd, [dirPath])
+ module = imp.load_module(nameCmd, file_, pathname, description)
+
+ def run_command(args='',
+ options=None,
+ batch = False,
+ verbose = -1,
+ logger_add_link = None):
+ '''
+ The function that will load the configuration (all pyconf)
+ and return the function run of the command corresponding to module
+
+ :param args str: The arguments of the command
+ '''
+ # Make sure the internationalization is available
+ gettext.install('salomeTools', os.path.join(satdir, 'src', 'i18n'))
+
+ # Get the arguments in a list and remove the empty elements
+ if type(args) == type(''):
+ # split by spaces without considering spaces in quotes
+ argv_0 = re.findall(r'(?:"[^"]*"|[^\s"])+', args)
+ else:
+ argv_0 = args
+
+ if argv_0 != ['']:
+ while "" in argv_0: argv_0.remove("")
+
+ # Format the argv list in order to prevent strings
+ # that contain a blank to be separated
+ argv = []
+ elem_old = ""
+ for elem in argv_0:
+ if argv == [] or elem_old.startswith("-") or elem.startswith("-"):
+ argv.append(elem)
+ else:
+ argv[-1] += " " + elem
+ elem_old = elem
+
+ # if it is provided by the command line, get the application
+ appliToLoad = None
+ if argv not in [[''], []] and argv[0][0] != "-":
+ appliToLoad = argv[0].rstrip('*')
+ argv = argv[1:]
+
+ # Check if the global options of salomeTools have to be changed
+ if options:
+ options_save = self.options
+ self.options = options
+
+ # read the configuration from all the pyconf files
+ cfgManager = CONFIG.ConfigManager()
+ self.cfg = cfgManager.get_config(datadir=self.datadir,
+ application=appliToLoad,
+ options=self.options,
+ command=__nameCmd__)
+
+ # Set the verbose mode if called
+ if verbose > -1:
+ verbose_save = self.options.output_verbose_level
+ self.options.__setattr__("output_verbose_level", verbose)
+
+ # Set batch mode if called
+ if batch:
+ batch_save = self.options.batch
+ self.options.__setattr__("batch", True)
+
+ # set output level
+ if self.options.output_verbose_level is not None:
+ self.cfg.USER.output_verbose_level = self.options.output_verbose_level
+ if self.cfg.USER.output_verbose_level < 1:
+ self.cfg.USER.output_verbose_level = 0
+ silent = (self.cfg.USER.output_verbose_level == 0)
+
+ # create log file
+ micro_command = False
+ if logger_add_link:
+ micro_command = True
+ logger_command = src.logger.Logger(self.cfg,
+ silent_sysstd=silent,
+ all_in_terminal=self.options.all_in_terminal,
+ micro_command=micro_command)
+
+ # Check that the path given by the logs_paths_in_file option
+ # is a file path that can be written
+ if self.options.logs_paths_in_file and not micro_command:
+ try:
+ self.options.logs_paths_in_file = os.path.abspath(
+ self.options.logs_paths_in_file)
+ dir_file = os.path.dirname(self.options.logs_paths_in_file)
+ if not os.path.exists(dir_file):
+ os.makedirs(dir_file)
+ if os.path.exists(self.options.logs_paths_in_file):
+ os.remove(self.options.logs_paths_in_file)
+ file_test = open(self.options.logs_paths_in_file, "w")
+ file_test.close()
+ except Exception as e:
+ msg = _("WARNING: the logs_paths_in_file option will "
+ "not be taken into account.\nHere is the error:")
+ logger_command.write("%s\n%s\n\n" % (
+ src.printcolors.printcWarning(msg),
+ str(e)))
+ self.options.logs_paths_in_file = None
+
+ options_launched = ""
+ res = None
+ try:
+ # Execute the hooks (if there is any)
+ # and run method of the command
+ self.run_hook(__nameCmd__, C_PRE_HOOK, logger_command)
+ res = __module__.run(argv, self, logger_command)
+ self.run_hook(__nameCmd__, C_POST_HOOK, logger_command)
+ if res is None:
+ res = 0
+
+ except Exception as e:
+ # Get error
+ logger_command.write("\n***** ", 1)
+ logger_command.write(src.printcolors.printcError(
+ "salomeTools ERROR:"), 1)
+ logger_command.write("\n" + str(e) + "\n\n", 1)
+ # get stack
+ __, __, exc_traceback = sys.exc_info()
+ fp = tempfile.TemporaryFile()
+ traceback.print_tb(exc_traceback, file=fp)
+ fp.seek(0)
+ stack = fp.read()
+ verbosity = 5
+ if self.options.debug_mode:
+ verbosity = 1
+ logger_command.write("TRACEBACK: %s" % stack.replace('"',"'"),
+ verbosity)
+ finally:
+ # set res if it is not set in the command
+ if res is None:
+ res = 1
+
+ # come back to the original global options
+ if options:
+ options_launched = get_text_from_options(self.options)
+ self.options = options_save
+
+ # come back in the original batch mode if
+ # batch argument was called
+ if batch:
+ self.options.__setattr__("batch", batch_save)
+
+ # come back in the original verbose mode if
+ # verbose argument was called
+ if verbose > -1:
+ self.options.__setattr__("output_verbose_level",
+ verbose_save)
+ # put final attributes in xml log file
+ # (end time, total time, ...) and write it
+ launchedCommand = ' '.join([self.cfg.VARS.salometoolsway +
+ os.path.sep +
+ 'sat',
+ options_launched,
+ __nameCmd__,
+ ' '.join(argv_0)])
+ # TODO may be no need as call escapeSequence xml
+ launchedCommand = launchedCommand.replace('"', "'")
+
+ # Add a link to the parent command
+ if logger_add_link is not None:
+ logger_add_link.add_link(logger_command.logFileName,
+ __nameCmd__,
+ res,
+ launchedCommand)
+ logger_add_link.l_logFiles += logger_command.l_logFiles
+
+ # Put the final attributes corresponding to end time and
+ # Write the file to the hard drive
+ logger_command.end_write(
+ {"launchedCommand" : launchedCommand})
+
+ if res != 0:
+ res = 1
+
+ # print the log file path if
+ # the maximum verbose mode is invoked
+ if not micro_command:
+ logger_command.write("\nPath to the xml log file :\n",
+ 5)
+ logger_command.write("%s\n\n" % src.printcolors.printcInfo(
+ logger_command.logFilePath), 5)
+
+ # If the logs_paths_in_file was called, write the result
+ # and log files in the given file path
+ if self.options.logs_paths_in_file and not micro_command:
+ file_res = open(self.options.logs_paths_in_file, "w")
+ file_res.write(str(res) + "\n")
+ for i, filepath in enumerate(logger_command.l_logFiles):
+ file_res.write(filepath)
+ if i < len(logger_command.l_logFiles):
+ file_res.write("\n")
+ file_res.flush()
+
+ return res
+
+ # Make sure that run_command will be redefined
+ # at each iteration of the loop
+ globals_up = {}
+ globals_up.update(run_command.__globals__)
+ globals_up.update({'__nameCmd__': nameCmd, '__module__' : module})
+ func = types.FunctionType(run_command.__code__,
+ globals_up,
+ run_command.__name__,
+ run_command.__defaults__,
+ run_command.__closure__)
+
+ # set the attribute corresponding to the command
+ self.__setattr__(nameCmd, func)
+
+ def run_hook(self, cmd_name, hook_type, logger):
+ '''Execute a hook file for a given command regarding the fact
+ it is pre or post
+
+ :param cmd_name str: The the command on which execute the hook
+ :param hook_type str: pre or post
+ :param logger Logger: the logging instance to use for the prints
+ '''
+ # The hooks must be defined in the application pyconf
+ # So, if there is no application, do not do anything
+ if not src.config_has_application(self.cfg):
+ return
+
+ # The hooks must be defined in the application pyconf in the
+ # APPLICATION section, hook : { command : 'script_path.py'}
+ if "hook" not in self.cfg.APPLICATION \
+ or cmd_name not in self.cfg.APPLICATION.hook:
+ return
+
+ # Get the hook_script path and verify that it exists
+ hook_script_path = self.cfg.APPLICATION.hook[cmd_name]
+ if not os.path.exists(hook_script_path):
+ raise src.SatException(_("Hook script not found: %s") %
+ hook_script_path)
+
+ # Try to execute the script, catch the exception if it fails
+ try:
+ # import the module (in the sense of python)
+ pymodule = imp.load_source(cmd_name, hook_script_path)
+
+ # format a message to be printed at hook execution
+ msg = src.printcolors.printcWarning(_("Run hook script"))
+ msg = "%s: %s\n" % (msg,
+ src.printcolors.printcInfo(hook_script_path))
+
+ # run the function run_pre_hook if this function is called
+ # before the command, run_post_hook if it is called after
+ if hook_type == C_PRE_HOOK and "run_pre_hook" in dir(pymodule):
+ logger.write(msg, 1)
+ pymodule.run_pre_hook(self.cfg, logger)
+ elif hook_type == C_POST_HOOK and "run_post_hook" in dir(pymodule):
+ logger.write(msg, 1)
+ pymodule.run_post_hook(self.cfg, logger)
+
+ except Exception as exc:
+ msg = _("Unable to run hook script: %s") % hook_script_path
+ msg += "\n" + str(exc)
+ raise src.SatException(msg)
+
+ def get_help(self, opt):
+ '''Prints help for a command. Function called when "sat -h <command>"
+
+ :param argv str: the options passed (to get the command name)
+ '''
+ # if no command as argument (sat -h)
+ if len(opt)==0:
+ return get_help()
+ # get command name
+ command = opt[0]
+ # read the configuration from all the pyconf files
+ cfgManager = CONFIG.ConfigManager()
+ self.cfg = cfgManager.get_config(datadir=self.datadir)
+
+ # Check if this command exists
+ if not hasattr(self, command):
+ raise src.SatException(_("Command '%s' does not exist") % command)
+
+ # Print salomeTools version
+ msg = "\n" + get_version() + "\n\n"
+
+ # load the module
+ module = self.get_module(command)
+
+ # print the description of the command that is done in the command file
+ if hasattr( module, "description" ) :
+ msg += src.printcolors.printcHeader( _("Description:") )
+ msg += '\n' + module.description() + '\n\n'
+
+ # print the description of the command options
+ if hasattr( module, "parser" ):
+ msg += module.parser.get_help()
+
+ msg += "\n -h, --help (boolean)\n shows help on command.\n"
+ return msg
+
+ def get_module(self, module):
+ '''Loads a command. Function called only by print_help
+
+ :param module str: the command to load
+ '''
+ # Check if this command exists
+ if not hasattr(self, module):
+ raise src.SatException(_("Command '%s' does not exist") % module)
+
+ # load the module
+ (file_, pathname, description) = imp.find_module(module, [cmdsdir])
+ module = imp.load_module(module, file_, pathname, description)
+ return module
+
+##################################################################
+def get_text_from_options(options):
+ text_options = ""
+ for attr in dir(options):
+ if attr.startswith("__"):
+ continue
+ if options.__getattr__(attr) != None:
+ option_contain = options.__getattr__(attr)
+ if type(option_contain)==type([]):
+ option_contain = ",".join(option_contain)
+ if type(option_contain)==type(True):
+ option_contain = ""
+ text_options+= "--%s %s " % (attr, option_contain)
+ return text_options
+
+
+def get_version():
+ '''
+ get colorized salomeTools version (in src/internal_config/salomeTools.pyconf).
+ returns string
+ '''
+ # read the config
+ cfgManager = CONFIG.ConfigManager()
+ cfg = cfgManager.get_config()
+ # print the key corresponding to salomeTools version
+ msg = (src.printcolors.printcHeader( _("Version: ") ) + cfg.INTERNAL.sat_version)
+ return msg
+
+
+def get_help():
+ '''
+ get salomeTools general help.
+ returns string
+ '''
+ msg = "\n" + get_version() + "\n\n"
+ msg += src.printcolors.printcHeader( _("Usage: ") ) + \
+ "sat [sat_options] <command> [product] [command_options]\n\n"
+
+ msg += parser.get_help() + "\n"
+
+ # display all the available commands.
+ msg += src.printcolors.printcHeader(_("Available commands are:")) + "\n"
+ for command in lCommand:
+ msg += " - %s\n" % (command)
+
+ msg += "\n"
+ # Explain how to get the help for a specific command
+ msg += src.printcolors.printcHeader(
+ _("Getting the help for a specific command: ")) + \
+ "\n>> sat --help <command>\n"
+ return msg
+
+def write_exception(exc):
+ '''write exception in case of error in a command
+
+ :param exc exception: the exception to print
+ '''
+ sys.stderr.write("\n***** ")
+ sys.stderr.write(src.printcolors.printcError("salomeTools ERROR:"))
+ sys.stderr.write("\n" + str(exc) + "\n")
+
+
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+utilities for sat
+general useful simple methods
+all-in-one import srs.utilsSat as UTS
+
+| Usage:
+| >> import srsc.utilsSat as UTS
+| >> UTS.Popen('ls && etc...', ...)
+"""
+
+import os
+import shutil
+import errno
+import stat
+import time
+
+import re
+import tempfile
+import subprocess as SP
+
+import src.returnCode as RCO
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+
+
+##############################################################################
+# subprocess utilities, with logger functionnalities (trace etc.)
+##############################################################################
+
+def Popen(command, shell=True, cwd=None, env=None, stdout=SP.PIPE, stderr=SP.PIPE, logger=None):
+ """
+ make subprocess.Popen(cmd), with
+ call logger.trace and logger.error if problem as returncode != 0
+ """
+ if True: #try:
+ proc = SP.Popen(command, shell=shell, cwd=cwd, env=env, stdout=stdout, stderr=SP.STDOUT)
+ res_out, res_err = proc.communicate() # res_err = None as stderr=SP.STDOUT
+ rc = proc.returncode
+
+ DBG.write("Popen logger returncode", (rc, res_out))
+
+ if rc == 0:
+ if logger is not None:
+ logger.trace("<OK> launch command rc=%s cwd=<info>%s<reset>:\n%s" % (rc, cwd, command))
+ logger.trace("<OK> result command stdout&stderr:\n%s" % res_out)
+ return RCO.ReturnCode("OK", "Popen command done", value=res_out)
+ else:
+ if logger is not None:
+ logger.warning("<KO> launch command rc=%s cwd=<info>%s<reset>:\n%s" % (rc, cwd, command))
+ logger.warning("<KO> result command stdout&stderr:\n%s" % res_out)
+ return RCO.ReturnCode("KO", "Popen command problem", value=res_out)
+ else: #except Exception as e:
+ logger.error("<KO> launch command cwd=%s:\n%s" % (cwd, command))
+ logger.error("launch command exception:\n%s" % e)
+ return RCO.ReturnCode("KO", "Popen command problem")
+
+
+def sleep(sec):
+ time.sleep(sec)
src.ensure_path_exists(os.path.dirname(filePath))
# Initialize the field that contain the xml in memory
self.xmlroot = etree.Element(rootname, attrib = attrib)
-
- def write_tree(self, stylesheet=None, file_path = None):
+
+ def escapeSequence(self, aStr):
+ """
+ See xml specification:
+ The ampersand character(&) and the left angle bracket(<) MUST NOT appear in their
+ literal form, except when used as markup delimiters, or within a comment, a processing
+ instruction, or a CDATA section.
+ If they are needed elsewhere, they MUST be escaped using either numeric character references
+ or the strings '&' and '<' respectively.
+ The right angle bracket(>) may be
+ represented using the string '>', and MUST,
+ for compatibility, be escaped using either '>' or a character reference
+ when it appears in the string " ]]> " in content,
+ when that string is not marking the end of a CDATA section.
+ You can use these escape sequences:
+ < (less - than) as < or <
+ > (greater - than) as > or >
+ & (ampersand) as &
+ ' (apostrophe or single quote) as '
+ " (double-quote) as "
+ """
+ replaces = [ ('&', '&'),
+ ('>', '>'),
+ ('<', '<'),
+ ("'", '''),
+ ('"', '"'),
+ ]
+ res = aStr
+ for ini, fin in replaces: # order matters
+ res = res.replace(ini, fin)
+ return res
+
+
+def write_tree(self, stylesheet=None, file_path = None):
'''Write the xml tree in the log file path. Add the stylesheet if asked.
:param stylesheet str: The stylesheet to apply to the xml file
--- /dev/null
+
+APPLICATION :
+{
+ name : 'APPLI_TEST'
+ workdir : $LOCAL.workdir + $VARS.sep + $APPLICATION.name + '-' + $VARS.dist
+ base : 'base'
+ tag : 'master'
+ get_method : 'git'
+ environ :
+ {
+ ACCEPT_SALOME_WARNINGS : '1'
+ LC_NUMERIC : 'C'
+ TESTS_ROOT_DIR : "/tmp/" + $VARS.user+ "/TESTS/APPLI_TEST"
+ }
+ products :
+ {
+ # PREREQUISITES :
+ 'Python' : 'native'
+
+ # SALOME MODULES :
+ 'CONFIGURATION'
+ 'MEDCOUPLING'
+ 'KERNEL'
+ 'GUI'
+ 'GEOM'
+ 'SMESH'
+
+ }
+ grid_to_test : 'SALOME_V8'
+ profile :
+ {
+ launcher_name : "appli_test"
+ product : "SALOME"
+ }
+ virtual_app:
+ {
+ name : "appli_test"
+ application_name : "APPLI"
+ }
+ test_base :
+ {
+ name : "SALOME"
+ tag : "SalomeV8"
+ }
+}
--- /dev/null
+#TODO
+switch pyconf.py 0.3.7.1 -> 0.3.9, here for test
+++ /dev/null
-"""
-A TestRunner for use with the Python unit testing framework. It
-generates a HTML report to show the result at a glance.
-
-The simplest way to use this is to invoke its main method. E.g.
-
- import unittest
- import HTMLTestRunner
-
- ... define your tests ...
-
- if __name__ == '__main__':
- HTMLTestRunner.main()
-
-
-For more customization options, instantiates a HTMLTestRunner object.
-HTMLTestRunner is a counterpart to unittest's TextTestRunner. E.g.
-
- # output to a file
- fp = file('my_report.html', 'wb')
- runner = HTMLTestRunner.HTMLTestRunner(
- stream=fp,
- title='My unit test',
- description='This demonstrates the report output by HTMLTestRunner.'
- )
-
- # Use an external stylesheet.
- # See the Template_mixin class for more customizable options
- runner.STYLESHEET_TMPL = '<link rel="stylesheet" href="my_stylesheet.css" type="text/css">'
-
- # run the test
- runner.run(my_test_suite)
-
-
-------------------------------------------------------------------------
-Copyright (c) 2004-2007, Wai Yip Tung
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-* Neither the name Wai Yip Tung nor the names of its contributors may be
- used to endorse or promote products derived from this software without
- specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""
-
-# URL: http://tungwaiyip.info/software/HTMLTestRunner.html
-
-__author__ = "Wai Yip Tung"
-__version__ = "0.8.2"
-
-
-"""
-Change History
-
-Version 0.8.2
-* Show output inline instead of popup window (Viorel Lupu).
-
-Version in 0.8.1
-* Validated XHTML (Wolfgang Borgert).
-* Added description of test classes and test cases.
-
-Version in 0.8.0
-* Define Template_mixin class for customization.
-* Workaround a IE 6 bug that it does not treat <script> block as CDATA.
-
-Version in 0.7.1
-* Back port to Python 2.3 (Frank Horowitz).
-* Fix missing scroll bars in detail log (Podi).
-"""
-
-# TODO: color stderr
-# TODO: simplify javascript using ,ore than 1 class in the class attribute?
-
-import datetime
-import StringIO
-import sys
-import time
-import unittest
-from xml.sax import saxutils
-
-
-# ------------------------------------------------------------------------
-# The redirectors below are used to capture output during testing. Output
-# sent to sys.stdout and sys.stderr are automatically captured. However
-# in some cases sys.stdout is already cached before HTMLTestRunner is
-# invoked (e.g. calling logging.basicConfig). In order to capture those
-# output, use the redirectors for the cached stream.
-#
-# e.g.
-# >>> logging.basicConfig(stream=HTMLTestRunner.stdout_redirector)
-# >>>
-
-class OutputRedirector(object):
- """ Wrapper to redirect stdout or stderr """
- def __init__(self, fp):
- self.fp = fp
-
- def write(self, s):
- self.fp.write(s)
-
- def writelines(self, lines):
- self.fp.writelines(lines)
-
- def flush(self):
- self.fp.flush()
-
-stdout_redirector = OutputRedirector(sys.stdout)
-stderr_redirector = OutputRedirector(sys.stderr)
-
-
-
-# ----------------------------------------------------------------------
-# Template
-
-class Template_mixin(object):
- """
- Define a HTML template for report customerization and generation.
-
- Overall structure of an HTML report
-
- HTML
- +------------------------+
- |<html> |
- | <head> |
- | |
- | STYLESHEET |
- | +----------------+ |
- | | | |
- | +----------------+ |
- | |
- | </head> |
- | |
- | <body> |
- | |
- | HEADING |
- | +----------------+ |
- | | | |
- | +----------------+ |
- | |
- | REPORT |
- | +----------------+ |
- | | | |
- | +----------------+ |
- | |
- | ENDING |
- | +----------------+ |
- | | | |
- | +----------------+ |
- | |
- | </body> |
- |</html> |
- +------------------------+
- """
-
- STATUS = {
- 0: 'pass',
- 1: 'fail',
- 2: 'error',
- }
-
- DEFAULT_TITLE = 'Unit Test Report'
- DEFAULT_DESCRIPTION = ''
-
- # ------------------------------------------------------------------------
- # HTML Template
-
- HTML_TMPL = r"""<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>%(title)s</title>
- <meta name="generator" content="%(generator)s"/>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- %(stylesheet)s
-</head>
-<body>
-<script language="javascript" type="text/javascript"><!--
-output_list = Array();
-
-/* level - 0:Summary; 1:Failed; 2:All */
-function showCase(level) {
- trs = document.getElementsByTagName("tr");
- for (var i = 0; i < trs.length; i++) {
- tr = trs[i];
- id = tr.id;
- if (id.substr(0,2) == 'ft') {
- if (level < 1) {
- tr.className = 'hiddenRow';
- }
- else {
- tr.className = '';
- }
- }
- if (id.substr(0,2) == 'pt') {
- if (level > 1) {
- tr.className = '';
- }
- else {
- tr.className = 'hiddenRow';
- }
- }
- }
-}
-
-
-function showClassDetail(cid, count) {
- var id_list = Array(count);
- var toHide = 1;
- for (var i = 0; i < count; i++) {
- tid0 = 't' + cid.substr(1) + '.' + (i+1);
- tid = 'f' + tid0;
- tr = document.getElementById(tid);
- if (!tr) {
- tid = 'p' + tid0;
- tr = document.getElementById(tid);
- }
- id_list[i] = tid;
- if (tr.className) {
- toHide = 0;
- }
- }
- for (var i = 0; i < count; i++) {
- tid = id_list[i];
- if (toHide) {
- document.getElementById('div_'+tid).style.display = 'none'
- document.getElementById(tid).className = 'hiddenRow';
- }
- else {
- document.getElementById(tid).className = '';
- }
- }
-}
-
-
-function showTestDetail(div_id){
- var details_div = document.getElementById(div_id)
- var displayState = details_div.style.display
- // alert(displayState)
- if (displayState != 'block' ) {
- displayState = 'block'
- details_div.style.display = 'block'
- }
- else {
- details_div.style.display = 'none'
- }
-}
-
-
-function html_escape(s) {
- s = s.replace(/&/g,'&');
- s = s.replace(/</g,'<');
- s = s.replace(/>/g,'>');
- return s;
-}
-
-/* obsoleted by detail in <div>
-function showOutput(id, name) {
- var w = window.open("", //url
- name,
- "resizable,scrollbars,status,width=800,height=450");
- d = w.document;
- d.write("<pre>");
- d.write(html_escape(output_list[id]));
- d.write("\n");
- d.write("<a href='javascript:window.close()'>close</a>\n");
- d.write("</pre>\n");
- d.close();
-}
-*/
---></script>
-
-%(heading)s
-%(report)s
-%(ending)s
-
-</body>
-</html>
-"""
- # variables: (title, generator, stylesheet, heading, report, ending)
-
-
- # ------------------------------------------------------------------------
- # Stylesheet
- #
- # alternatively use a <link> for external style sheet, e.g.
- # <link rel="stylesheet" href="$url" type="text/css">
-
- STYLESHEET_TMPL = """
-<style type="text/css" media="screen">
-body { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }
-table { font-size: 100%; }
-pre { }
-
-/* -- heading ---------------------------------------------------------------------- */
-h1 {
- font-size: 16pt;
- color: gray;
-}
-.heading {
- margin-top: 0ex;
- margin-bottom: 1ex;
-}
-
-.heading .attribute {
- margin-top: 1ex;
- margin-bottom: 0;
-}
-
-.heading .description {
- margin-top: 4ex;
- margin-bottom: 6ex;
-}
-
-/* -- css div popup ------------------------------------------------------------------------ */
-a.popup_link {
-}
-
-a.popup_link:hover {
- color: red;
-}
-
-.popup_window {
- display: none;
- position: relative;
- left: 0px;
- top: 0px;
- /*border: solid #627173 1px; */
- padding: 10px;
- background-color: #E6E6D6;
- font-family: "Lucida Console", "Courier New", Courier, monospace;
- text-align: left;
- font-size: 8pt;
- width: 500px;
-}
-
-}
-/* -- report ------------------------------------------------------------------------ */
-#show_detail_line {
- margin-top: 3ex;
- margin-bottom: 1ex;
-}
-#result_table {
- width: 80%;
- border-collapse: collapse;
- border: 1px solid #777;
-}
-#header_row {
- font-weight: bold;
- color: white;
- background-color: #777;
-}
-#result_table td {
- border: 1px solid #777;
- padding: 2px;
-}
-#total_row { font-weight: bold; }
-.passClass { background-color: #6c6; }
-.failClass { background-color: #c60; }
-.errorClass { background-color: #c00; }
-.passCase { color: #6c6; }
-.failCase { color: #c60; font-weight: bold; }
-.errorCase { color: #c00; font-weight: bold; }
-.hiddenRow { display: none; }
-.testcase { margin-left: 2em; }
-
-
-/* -- ending ---------------------------------------------------------------------- */
-#ending {
-}
-
-</style>
-"""
-
-
-
- # ------------------------------------------------------------------------
- # Heading
- #
-
- HEADING_TMPL = """<div class='heading'>
-<h1>%(title)s</h1>
-%(parameters)s
-<p class='description'>%(description)s</p>
-</div>
-
-""" # variables: (title, parameters, description)
-
- HEADING_ATTRIBUTE_TMPL = """<p class='attribute'><strong>%(name)s:</strong> %(value)s</p>
-""" # variables: (name, value)
-
-
-
- # ------------------------------------------------------------------------
- # Report
- #
-
- REPORT_TMPL = """
-<p id='show_detail_line'>Show
-<a href='javascript:showCase(0)'>Summary</a>
-<a href='javascript:showCase(1)'>Failed</a>
-<a href='javascript:showCase(2)'>All</a>
-</p>
-<table id='result_table'>
-<colgroup>
-<col align='left' />
-<col align='right' />
-<col align='right' />
-<col align='right' />
-<col align='right' />
-<col align='right' />
-</colgroup>
-<tr id='header_row'>
- <td>Test Group/Test case</td>
- <td>Count</td>
- <td>Pass</td>
- <td>Fail</td>
- <td>Error</td>
- <td>View</td>
-</tr>
-%(test_list)s
-<tr id='total_row'>
- <td>Total</td>
- <td>%(count)s</td>
- <td>%(Pass)s</td>
- <td>%(fail)s</td>
- <td>%(error)s</td>
- <td> </td>
-</tr>
-</table>
-""" # variables: (test_list, count, Pass, fail, error)
-
- REPORT_CLASS_TMPL = r"""
-<tr class='%(style)s'>
- <td>%(desc)s</td>
- <td>%(count)s</td>
- <td>%(Pass)s</td>
- <td>%(fail)s</td>
- <td>%(error)s</td>
- <td><a href="javascript:showClassDetail('%(cid)s',%(count)s)">Detail</a></td>
-</tr>
-""" # variables: (style, desc, count, Pass, fail, error, cid)
-
-
- REPORT_TEST_WITH_OUTPUT_TMPL = r"""
-<tr id='%(tid)s' class='%(Class)s'>
- <td class='%(style)s'><div class='testcase'>%(desc)s</div></td>
- <td colspan='5' align='center'>
-
- <!--css div popup start-->
- <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_%(tid)s')" >
- %(status)s</a>
-
- <div id='div_%(tid)s' class="popup_window">
- <div style='text-align: right; color:red;cursor:pointer'>
- <a onfocus='this.blur();' onclick="document.getElementById('div_%(tid)s').style.display = 'none' " >
- [x]</a>
- </div>
- <pre>
- %(script)s
- </pre>
- </div>
- <!--css div popup end-->
-
- </td>
-</tr>
-""" # variables: (tid, Class, style, desc, status)
-
-
- REPORT_TEST_NO_OUTPUT_TMPL = r"""
-<tr id='%(tid)s' class='%(Class)s'>
- <td class='%(style)s'><div class='testcase'>%(desc)s</div></td>
- <td colspan='5' align='center'>%(status)s</td>
-</tr>
-""" # variables: (tid, Class, style, desc, status)
-
-
- REPORT_TEST_OUTPUT_TMPL = r"""
-%(id)s: %(output)s
-""" # variables: (id, output)
-
-
-
- # ------------------------------------------------------------------------
- # ENDING
- #
-
- ENDING_TMPL = """<div id='ending'> </div>"""
-
-# -------------------- The end of the Template class -------------------
-
-
-TestResult = unittest.TestResult
-
-class _TestResult(TestResult):
- # note: _TestResult is a pure representation of results.
- # It lacks the output and reporting ability compares to unittest._TextTestResult.
-
- def __init__(self, verbosity=1):
- TestResult.__init__(self)
- self.stdout0 = None
- self.stderr0 = None
- self.success_count = 0
- self.failure_count = 0
- self.error_count = 0
- self.verbosity = verbosity
-
- # result is a list of result in 4 tuple
- # (
- # result code (0: success; 1: fail; 2: error),
- # TestCase object,
- # Test output (byte string),
- # stack trace,
- # )
- self.result = []
-
-
- def startTest(self, test):
- TestResult.startTest(self, test)
- # just one buffer for both stdout and stderr
- self.outputBuffer = StringIO.StringIO()
- stdout_redirector.fp = self.outputBuffer
- stderr_redirector.fp = self.outputBuffer
- self.stdout0 = sys.stdout
- self.stderr0 = sys.stderr
- sys.stdout = stdout_redirector
- sys.stderr = stderr_redirector
-
-
- def complete_output(self):
- """
- Disconnect output redirection and return buffer.
- Safe to call multiple times.
- """
- if self.stdout0:
- sys.stdout = self.stdout0
- sys.stderr = self.stderr0
- self.stdout0 = None
- self.stderr0 = None
- return self.outputBuffer.getvalue()
-
-
- def stopTest(self, test):
- # Usually one of addSuccess, addError or addFailure would have been called.
- # But there are some path in unittest that would bypass this.
- # We must disconnect stdout in stopTest(), which is guaranteed to be called.
- self.complete_output()
-
-
- def addSuccess(self, test):
- self.success_count += 1
- TestResult.addSuccess(self, test)
- output = self.complete_output()
- self.result.append((0, test, output, ''))
- if self.verbosity > 1:
- sys.stderr.write('ok ')
- sys.stderr.write(str(test))
- sys.stderr.write('\n')
- else:
- sys.stderr.write('.')
-
- def addError(self, test, err):
- self.error_count += 1
- TestResult.addError(self, test, err)
- _, _exc_str = self.errors[-1]
- output = self.complete_output()
- self.result.append((2, test, output, _exc_str))
- if self.verbosity > 1:
- sys.stderr.write('E ')
- sys.stderr.write(str(test))
- sys.stderr.write('\n')
- else:
- sys.stderr.write('E')
-
- def addFailure(self, test, err):
- self.failure_count += 1
- TestResult.addFailure(self, test, err)
- _, _exc_str = self.failures[-1]
- output = self.complete_output()
- self.result.append((1, test, output, _exc_str))
- if self.verbosity > 1:
- sys.stderr.write('F ')
- sys.stderr.write(str(test))
- sys.stderr.write('\n')
- else:
- sys.stderr.write('F')
-
-
-class HTMLTestRunner(Template_mixin):
- """
- """
- def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None):
- self.stream = stream
- self.verbosity = verbosity
- if title is None:
- self.title = self.DEFAULT_TITLE
- else:
- self.title = title
- if description is None:
- self.description = self.DEFAULT_DESCRIPTION
- else:
- self.description = description
-
- self.startTime = datetime.datetime.now()
-
-
- def run(self, test):
- "Run the given test case or test suite."
- result = _TestResult(self.verbosity)
- test(result)
- self.stopTime = datetime.datetime.now()
- self.generateReport(test, result)
- print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)
- return result
-
-
- def sortResult(self, result_list):
- # unittest does not seems to run in any particular order.
- # Here at least we want to group them together by class.
- rmap = {}
- classes = []
- for n,t,o,e in result_list:
- cls = t.__class__
- if not rmap.has_key(cls):
- rmap[cls] = []
- classes.append(cls)
- rmap[cls].append((n,t,o,e))
- r = [(cls, rmap[cls]) for cls in classes]
- return r
-
-
- def getReportAttributes(self, result):
- """
- Return report attributes as a list of (name, value).
- Override this to add custom attributes.
- """
- startTime = str(self.startTime)[:19]
- duration = str(self.stopTime - self.startTime)
- status = []
- if result.success_count: status.append('Pass %s' % result.success_count)
- if result.failure_count: status.append('Failure %s' % result.failure_count)
- if result.error_count: status.append('Error %s' % result.error_count )
- if status:
- status = ' '.join(status)
- else:
- status = 'none'
- return [
- ('Start Time', startTime),
- ('Duration', duration),
- ('Status', status),
- ]
-
-
- def generateReport(self, test, result):
- report_attrs = self.getReportAttributes(result)
- generator = 'HTMLTestRunner %s' % __version__
- stylesheet = self._generate_stylesheet()
- heading = self._generate_heading(report_attrs)
- report = self._generate_report(result)
- ending = self._generate_ending()
- output = self.HTML_TMPL % dict(
- title = saxutils.escape(self.title),
- generator = generator,
- stylesheet = stylesheet,
- heading = heading,
- report = report,
- ending = ending,
- )
- self.stream.write(output.encode('utf8'))
-
-
- def _generate_stylesheet(self):
- return self.STYLESHEET_TMPL
-
-
- def _generate_heading(self, report_attrs):
- a_lines = []
- for name, value in report_attrs:
- line = self.HEADING_ATTRIBUTE_TMPL % dict(
- name = saxutils.escape(name),
- value = saxutils.escape(value),
- )
- a_lines.append(line)
- heading = self.HEADING_TMPL % dict(
- title = saxutils.escape(self.title),
- parameters = ''.join(a_lines),
- description = saxutils.escape(self.description),
- )
- return heading
-
-
- def _generate_report(self, result):
- rows = []
- sortedResult = self.sortResult(result.result)
- for cid, (cls, cls_results) in enumerate(sortedResult):
- # subtotal for a class
- np = nf = ne = 0
- for n,t,o,e in cls_results:
- if n == 0: np += 1
- elif n == 1: nf += 1
- else: ne += 1
-
- # format class description
- if cls.__module__ == "__main__":
- name = cls.__name__
- else:
- name = "%s.%s" % (cls.__module__, cls.__name__)
- doc = cls.__doc__ and cls.__doc__.split("\n")[0] or ""
- desc = doc and '%s: %s' % (name, doc) or name
-
- row = self.REPORT_CLASS_TMPL % dict(
- style = ne > 0 and 'errorClass' or nf > 0 and 'failClass' or 'passClass',
- desc = desc,
- count = np+nf+ne,
- Pass = np,
- fail = nf,
- error = ne,
- cid = 'c%s' % (cid+1),
- )
- rows.append(row)
-
- for tid, (n,t,o,e) in enumerate(cls_results):
- self._generate_report_test(rows, cid, tid, n, t, o, e)
-
- report = self.REPORT_TMPL % dict(
- test_list = ''.join(rows),
- count = str(result.success_count+result.failure_count+result.error_count),
- Pass = str(result.success_count),
- fail = str(result.failure_count),
- error = str(result.error_count),
- )
- return report
-
-
- def _generate_report_test(self, rows, cid, tid, n, t, o, e):
- # e.g. 'pt1.1', 'ft1.1', etc
- has_output = bool(o or e)
- tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1,tid+1)
- name = t.id().split('.')[-1]
- doc = t.shortDescription() or ""
- desc = doc and ('%s: %s' % (name, doc)) or name
- tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL
-
- # o and e should be byte string because they are collected from stdout and stderr?
- if isinstance(o,str):
- # TODO: some problem with 'string_escape': it escape \n and mess up formating
- # uo = unicode(o.encode('string_escape'))
- uo = o.decode('latin-1')
- else:
- uo = o
- if isinstance(e,str):
- # TODO: some problem with 'string_escape': it escape \n and mess up formating
- # ue = unicode(e.encode('string_escape'))
- ue = e.decode('latin-1')
- else:
- ue = e
-
- script = self.REPORT_TEST_OUTPUT_TMPL % dict(
- id = tid,
- output = saxutils.escape(uo+ue),
- )
-
- row = tmpl % dict(
- tid = tid,
- Class = (n == 0 and 'hiddenRow' or 'none'),
- style = n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'),
- desc = desc,
- script = script,
- status = self.STATUS[n],
- )
- rows.append(row)
- if not has_output:
- return
-
- def _generate_ending(self):
- return self.ENDING_TMPL
-
-
-##############################################################################
-# Facilities for running tests from the command line
-##############################################################################
-
-# Note: Reuse unittest.TestProgram to launch test. In the future we may
-# build our own launcher to support more specific command line
-# parameters like test title, CSS, etc.
-class TestProgram(unittest.TestProgram):
- """
- A variation of the unittest.TestProgram. Please refer to the base
- class for command line parameters.
- """
- def runTests(self):
- # Pick HTMLTestRunner as the default test runner.
- # base class's testRunner parameter is not useful because it means
- # we have to instantiate HTMLTestRunner before we know self.verbosity.
- if self.testRunner is None:
- self.testRunner = HTMLTestRunner(verbosity=self.verbosity)
- unittest.TestProgram.runTests(self)
-
-main = TestProgram
-
-##############################################################################
-# Executing this module from the command line
-##############################################################################
-
-if __name__ == "__main__":
- main(module=None)
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import tempfile
-import sys
-import subprocess
-import time
-
-class outRedirection():
- '''redirection of standart output
- useful for testing the terminal display
- '''
- def __init__(self):
- '''initialization
- '''
- self._fstream = tempfile.NamedTemporaryFile(mode='w')
- self.saveout = sys.stdout
- sys.stdout = self._fstream
-
- def flush(self):
- self._fstream.flush()
-
- def end_redirection(self):
- self._fstream.seek(0)
- ff = open(self._fstream.name, 'r')
- self.res = ff.read()
- self._fstream.close()
- sys.stdout = self.saveout
-
- def read_results(self):
- try:
- return self.res
- except Exception as exc:
- print('Problem with redirection : %s' % exc)
- sys.exit(1)
-
-def kill9(pid):
- subprocess.call("kill -9 " + pid, shell=True)
-
-def check_proc_existence_and_kill(regex):
- cmd = 'ps aux | grep "' + regex + '"'
- psRes = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
- psRes = psRes.split('\n')
- for line in psRes:
- if 'grep' in line or len(line) == 0:
- continue
- line2 = [i for i in line.split(' ') if i != '']
- pid = line2[1]
- kill9(pid)
- return pid
- return 0
-
-def check_proc_existence_and_kill_multi(regex, nb_kills, time_between_two_checks = 1):
- found = False
- i = 0
- while not found and i < nb_kills :
- found = check_proc_existence_and_kill(regex)
- if found:
- return found
- time.sleep(time_between_two_checks)
- i+=1
- return 0
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-import src.product
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestCompile(unittest.TestCase):
- '''Test of the compile command
- '''
-
- def test_compile(self):
- '''Test the compile command with --products option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
-
- sat.clean(appli + ' --build --install --product ' + product_name, batch=True)
- sat.compile(appli + ' --product ' + product_name)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_fathers(self):
- '''Test the configure command with --fathers option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
- product_name2 = 'PRODUCT_ARCHIVE'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
- expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
- expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
-
- sat.clean(appli + ' --build --install --product ' + product_name +"," +product_name2, batch=True)
- sat.compile(appli + ' --with_fathers --product ' + product_name)
-
- if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_children(self):
- '''Test the configure command with --children option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
- product_name2 = 'PRODUCT_ARCHIVE'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
- expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
- expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
-
- sat.clean(appli + ' --build --install --product ' + product_name +"," +product_name2, batch=True)
- sat.compile(appli + ' --with_children --product ' + product_name2)
-
- if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_clean_all(self):
- '''Test the configure command with --clean_all option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
- product_name2 = 'PRODUCT_ARCHIVE'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
- expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
- expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
-
- sat.compile(appli + ' --with_children --product ' + product_name2)
-
- sat.compile(appli + ' --clean_all --with_children --product ' + product_name2, batch=True)
-
- if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_clean_install(self):
- '''Test the configure command with --clean_install option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
- product_name2 = 'PRODUCT_ARCHIVE'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
- expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
- expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
-
- sat.compile(appli + ' --with_children --product ' + product_name2)
-
- sat.compile(appli + ' --clean_install --with_children --product ' + product_name2, batch=True)
-
- if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_makeflags(self):
- '''Test the configure command with --make_flags option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
-
- sat.clean(appli + ' --build --install --product ' + product_name, batch=True)
- sat.compile(appli + ' --make_flags 3 --product ' + product_name)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_show(self):
- '''Test the configure command with --show option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
-
- sat.clean(appli + ' --build --install --product ' + product_name, batch=True)
- sat.compile(appli + ' --show --product ' + product_name)
-
- if not(os.path.exists(expected_file_path)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_compile_stop_first_fail(self):
- '''Test the configure command with --stop_first_fail option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product PRODUCT_CVS,Python')
- expected_install_dir = src.product.get_product_config(sat.cfg, "PRODUCT_CVS").install_dir
-
- sat.clean(appli + ' --build --install --product PRODUCT_CVS', batch=True)
- sat.compile(appli + ' --stop_first_fail --product PRODUCT_CVS,Python')
-
- if not(os.path.exists(expected_install_dir)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h compile
- '''
-
- OK = "KO"
-
- import compile
-
- if "The compile command constructs the products" in compile.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-import src.product
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestConfigure(unittest.TestCase):
- '''Test of the configure command
- '''
-
- def test_configure_cmake(self):
- '''Test the configure command with a product in cmake
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
- expected_file_path = os.path.join(expected_build_dir, 'CMakeCache.txt')
-
- sat.configure(appli + ' --product ' + product_name)
-
- if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_configure_autotools(self):
- '''Test the configure command with a product in autotools
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_CVS'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
- expected_file_path = os.path.join(expected_build_dir, 'config.log')
-
- sat.configure(appli + ' --product ' + product_name)
-
- if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_configure_script(self):
- '''Test the configure command with a product in script mode
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'Python'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
-
- sat.configure(appli + ' --product ' + product_name)
-
- if os.path.exists(expected_build_dir):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h configure
- '''
-
- OK = "KO"
-
- import configure
-
- if "The configure command executes in the build directory" in configure.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-import src.product
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestMake(unittest.TestCase):
- '''Test of the make command
- '''
-
- def test_make(self):
- '''Test the configure command without any option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
- expected_file_path = os.path.join(expected_build_dir, 'hello')
-
- sat.configure(appli + ' --product ' + product_name)
-
- sat.make(appli + ' --product ' + product_name)
-
- if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_make_option(self):
- '''Test the make command with an option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
- expected_file_path = os.path.join(expected_build_dir, 'hello')
-
- sat.configure(appli + ' --product ' + product_name)
-
- sat.make(appli + ' --product ' + product_name + ' --option -j3')
-
- if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_make_script(self):
- '''Test the make command with a product in script mode
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'Python'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file = "bin/python2.7"
-
- sat.make(appli + ' --product ' + product_name)
-
- if os.path.exists(os.path.join(expected_install_dir, expected_file)):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h make
- '''
-
- OK = "KO"
-
- import make
-
- if "The make command executes the \"make\" command" in make.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-import src.product
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestMakeinstall(unittest.TestCase):
- '''Test of the makeinstall command
- '''
-
- def test_makeinstall(self):
- '''Test the configure command without any option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
-
- sat.prepare(appli + ' --product ' + product_name)
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
-
- sat.configure(appli + ' --product ' + product_name)
-
- sat.make(appli + ' --product ' + product_name)
-
- sat.makeinstall(appli + ' --product ' + product_name)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h make
- '''
-
- OK = "KO"
-
- import makeinstall
-
- if "The makeinstall command executes the \"make install\" command" in makeinstall.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import shutil
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestConfig(unittest.TestCase):
- '''pyunit class : each method execute one test.
- '''
-
- def test_user_dir_creation(self):
- '''Creation of ~/.salomeTools/salomeTools.pyconf
- '''
- res = "KO"
- user_dir = os.path.expanduser(os.path.join('~','.salomeTools'))
- user_dir_save = os.path.expanduser(os.path.join('~','.salomeTools_save'))
- if os.path.exists(user_dir_save):
- shutil.rmtree(user_dir_save)
- if os.path.exists(user_dir):
- shutil.move(user_dir, user_dir_save)
-
- # The command to test
- sat = Sat('')
- sat.config('-v .')
-
- expected_file = os.path.expanduser(os.path.join('~','.salomeTools', 'salomeTools.pyconf'))
-
- if os.path.exists(expected_file):
- res = "OK"
-
- shutil.rmtree(user_dir)
- shutil.move(user_dir_save, user_dir)
-
- # pyunit method to compare 2 str
- self.assertEqual(res, "OK")
-
- def test_override_VARS(self):
- '''override VARS
- '''
- OK = "KO"
-
- # The command to test
- sat = Sat("-oVARS.user='user_test'")
- sat.config()
-
- if sat.cfg.VARS.user == 'user_test':
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_override_INTERNAL(self):
- '''override INTERNAL
- '''
- OK = "KO"
-
- # The command to test
- sat = Sat("-oINTERNAL.sat_version='V0'")
- sat.config()
-
- if sat.cfg.INTERNAL.sat_version == 'V0':
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- """
- def test_override_SITE(self):
- '''override SITE
- '''
- OK = "KO"
-
- # The command to test
- sat = Sat("-oSITE.jobs.config_path='/tmp'")
- sat.config()
-
- if sat.cfg.SITE.jobs.config_path == '/tmp':
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
- """
-
- def test_override_APPLICATION(self):
- '''override APPLICATION
- '''
- OK = "KO"
-
- # The command to test
- sat = Sat("-oAPPLICATION.out_dir='/tmp'")
- sat.config('appli-test')
-
- if sat.cfg.APPLICATION.out_dir == '/tmp':
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_override_PRODUCTS(self):
- '''override PRODUCTS
- '''
- OK = "KO"
-
- # The command to test
- sat = Sat("-oPRODUCTS.PRODUCT_GIT.default.name='test'")
- sat.config('')
-
- if sat.cfg.PRODUCTS.PRODUCT_GIT.default.name == 'test':
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestConfig(unittest.TestCase):
- '''sat config -c
- '''
-
- def test_option_copy(self):
- '''Test the copy of a pyconf
- '''
- res = "KO"
- appli_to_copy = "appli-test"
-
- expected_file = os.path.expanduser(os.path.join('~','.salomeTools', 'Applications', 'LOCAL_' + appli_to_copy + '.pyconf'))
- if os.path.exists(expected_file):
- os.remove(expected_file)
-
- # The command to test
- sat = Sat('')
- sat.config('appli-test -c')
-
-
- if os.path.exists(expected_file):
- res = "OK"
- os.remove(expected_file)
-
- # pyunit method to compare 2 str
- self.assertEqual(res, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import threading
-import time
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-
-from salomeTools import Sat
-from tools import check_proc_existence_and_kill_multi
-import HTMLTestRunner
-
-sleep_time = 3
-
-class TestConfig(unittest.TestCase):
- '''OPTION EDIT.
- '''
-
- def test_edit_userconfig(self):
- '''Test the launch of the editor when invoking the config -e
- '''
-
- OK = "KO"
-
- sat = Sat("-oUSER.editor='cooledit'")
- sat.config()
- cmd_config = threading.Thread(target=sat.config, args=('-e',))
- cmd_config.start()
-
- time.sleep(sleep_time)
-
- editor = sat.cfg.USER.editor
- pid = check_proc_existence_and_kill_multi(editor + ".*" + "salomeTools\.pyconf", 10)
-
- if pid:
- OK = "OK"
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_edit_appli(self):
- '''Test the launch of the editor when invoking the config -e appli-test
- '''
-
- OK = "KO"
-
- sat = Sat("-oUSER.editor='cooledit'")
- sat.config()
- cmd_config = threading.Thread(target=sat.config, args=('appli-test -e',))
- cmd_config.start()
-
- time.sleep(sleep_time)
-
- editor = sat.cfg.USER.editor
- pid = check_proc_existence_and_kill_multi(editor + ".*" + "appli-test\.pyconf", 10)
-
- if pid:
- OK = "OK"
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import platform
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-
-from salomeTools import Sat
-from tools import outRedirection
-import HTMLTestRunner
-
-class TestConfig(unittest.TestCase):
- '''OPTION VALUE.
- '''
-
- def test_option_value(self):
- '''Test the display of the right value of "sat config -v VARS.hostname"
- '''
-
- OK = "KO"
-
- # output redirection
- my_out = outRedirection()
-
- # The command to test
- sat = Sat()
- sat.config('-v VARS.hostname')
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- if platform.node() in res:
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_list(self):
- '''Test the display of the right value of "sat config -l"
- '''
-
- OK = "KO"
-
- # output redirection
- my_out = outRedirection()
-
- # The command to test
- sat = Sat()
- sat.config('-l')
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- # get results
- if "ERROR" not in res:
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- """
- def test_error_salomeToolspyconf(self):
- '''Test the exception when salomeTools.pyconf has errors
- '''
-
- OK = "KO"
-
- # The command to test
- sat = Sat()
- sat.config()
-
- salomeToolspyconfPath = os.path.join(sat.cfg.VARS.srcDir, "internal_config", "salomeTools.pyconf")
- salomeToolspyconfPath_save = os.path.join(sat.cfg.VARS.srcDir, "internal_config", "salomeTools.pyconf_save")
- if os.path.exists(salomeToolspyconfPath_save):
- os.remove(salomeToolspyconfPath_save)
- shutil.copyfile(salomeToolspyconfPath, salomeToolspyconfPath_save)
- f_read = open(salomeToolspyconfPath, 'r')
- text = f_read.read()
- f_read.close()
- os.remove(salomeToolspyconfPath)
- f_write = open(salomeToolspyconfPath, 'w')
- f_write.write(text.replace(':', ''))
- f_write.close()
-
- try:
- sat.config()
- except TypeError:
- OK = "OK"
- finally:
- shutil.copyfile(salomeToolspyconfPath_save, salomeToolspyconfPath)
- os.remove(salomeToolspyconfPath_save)
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
- """
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import platform
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-
-from salomeTools import Sat
-from tools import outRedirection
-import HTMLTestRunner
-
-class TestConfig(unittest.TestCase):
- '''test of sat config -v VARS.python
- '''
-
- def test_option_value(self):
- '''Test the display of the right value of "sat config -v VARS.python"
- '''
-
- OK = 'KO'
-
- # output redirection
- my_out = outRedirection()
-
- # The command to test
- sat = Sat('')
- sat.config('-v VARS.python')
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
-
- if platform.python_version() in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_option_schema(self):
- '''Test the display of the right value of "sat config -s"
- '''
-
- OK = 'KO'
-
- # output redirection
- my_out = outRedirection()
-
- # The command to test
- sat = Sat('')
- sat.config('-s')
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
-
- if 'INTERNAL' in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_option_info(self):
- '''Test the display of the right value of "sat config -i"
- '''
-
- application = 'appli-test'
- product = 'PRODUCT_DEV'
-
- OK = 'KO'
-
- # output redirection
- my_out = outRedirection()
-
- # The command to test
- sat = Sat('')
- sat.config(application + ' --info ' + product)
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
-
- if 'compilation method = cmake' in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestSource(unittest.TestCase):
- '''Test of the source command
- '''
-
- def test_environ_no_option(self):
- '''Test the environ command without any option
- '''
- OK = 'KO'
-
- appli = 'appli-test'
-
- file_env_name = 'env_launch.sh'
-
- sat = Sat()
- sat.config(appli)
-
- expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
-
- if os.path.exists(expected_file_path):
- os.remove(expected_file_path)
-
- sat.environ(appli)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_environ_option_products(self):
- '''Test the environ command with option --products
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- file_env_name = 'env_launch.sh'
-
- sat = Sat()
- sat.config(appli)
-
- expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
-
- if os.path.exists(expected_file_path):
- os.remove(expected_file_path)
-
- sat.environ(appli + ' --products ' + product_name)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_environ_option_target(self):
- '''Test the environ command with option --target
- '''
- OK = 'KO'
-
- appli = 'appli-test'
-
- file_env_name = 'env_launch.sh'
-
- sat = Sat()
- sat.config(appli)
-
- expected_file_path = os.path.join('.', file_env_name)
- expected_file_path2 = os.path.join('.', 'env_build.sh')
-
- if os.path.exists(expected_file_path):
- os.remove(expected_file_path)
-
- sat.environ(appli + ' --target .')
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
-
- if os.path.exists(expected_file_path):
- os.remove(expected_file_path)
- os.remove(expected_file_path2)
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_environ_option_prefix(self):
- '''Test the environ command with option --prefix
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- prefix = 'TEST'
- file_env_name = prefix + '_launch.sh'
-
- sat = Sat()
- sat.config(appli)
-
- expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
-
- if os.path.exists(expected_file_path):
- os.remove(expected_file_path)
-
- sat.environ(appli + ' --prefix ' + prefix)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_environ_option_shell(self):
- '''Test the environ command with option --shell
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- shell = 'bat'
- file_env_name = 'env_launch.bat'
-
- sat = Sat()
- sat.config(appli)
-
- expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
-
- if os.path.exists(expected_file_path):
- os.remove(expected_file_path)
-
- sat.environ(appli + ' --shell ' + shell)
-
- if os.path.exists(expected_file_path):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+"""\
+initialize PATH etc... for salomeTools unittest test files
+"""
+
+"""
+https://docs.python.org/2/library/os.html
+os.environ mapping is captured the first time the os module is imported,
+typically during Python startup as part of processing site.py.
+Changes to the environment made after this time are not reflected
+in os.environ, except for changes made by modifying os.environ directly.
+
+On some platforms, including FreeBSD and Mac OS X,
+setting environ may cause memory leaks.
+"""
+
+import os
+import sys
+import pprint as PP
+
+# get path to salomeTools sources directory parent
+satdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+
+# sys.stderr.write("INFO : initializeTest needs '%s' in sys.path:\n%s\n" % (satdir, PP.pformat(sys.path)))
+
+if satdir not in sys.path:
+ # get path to salomeTools sources FIRST as prepend
+ # Make the src & commands package accessible from all test code
+ sys.path.insert(0, satdir)
+ sys.stderr.write("""\
+WARNING : sys.path not set for salomeTools, fixed for you:
+ sys.path prepend '%s'
+ sys.path:\n%s\n""" % (satdir, PP.pformat(sys.path)))
+ # os.environ PATH is not set...
+ # supposedly useful only for subprocess launch from sat
+ # see https://docs.python.org/2/library/os.html
+ # On some platforms, including FreeBSD and Mac OS X,
+ # setting environ may cause memory leaks.
+ # sys.stderr.write("os.environ PATH:\n%s\n" % PP.pformat(os.environ["PATH"].split(":")))
+ sys.stderr.write("INFO : to fix this message type:\n 'export PYTHONPATH=%s:${PYTHONPATH}'\n" % satdir)
+
+
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestJob(unittest.TestCase):
- '''Test of the job command
- '''
-
- def test_job(self):
- '''Test the job command
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- sat.job("--jobs_config .test --name Job 1" )
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_config = [line.replace("\n", "") for line in log_files if 'config.xml' in line]
-
- text = open(log_config[0], "r").read()
-
- if "nb_proc" in text:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
-
- def test_failing_job(self):
- '''Test the job command with a failing command
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- res = sat.job("--jobs_config .test --name Job 4" )
-
- if res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_file_conf_not_found(self):
- '''Test the job command with a wrong file configuration
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- res = sat.job("--jobs_config NOTEXIST --name Job 4" )
-
- if res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_no_option_jobs_config(self):
- '''Test the job command without --jobs_config option
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- res = sat.job("--name Job 4" )
-
- if res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_job_not_found(self):
- '''Test the job command without --jobs_config option
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- res = sat.job("--jobs_config .test --name NOTEXIST" )
-
- if res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h job
- '''
-
- OK = "KO"
-
- import job
-
- if "Executes the commands of the job defined in the jobs configuration file" in job.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-from tools import outRedirection
-import HTMLTestRunner
-
-class TestJobs(unittest.TestCase):
- '''Test of the jobs command
- '''
-
- def test_jobs(self):
- '''Test the jobs command
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the jobs command
- sat.jobs("--name .test --publish" )
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_jobs = [line.replace("\n", "") for line in log_files if 'jobs.xml' in line]
-
- text = open(log_jobs[0], "r").read()
-
- expected_res = [
- "Establishing connection with all the machines",
- "Executing the jobs",
- "Results for job"
- ]
-
- res = 0
- for exp_res in expected_res:
- if exp_res not in text:
- res += 1
-
- if res == 0:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_jobs_only_jobs(self):
- '''Test the jobs command with option --only_jobs
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the jobs command
- sat.jobs("--name .test --publish --only_jobs Job 1" )
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_jobs = [line.replace("\n", "") for line in log_files if 'jobs.xml' in line]
-
- text = open(log_jobs[0], "r").read()
-
- expected_res = [
- "Establishing connection with all the machines",
- "Executing the jobs",
- "Results for job"
- ]
-
- res = 0
- for exp_res in expected_res:
- if exp_res not in text:
- res += 1
-
- if res == 0:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_no_option_name(self):
- '''Test the jobs command without --name option
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- res = sat.jobs()
-
- if res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_file_conf_not_found(self):
- '''Test the jobs command with a wrong file configuration
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- res = sat.jobs("--name NOTEXIST" )
-
- if res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_option_list(self):
- '''Test the display of the right value of "sat jobs --list"
- '''
-
- OK = "KO"
-
- # output redirection
- my_out = outRedirection()
-
- # The command to test
- sat = Sat()
- sat.jobs('--list')
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- # get results
- if "ERROR" not in res:
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_description(self):
- '''Test the sat -h jobs
- '''
-
- OK = "KO"
-
- import jobs
-
- if "The jobs command launches maintenances that are described in the dedicated jobs configuration file." in jobs.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import threading
-import time
-import shutil
-import io
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-from tools import check_proc_existence_and_kill_multi
-import HTMLTestRunner
-
-sleep_time = 2
-
-class TestLog(unittest.TestCase):
- '''Test of log command: launch of browser
- '''
-
- def test_write_xmllog(self):
- '''Test the write of xml log when invoking a command
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
- sat.config('appli-test -v USER.browser')
-
- # get log file path
- logDir = sat.cfg.USER.log_dir
- logPath = os.path.join(logDir, sat.cfg.VARS.datehour + "_" + sat.cfg.VARS.command + ".xml")
-
- if os.path.exists(logPath):
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal(self):
- '''Test the terminal option without application
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- one = u"1"
- sys.stdin = io.StringIO(one)
-
-
- try:
- sat.log('-t')
- OK = "OK"
- sys.stdin = sys.__stdin__
- except:
- sys.stdin = sys.__stdin__
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal2(self):
- '''Test the terminal option with application
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('appli-test -v VARS.python')
-
- one = u"1"
- sys.stdin = io.StringIO(one)
-
- try:
- sat.log('appli-test -t --last')
- OK = "OK"
- sys.stdin = sys.__stdin__
- except:
- pass
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal3(self):
- '''Test the terminal option with 0 as input
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('appli-test -v VARS.python')
-
- zero = u"0\n1"
- sys.stdin = io.StringIO(zero)
-
- try:
- sat.log('--terminal')
- OK = "OK"
- finally:
- sys.stdin = sys.__stdin__
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal4(self):
- '''Test the terminal option with input bigger than the number of logs
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('appli-test -v VARS.python')
-
- nb_logs = len(os.listdir(sat.cfg.USER.log_dir))
-
- nb_logs_u = unicode(str(nb_logs) + "\n1")
- sys.stdin = io.StringIO(nb_logs_u)
-
- try:
- sat.log('--terminal')
- OK = "OK"
- finally:
- sys.stdin = sys.__stdin__
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal5(self):
- '''Test the terminal option with input return
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('appli-test -v VARS.python')
-
- ret = unicode("\n0")
- sys.stdin = io.StringIO(ret)
-
- try:
- sat.log('--terminal')
- OK = "OK"
- finally:
- sys.stdin = sys.__stdin__
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal6(self):
- '''Test the terminal option with input not int
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('appli-test -v VARS.python')
-
- ret = unicode("blabla\n0")
- sys.stdin = io.StringIO(ret)
-
- try:
- sat.log('--terminal')
- OK = "OK"
- finally:
- sys.stdin = sys.__stdin__
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_terminal7(self):
- '''Test the terminal option and option last
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- try:
- sat.log('--terminal --last')
- OK = "OK"
- finally:
- sys.stdin = sys.__stdin__
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_last(self):
- '''Test the option --last
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat("-oUSER.browser='konqueror'")
-
- sat.config('appli-test -v VARS.python')
-
-
- time.sleep(sleep_time)
- cmd_log = threading.Thread(target=sat.log, args=('appli-test --last',))
- cmd_log.start()
-
- time.sleep(sleep_time)
-
- browser = sat.cfg.USER.browser
- pid = check_proc_existence_and_kill_multi(browser + ".*" + "xml", 10)
-
- if pid:
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_clean(self):
- '''Test the option --clean
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('-v VARS.user')
-
- nb_logs_t0 = len(os.listdir(sat.cfg.USER.log_dir))
-
- sat.log('--clean 1')
-
- nb_logs_t1 = len(os.listdir(sat.cfg.USER.log_dir))
-
- if nb_logs_t1-nb_logs_t0 == 0:
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_option_clean2(self):
- '''Test the option --clean with big number of files to clean
- '''
-
- OK = "KO"
-
- # launch the command that will write a log
- sat = Sat()
-
- sat.config('-v VARS.user')
-
- nb_logs_t0 = len(os.listdir(sat.cfg.USER.log_dir))
-
- if os.path.exists(sat.cfg.USER.log_dir + "_save"):
- shutil.rmtree(sat.cfg.USER.log_dir + "_save")
- shutil.copytree(sat.cfg.USER.log_dir,sat.cfg.USER.log_dir + "_save")
-
- sat.log('--clean ' + str(nb_logs_t0))
-
- nb_logs_t1 = len(os.listdir(sat.cfg.USER.log_dir))
-
- shutil.rmtree(sat.cfg.USER.log_dir)
- shutil.move(sat.cfg.USER.log_dir + "_save", sat.cfg.USER.log_dir)
-
- if nb_logs_t0-nb_logs_t1 > 10:
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- """
- def test_option_full(self):
- '''Test the option --full
- '''
-
- OK = "KO"
-
- sat = Sat("-oUSER.browser='konqueror'")
- time.sleep(sleep_time)
- cmd_log = threading.Thread(target=sat.log, args=('--full',))
- cmd_log.start()
-
- time.sleep(sleep_time)
-
- browser = sat.cfg.USER.browser
- check_proc_existence_and_kill_multi(browser + ".*" + "hat\.xml", 10)
-
- # Read and check the hat.xml file contains at least one log file corresponding to log
- hatFilePath = os.path.join(sat.cfg.USER.log_dir, "hat.xml")
- xmlHatFile = src.xmlManager.ReadXmlFile(hatFilePath)
- for field in xmlHatFile.xmlroot:
- if field.attrib[b'cmd'] == b'log':
- OK = "OK"
- break
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
- """
- def test_description(self):
- '''Test the sat -h log
- '''
-
- OK = "KO"
-
- import log
-
- if "Gives access to the logs produced" in log.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import threading
-import time
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-from tools import check_proc_existence_and_kill_multi
-import HTMLTestRunner
-
-sleep_time = 2
-
-class TestLog(unittest.TestCase):
- '''Test of log command: launch of browser
- '''
- def test_launch_browser(self):
- '''Test the launch of browser when invoking the log command
- '''
-
- OK = "KO"
-
- sat = Sat("-oUSER.browser='konqueror'")
- time.sleep(sleep_time)
- cmd_log = threading.Thread(target=sat.log, args=('',))
- cmd_log.start()
-
- time.sleep(sleep_time)
-
- sat.config("")
- browser = sat.cfg.USER.browser
- pid = check_proc_existence_and_kill_multi(browser + ".*" + "hat\.xml", 10)
-
- if pid:
- OK = "OK"
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from tools import outRedirection
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-import src.product
-
-class TestClean(unittest.TestCase):
- '''Test of the clean command
- '''
-
- def test_clean_no_args(self):
- '''Test the clean command with no arguments (nothing to clean)
- '''
- OK = 'KO'
-
- appli = 'appli-test'
-
- sat = Sat()
-
- # output redirection
- my_out = outRedirection()
-
- sat.clean(appli)
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- if "Nothing to suppress" in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_clean_sources(self):
- '''Test the clean of sources
- '''
- OK = "KO"
-
- appli = 'appli-test'
- product_name = "PRODUCT_GIT"
-
- sat = Sat()
-
- # Make sure the sources exist
- sat.prepare(appli + " -p " + product_name)
-
- # Call the command
- sat.clean(appli + " -p " + product_name + " --sources", batch=True)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
-
- if not os.path.exists(expected_src_dir):
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_clean_build(self):
- '''Test the clean of build
- '''
- OK = "KO"
-
- appli = 'appli-test'
- product_name = "PRODUCT_GIT"
-
- sat = Sat()
-
- # Make sure the build exists
- sat.prepare(appli + " -p " + product_name)
- sat.configure(appli + " -p " + product_name)
-
- # Call the command
- sat.clean(appli + " -p " + product_name + " --build", batch=True)
-
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
-
- if not os.path.exists(expected_build_dir):
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_clean_install(self):
- '''Test the clean of install
- '''
- OK = "KO"
-
- appli = 'appli-test'
- product_name = "PRODUCT_GIT"
-
- sat = Sat()
-
- # Make sure the build exists
- sat.prepare(appli + " -p " + product_name)
- sat.configure(appli + " -p " + product_name)
-
- # Call the command
- sat.clean(appli + " -p " + product_name + " --install", batch=True)
-
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
-
- if not os.path.exists(expected_install_dir):
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_clean_all(self):
- '''Test the clean of all (build, src, install)
- '''
- OK = "KO"
-
- appli = 'appli-test'
- product_name = "PRODUCT_GIT"
-
- sat = Sat()
-
- # Make sure the build exists
- sat.prepare(appli + " -p " + product_name)
- sat.compile(appli + " -p " + product_name)
-
- # Call the command
- sat.clean(appli + " -p " + product_name + " --all", batch=True)
-
- expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
- expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
-
- if not os.path.exists(expected_install_dir) and not os.path.exists(expected_build_dir) and not os.path.exists(expected_src_dir):
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
- def test_clean_sources_without_dev(self):
- '''Test the clean with sources_without_dev option
- '''
- OK = "KO"
-
- appli = 'appli-test'
- product_name = "PRODUCT_GIT"
- product_name2 = "PRODUCT_DEV"
-
- sat = Sat()
-
- # Make sure the build exists
- sat.prepare(appli + " -p " + product_name + "," + product_name2)
-
- # Call the command
- sat.clean(appli + " -p " + product_name + " --sources_without_dev", batch=True)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_src_dir2 = src.product.get_product_config(sat.cfg, product_name2).source_dir
-
- if not os.path.exists(expected_src_dir) and os.path.exists(expected_src_dir2):
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-
- def test_description(self):
- '''Test the sat -h clean
- '''
-
- OK = "KO"
-
- import clean
-
- if "The clean command suppress the source, build, or install" in clean.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import shutil
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from tools import outRedirection
-
-import src.product
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestPatch(unittest.TestCase):
- '''Test of the patch command
- '''
-
- def test_patch_dev(self):
- '''Test the patch command with a product in dev mode
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_DEV'
-
- sat = Sat("-oUSER.output_level=2")
-
- sat.config(appli)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
- expected_text = 'HELLO WORLD\n'
-
- if os.path.exists(expected_src_dir):
- shutil.rmtree(expected_src_dir)
-
- sat.source(appli + ' --product ' + product_name)
-
- f = open(expected_file_path, 'r')
- text = f.readlines()[0]
- OK1 = 'KO'
- if text == expected_text:
- OK1 = 'OK'
-
- sat.patch(appli + ' --product ' + product_name)
-
- new_expected_text = 'HELLO WORLD MODIFIED\n'
- f = open(expected_file_path, 'r')
- text = f.readlines()[0]
-
- OK2 = 'KO'
- if text == new_expected_text:
- OK2 = 'OK'
-
- if (OK1, OK2)==('OK', 'OK'):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_no_sources_found(self):
- '''Test the patch command with a product with no sources found
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_DEV'
-
- sat = Sat('')
- sat.config(appli)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
-
- if os.path.exists(expected_src_dir):
- shutil.rmtree(expected_src_dir)
-
- # output redirection
- my_out = outRedirection()
-
- sat.patch(appli + ' --product ' + product_name)
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- if "No sources found for the " + product_name +" product" in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_no_patch(self):
- '''Test the patch command with a product without patch
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_ARCHIVE'
-
- sat = Sat('-v4')
-
- sat.source(appli + ' --product ' + product_name)
-
- # output redirection
- my_out = outRedirection()
-
- sat.patch(appli + ' --product ' + product_name)
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- if "No patch for the " + product_name +" product" in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_invalid_patch(self):
- '''Test the patch command with a product with a not valid patch
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_DEV'
-
- sat = Sat("-oPRODUCTS.PRODUCT_DEV.default.patches=['/']")
-
- sat.source(appli + ' --product ' + product_name)
-
- # output redirection
- my_out = outRedirection()
-
- sat.patch(appli + ' --product ' + product_name)
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- if "Not a valid patch" in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h patch
- '''
-
- OK = "KO"
-
- import patch
-
- if "The patch command apply the patches on the sources of" in patch.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-import shutil
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-import src
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestPrepare(unittest.TestCase):
- '''Test of the prepare command
- '''
-
- def test_prepare_dev(self):
- '''Test the prepare command with a product in dev mode
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_DEV'
-
- sat = Sat()
-
- sat.config(appli)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
- expected_text = 'HELLO WORLD\n'
-
- if os.path.exists(expected_src_dir):
- shutil.rmtree(expected_src_dir)
-
- sat.prepare(appli + ' --product ' + product_name)
-
- f = open(expected_file_path, 'r')
- text = f.readlines()[0]
- if text == expected_text:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_prepare_all(self):
- '''Test the prepare command with all products
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_DEV'
-
- sat = Sat()
- sat.config(appli)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
- expected_text = 'HELLO WORLD\n'
-
- if os.path.exists(expected_src_dir):
- shutil.rmtree(expected_src_dir)
-
- sat.prepare(appli)
-
- f = open(expected_file_path, 'r')
- text = f.readlines()[0]
- if text == expected_text:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_prepare_option_sample_and_force(self):
- '''Test the prepare command with all products
- '''
- OK = 'KO'
-
- appli = 'appli-test'
-
- sat = Sat()
- sat.config(appli)
-
- try:
- sat.prepare(appli + " --force --force_patch")
- OK = 'OK'
- except:
- pass
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h prepare
- '''
-
- OK = "KO"
-
- import prepare
-
- if "The prepare command gets the sources" in prepare.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from tools import outRedirection
-
-import src.product
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestSource(unittest.TestCase):
- '''Test of the source command
- '''
-
- def test_source_archive(self):
- '''Test the source command with archive product
- '''
- appli = 'appli-test'
- product_name = 'PRODUCT_ARCHIVE'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
- expected_text = 'HELLO WORLD\n'
-
- f = open(expected_file_path, 'r')
- text = f.read()
-
- # pyunit method to compare 2 str
- self.assertEqual(text, expected_text)
-
- def test_source_git(self):
- '''Test the source command with git product
- '''
- appli = 'appli-test'
- product_name = 'PRODUCT_GIT'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
- expected_text = 'HELLO WORLD\n'
-
- f = open(expected_file_path, 'r')
- text = f.read()
-
- # pyunit method to compare 2 str
- self.assertEqual(text, expected_text)
-
- def test_source_cvs(self):
- '''Test the source command with cvs product
- '''
- appli = 'appli-test'
- product_name = 'PRODUCT_CVS'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'README.FIRST.txt')
- expected_text = 'Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE\n'
-
- f = open(expected_file_path, 'r')
- text = f.readlines()[0]
-
- # pyunit method to compare 2 str
- self.assertEqual(text, expected_text)
-
- """
- def test_source_svn(self):
- '''Test the source command with svn product
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_SVN'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
- expected_file_path = os.path.join(expected_src_dir, 'scripts', 'README')
- expected_text = 'this directory contains scripts used by salomeTool'
-
- f = open(expected_file_path, 'r')
- text = f.readlines()[0]
-
- if expected_text in text:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
- """
-
- def test_source_native(self):
- '''Test the source command with native product
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_NATIVE'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- expected_src_dir = os.path.join(sat.cfg.APPLICATION.workdir, 'SOURCES', product_name)
- if not os.path.exists(expected_src_dir):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_source_fixed(self):
- '''Test the source command with fixed product
- '''
- OK = 'KO'
-
- appli = 'appli-test'
- product_name = 'PRODUCT_FIXED'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- expected_src_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
-
- if os.path.exists(expected_src_dir):
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
- """
- def test_source_unknown(self):
- '''Test the source command with unknown product
- '''
- OK = 'KO'
-
- # output redirection
- my_out = outRedirection()
-
- appli = 'appli-test'
- product_name = 'PRODUCT_UNKNOWN'
-
- sat = Sat()
- sat.source(appli + ' --product ' + product_name)
-
- # stop output redirection
- my_out.end_redirection()
-
- # get results
- res = my_out.read_results()
-
- if "Unknown get source method" in res:
- OK = 'OK'
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
- """
-
- def test_description(self):
- '''Test the sat -h source
- '''
-
- OK = "KO"
-
- import source
-
- if "gets the sources of the application" in source.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env bash
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2013 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-echo "Begin date:"
-date
-echo
-echo "Remove old results ... "
-rm -rf .coverage htmlcov
-echo "Done"
-echo
-echo "****************************"
-coverage run --source=../commands/config.py config/option_value.py > test_res.html
-coverage run --source=../commands/config.py -a config/option_value_2.py >> test_res.html
-coverage run --source=../commands/config.py -a config/create_user_pyconf.py >> test_res.html
-coverage run --source=../commands/config.py -a config/option_copy.py >> test_res.html
-coverage run --source=../commands/config.py -a config/option_edit.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/log.py,../src/xmlManager.py,../src/logger.py -a log/launch_browser.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/log.py,../src/xmlManager.py,../src/logger.py -a log/launch_browser2.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py -a prepare/test_source.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py -a prepare/test_patch.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py -a prepare/test_prepare.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py,../commands/clean.py -a prepare/test_clean.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/environ.py -a environ/test_environ.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/configure.py,../commands/environ.py -a compilation/test_configure.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/make.py,../commands/environ.py -a compilation/test_make.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/makeinstall.py,../commands/environ.py -a compilation/test_makeinstall.py >> test_res.html
-coverage run --source=../commands/config.py,../commands/compile.py,../commands/configure.py,../commands/make.py,../commands/makeinstall.py,../commands/environ.py -a compilation/test_compilation.py >> test_res.html
-coverage run --source=../commands/shell.py -a shell/test_shell.py >> test_res.html
-coverage run --source=../commands/job.py -a job/test_job.py >> test_res.html
-coverage run --source=../commands/jobs.py -a jobs/test_jobs.py >> test_res.html
-coverage run --source=../commands/test.py,../src/test_module.py,../src/fork.py -a test/test_command.py >> test_res.html
-echo "****************************"
-echo
-echo "building html coverage"
-coverage html
-echo "Done"
-echo
-echo "End date:"
-date
-echo
-
-#firefox test_res.html htmlcov/index.html
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestShell(unittest.TestCase):
- '''Test of the shell command
- '''
-
- def test_shell(self):
- '''Test the shell command with the --command option
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- sat.config()
- sat_way = sat.cfg.VARS.salometoolsway
-
- # Execute the shell command
- sat.shell("--command ls " + sat_way)
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_files = [line.replace("\n", "") for line in log_files]
-
- text = open(log_files[2], "r").read()
-
- if "salomeTools.py" in text:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_failing_shell(self):
- '''Test the shell command with the --command option with a failing command
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
-
- sat = Sat("-l " + tmp_file)
-
- sat.config()
-
- # Execute the shell command
- res = sat.shell("--command i_fail")
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_files = [line.replace("\n", "") for line in log_files]
-
- text = open(log_files[2], "r").read()
-
- if "i_fail" in text and res == 1:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h shell
- '''
-
- OK = "KO"
-
- import shell
-
- if "Executes the shell command passed as argument" in shell.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
+++ /dev/null
-#!/usr/bin/env python
-#-*- coding:utf-8 -*-
-# Copyright (C) 2010-2012 CEA/DEN
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-import os
-import sys
-
-# get execution path
-testdir = os.path.dirname(os.path.realpath(__file__))
-sys.path.append(os.path.join(testdir, '..', '..'))
-sys.path.append(os.path.join(testdir, '..', '_testTools'))
-sys.path.append(os.path.join(testdir, '..', '..','commands'))
-
-from salomeTools import Sat
-import HTMLTestRunner
-
-class TestTest(unittest.TestCase):
- '''Test of the test command
- '''
-
- def test_test(self):
- '''Test the test command
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
- application = "SALOME-7.8.0"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- sat.test(application + " --grid GEOM --session light" )
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_testboard = [line.replace("\n", "") for line in log_files if 'testboard.xml' in line]
-
- text = open(log_testboard[0], "r").read()
-
- if '<session name="light">' in text:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_PY_test(self):
- '''Test the test command with PY type
- '''
- OK = 'KO'
- tmp_file = "/tmp/test.txt"
- application = "SALOME-7.8.0"
-
- sat = Sat("-l " + tmp_file)
-
- # Execute the job command
- sat.test(application + " --grid MED --session PY_test_withKernel" )
-
- ff = open(tmp_file, "r")
- log_files = ff.readlines()
- ff.close()
- os.remove(tmp_file)
- log_testboard = [line.replace("\n", "") for line in log_files if 'testboard.xml' in line]
-
- text = open(log_testboard[0], "r").read()
-
- if '<session name="PY_test_withKernel">' in text:
- OK = 'OK'
- # pyunit method to compare 2 str
- self.assertEqual(OK, 'OK')
-
- def test_description(self):
- '''Test the sat -h test
- '''
-
- OK = "KO"
-
- import test
-
- if "The test command runs a test base on a SALOME installation" in test.description():
- OK = "OK"
-
- # pyunit method to compare 2 str
- self.assertEqual(OK, "OK")
-
-# test launch
-if __name__ == '__main__':
- HTMLTestRunner.main()
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import initializeTest # set PATH etc for test
+
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+import src.pyconf as PYF # 0.3.7
+
+_EXAMPLES = {
+1 : """\
+ messages:
+ [
+ {
+ stream : "sys.stderr" # modified
+ message: 111 # modified
+ name: 'Harry'
+ }
+ {
+ stream : $messages[0].stream
+ message: 1.23e4 # modified do not work 0.3.7
+ name: 'Ruud'
+ }
+ {
+ stream : "HELLO " + $messages[0].stream
+ message: 'Bienvenue'
+ name: "Yves"
+ }
+ ]
+""",
+
+2 : """\
+ aa: 111
+ bb: $aa + 222
+""",
+
+3 : """\
+ aa: Yves
+ bb: "Herve" # avoid Hervé -> 'utf8' codec can't decode byte
+""",
+
+4 : """\
+ aa: Yves
+ bb: "Hervé" # avoid Hervé -> 'utf8' codec can't decode byte
+""",
+
+
+}
+
+
+class TestCase(unittest.TestCase):
+ "Test the debug.py"""
+
+ def test_000(self):
+ # one shot setUp() for this TestCase
+ # DBG.push_debug(True)
+ # SAT.setNotLocale() # test english
+ return
+
+ def test_005(self):
+ res = DBG.getLocalEnv()
+ self.assertTrue(len(res.split()) > 0)
+ self.assertTrue("USER :" in res)
+ self.assertTrue("LANG :" in res)
+
+ def test_010(self):
+ inStream = DBG.InStream(_EXAMPLES[1])
+ self.assertEqual(inStream.getvalue(), _EXAMPLES[1])
+ cfg = PYF.Config(inStream)
+ self.assertEqual(len(cfg.messages), 3)
+ outStream = DBG.OutStream()
+ DBG.saveConfigStd(cfg, outStream)
+ res = outStream.value
+ DBG.write("test_010 cfg std", res)
+ self.assertTrue("messages :" in res)
+ self.assertTrue("'sys.stderr'" in res)
+
+ def test_020(self):
+ inStream = DBG.InStream(_EXAMPLES[2])
+ cfg = PYF.Config(inStream)
+ res = DBG.getStrConfigDbg(cfg)
+ DBG.write("test_020 cfg dbg", res)
+ ress = res.split("\n")
+ self.assertTrue(".aa" in ress[0])
+ self.assertTrue(": '111'" in ress[0])
+ self.assertTrue(".bb" in ress[1])
+ self.assertTrue(": $aa + 222 " in ress[1])
+ self.assertTrue("--> '333'" in ress[1])
+
+ def test_025(self):
+ inStream = DBG.InStream(_EXAMPLES[1])
+ cfg = PYF.Config(inStream)
+ outStream = DBG.OutStream()
+ DBG.saveConfigDbg(cfg, outStream)
+ res = outStream.value
+ DBG.write("test_025 cfg dbg", res)
+ for i in range(len(cfg.messages)):
+ self.assertTrue("messages[%i].name" % i in res)
+ self.assertTrue("--> 'HELLO sys.stderr'" in res)
+
+
+ def test_999(self):
+ # one shot tearDown() for this TestCase
+ # SAT.setLocale() # end test english
+ # DBG.pop_debug()
+ return
+
+if __name__ == '__main__':
+ unittest.main(exit=False)
+ pass
+
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+"""
+see: http://sametmax.com/ecrire-des-logs-en-python
+
+| # creation d'un formateur qui va ajouter le temps, le niveau
+| # de chaque message quand on ecrira un message dans le log
+| formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
+|
+| # creation d'un handler qui va rediriger une ecriture du log vers
+| # un fichier en mode 'append', avec 1 backup et une taille max de 1Mo
+| file_handler = RotatingFileHandler('activity.log', 'a', 1000000, 1)
+|
+| # on lui met le niveau sur DEBUG, on lui dit qu'il doit utiliser le formateur
+| # cree precedement et on ajoute ce handler au logger
+| file_handler.setLevel(logging.DEBUG)
+| file_handler.setFormatter(formatter)
+| logger.addHandler(file_handler)
+|
+| # creation d'un second handler qui va rediriger chaque ecriture de log
+| # sur la console
+| stream_handler = logging.StreamHandler()
+| stream_handler.setLevel(logging.DEBUG)
+| logger.addHandler(stream_handler)
+|
+| # Après 3 heures, on peut enfin logguer
+| # Il est temps de spammer votre code avec des logs partout :
+| logger.info('Hello')
+| logger.warning('Testing %s', 'foo')
+"""
+
+import os
+import sys
+import unittest
+import pprint as PP
+import logging as LOGI
+from logging.handlers import BufferingHandler
+
+import src.debug as DBG
+
+verbose = False #True
+
+_TRACE = LOGI.INFO - 2 # just below info
+
+class LoggerSat(LOGI.Logger):
+ """
+ Elementary prototype for logger sat
+ add a level TRACE as log.trace(msg)
+ below log.info(msg)
+ above log.debug(msg)
+ to assume store long log asci in files txt under/outside files xml
+
+ see: /usr/lib64/python2.7/logging/xxx__init__.py etc.
+ """
+
+ def __init__(self, name, level=LOGI.INFO):
+ """
+ Initialize the logger with a name and an optional level.
+ """
+ super(LoggerSat, self).__init__(name, level)
+ LOGI.addLevelName(_TRACE, "TRACE")
+ # LOGI.TRACE = _TRACE # only for coherency,
+
+ def trace(self, msg, *args, **kwargs):
+ """
+ Log 'msg % args' with severity '_TRACE'.
+
+ To pass exception information, use the keyword argument exc_info with
+ a true value, e.g.
+
+ logger.trace("Houston, we have a %s", "long trace to follow")
+ """
+ if self.isEnabledFor(_TRACE):
+ self._log(_TRACE, msg, args, **kwargs)
+
+class TestCase(unittest.TestCase):
+ "Test the debug.py"""
+
+ initialLoggerClass = [] # to keep clean module logging
+
+ def test_000(self):
+ # one shot setUp() for this TestCase
+ self.initialLoggerClass.append(LOGI._loggerClass)
+ LOGI.setLoggerClass(LoggerSat)
+ if verbose:
+ DBG.push_debug(True)
+ # DBG.write("assert unittest", [a for a in dir(self) if "assert" in a])
+ pass
+
+ def test_999(self):
+ # one shot tearDown() for this TestCase
+ if verbose:
+ DBG.pop_debug()
+ LOGI.setLoggerClass(self.initialLoggerClass[0])
+ return
+
+ def test_010(self):
+ # LOGI.setLoggerClass(LoggerSat) # done once in test_000
+ name = "testLogging"
+ lgr = LOGI.getLogger(name) # create it
+ lgr.setLevel("DEBUG")
+ self.assertEqual(lgr.__class__, LoggerSat)
+ self.assertEqual(lgr.name, name)
+ self.assertIn("trace", dir(lgr))
+ self.assertIn("TRACE", LOGI._levelNames.keys())
+ self.assertIn(_TRACE, LOGI._levelNames.keys())
+ self.assertEqual(LOGI.getLevelName(LOGI.INFO), "INFO")
+ self.assertEqual(LOGI.getLevelName(_TRACE), "TRACE")
+
+ # creation d'un handler pour chaque log sur la console
+ formatter = LOGI.Formatter('%(levelname)-8s :: %(message)s')
+ # stream_handler = LOGI.handlers.StreamHandler() # log outputs in console
+ stream_handler = LOGI.handlers.BufferingHandler(1000) # log outputs in memory
+ stream_handler.setLevel(LOGI.DEBUG)
+ stream_handler.setFormatter(formatter)
+ lgr.addHandler(stream_handler)
+ # print # skip one line if outputs in console
+ lgr.warning("!!! test warning")
+ lgr.info("!!! test info")
+ lgr.trace("!!! test trace")
+ lgr.debug("!!! test debug")
+ self.assertEqual(len(stream_handler.buffer), 4)
+ rec = stream_handler.buffer[-1]
+ self.assertEqual(rec.levelname, "DEBUG")
+ self.assertEqual(rec.msg, "!!! test debug")
+ self.assertEqual(stream_handler.get_name(), None) # what to serve ?
+
+ def test_020(self):
+ # LOGI.setLoggerClass(LoggerSat)
+ name = "testLogging"
+ lgr = LOGI.getLogger(name) # find it as created yet in test_010
+ stream_handler = lgr.handlers[0]
+ rec = stream_handler.buffer[-1]
+ self.assertEqual(rec.levelname, "DEBUG")
+ self.assertEqual(rec.msg, "!!! test debug")
+
+
+
+
+if __name__ == '__main__':
+ unittest.main(exit=False)
+ pass
+
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import initializeTest # set PATH etc for test
+
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+import src.pyconf as PYF # 0.3.7
+
+_EXAMPLES = {
+1 : """\
+ messages:
+ [
+ {
+ stream : "sys.stderr" # modified
+ message: 'Welcome'
+ name: 'Harry'
+ }
+ {
+ stream : "sys.stdout" # modified
+ message: 'Welkom'
+ name: 'Ruud'
+ }
+ {
+ stream : $messages[0].stream
+ message: 'Bienvenue'
+ name: "Yves"
+ }
+ ]
+""",
+
+2 : """\
+ aa: 111
+ bb: $aa + 222
+""",
+
+3 : """\
+ aa: Yves
+ bb: "Herve" # avoid Hervé -> 'utf8' codec can't decode byte
+""",
+
+4 : """\
+ aa: Yves
+ bb: "Hervé" # avoid Hervé -> 'utf8' codec can't decode byte
+""",
+
+5 : """\
+ aa: Yves
+ bb: "Herve"
+ cc: [
+ cc1
+ cc2
+ cc3
+ $bb + " hello"
+ ]
+ dd: {
+ d1 : dd11
+ d2 : dd22
+ d3 : dd33
+ d4 : $bb + " bye"
+ }
+""",
+
+# error circular
+6 : """\
+ aa: Yves
+ bb: $cc
+ cc: $bb
+""",
+
+7 : """\
+ aa: Yves
+ bb: $cc
+ cc: [
+ cc1
+ $bb
+ ]
+""",
+
+8 : """\
+ aa: Yves
+ bb: $cc
+ cc: {
+ cc1: cc11
+ cc2: $bb
+ }
+""",
+
+}
+
+
+class TestCase(unittest.TestCase):
+ "Test the pyconf.py"""
+
+ def test_000(self):
+ # one shot setUp() for this TestCase
+ # DBG.push_debug(True)
+ # SAT.setNotLocale() # test english
+ return
+
+ def test_010(self):
+ # pyconf.py doc example 0.3.7
+ # https://www.red-dove.com/config-doc/ is 0.3.9 !
+ # which, when run, would yield the console output:
+
+ expected = """\
+Welcome, Harry
+Welkom, Ruud
+Bienvenue, Yves
+"""
+ inStream = DBG.InStream(_EXAMPLES[1])
+ cfg = PYF.Config(inStream)
+ res = ''
+ for m in cfg.messages:
+ res += '%s, %s\n' % (m.message, m.name)
+ self.assertEqual(res, expected)
+ outStream = DBG.OutStream()
+ cfg.__save__(outStream) # sat renamed save() in __save__()
+ res = outStream.value
+ DBG.write("test_010 cfg", res)
+ self.assertTrue("name : 'Harry'" in res)
+ self.assertTrue("name : 'Ruud'" in res)
+ self.assertTrue("name : 'Yves'" in res)
+
+ def test_020(self):
+ cfg = PYF.Config()
+ self.assertEqual(str(cfg), '{}')
+ self.assertEqual(cfg.__repr__(), '{}')
+ cfg.aa = "1111"
+ self.assertEqual(str(cfg), "{'aa': '1111'}")
+ cfg.bb = 2222
+ self.assertTrue("'bb': 2222" in str(cfg))
+ self.assertTrue("'aa': '1111'" in str(cfg))
+ cfg.cc = 3333.
+ self.assertTrue("'cc': 3333." in str(cfg))
+
+ def test_030(self):
+ inStream = DBG.InStream(_EXAMPLES[2])
+ cfg = PYF.Config(inStream)
+ self.assertEqual(str(cfg), "{'aa': 111, 'bb': $aa + 222}")
+ self.assertEqual(cfg.aa, 111)
+ self.assertEqual(cfg.bb, 333)
+
+ def test_040(self):
+ inStream = DBG.InStream(_EXAMPLES[3])
+ cfg = PYF.Config(inStream)
+ self.assertEqual(cfg.aa, "Yves")
+ self.assertEqual(cfg.bb, "Herve")
+ self.assertEqual(type(cfg.bb), str)
+ cfg.bb = "Hervé" # try this
+ self.assertEqual(type(cfg.bb), str)
+ self.assertEqual(cfg.bb, "Hervé")
+
+ def test_045(self):
+ # make Hervé valid only with pyconf.py as 0.3.9
+ inStream = DBG.InStream(_EXAMPLES[4])
+ outStream = DBG.OutStream()
+ with self.assertRaises(Exception):
+ cfg = PYF.Config(inStream)
+
+ return # TODO only with pyconf.py as 0.3.9
+ cfg.save(outStream) # OK
+ # TODO: cfg = PYF.Config(inStream)
+ # cfg.__save__(outStream) # KO and sat renamed save() in __save__()
+ res = outStream.value
+ DBG.write("test_045 cfg", res)
+ self.assertTrue("aa : 'Yves'" in res)
+ self.assertTrue(r"bb : 'Herv\xc3\xa9'" in res)
+ self.assertEqual(cfg.bb, "Hervé")
+
+ def test_100(self):
+ inStream = DBG.InStream(_EXAMPLES[5])
+ outStream = DBG.OutStream()
+ cfg = PYF.Config(inStream) # KO
+ cfg.__save__(outStream) # sat renamed save() in __save__()
+ res = outStream.value
+ DBG.write("test_100 cfg save", res)
+ DBG.write("test_100 cfg debug", cfg)
+ DBG.write("test_100 cfg.cc debug", cfg.cc)
+
+ cc = cfg.cc
+ # DBG.write("test_100 type cc[3]", dir(cc), True)
+ DBG.write("test_100 cc", [cc.data[i] for i in range(len(cc))])
+
+ def test_100(self):
+ inStream = DBG.InStream(_EXAMPLES[5])
+ outStream = DBG.OutStream()
+ cfg = PYF.Config(inStream) # KO
+ cfg.__save__(outStream) # sat renamed save() in __save__()
+ res = outStream.value
+ DBG.write("test_100 cfg save", res)
+ DBG.write("test_100 cfg debug", cfg)
+ DBG.write("test_100 cfg.cc debug", cfg.cc)
+
+ cc = cfg.cc
+ # DBG.write("test_100 type cc[3]", dir(cc), True)
+ DBG.write("test_100 cc", [cc.data[i] for i in range(len(cc))])
+
+ def test_110(self):
+ inStream = DBG.InStream(_EXAMPLES[6])
+ outStream = DBG.OutStream()
+ cfg = PYF.Config(inStream)
+ cfg.__save__(outStream)
+
+ res = outStream.value
+ DBG.write("test_110 cfg save", res)
+ self.assertNotIn("ERROR", res)
+
+ res = DBG.getStrConfigDbg(cfg)
+ DBG.write("test_110 cfg debug", res)
+ self.assertIn("ERROR", res)
+ self.assertIn("unable to evaluate $cc", res)
+ self.assertIn("unable to evaluate $bb", res)
+
+ def test_120(self):
+ for ii in [7, 8]:
+ inStream = DBG.InStream(_EXAMPLES[ii])
+ outStream = DBG.OutStream()
+ cfg = PYF.Config(inStream)
+ cfg.__save__(outStream)
+
+ res = outStream.value
+ DBG.write("test_120 cfg save", res)
+ self.assertNotIn("ERROR", res)
+
+ res = DBG.getStrConfigDbg(cfg)
+
+ DBG.write("test_120 cfg debug", res)
+ # no error circular !!!
+ # self.assertIn("ERROR", res) # no error circular !!!
+ # self.assertIn("unable to evaluate $cc", res)
+ # self.assertIn("unable to evaluate $bb", res)
+ res = cfg.bb
+ DBG.write("test_120 cfg.bb debug", res)
+
+ res = cfg.cc
+ DBG.write("test_120 cfg.cc debug", res)
+
+ def test_999(self):
+ # one shot tearDown() for this TestCase
+ # SAT.setLocale() # end test english
+ # DBG.pop_debug()
+ return
+
+if __name__ == '__main__':
+ unittest.main(exit=False)
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import initializeTest # set PATH etc for test
+
+import src.salomeTools as SAT
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+import src.loggingSimple as LOG
+
+class TestCase(unittest.TestCase):
+ "Test the sat --help commands"""
+
+ debug = False
+
+ def tearDown(self):
+ # print "tearDown", __file__
+ # assure self.logger clear for next test
+ logger = LOG.getUnittestLogger()
+ logs = logger.getLogsAndClear()
+ # using assertNotIn() is too much verbose
+ self.assertFalse("ERROR" in logs)
+ self.assertFalse("CRITICAL" in logs)
+
+ def test_000(self):
+ logger = LOG.getUnittestLogger()
+ # one shot setUp() for this TestCase
+ if self.debug: DBG.push_debug(True)
+ SAT.setNotLocale() # test english
+
+ def test_999(self):
+ # one shot tearDown() for this TestCase
+ SAT.setLocale() # end test english
+ if self.debug: DBG.pop_debug()
+
+ def test_010(self): # TODO fix logger unittest
+ cmd = "sat --help"
+ res = SAT.launchSat(cmd)
+ self.assertTrue(res.isOk())
+ out = res.getValue()
+ self.assertTrue(" - config" in out)
+ self.assertTrue(" - prepare" in out)
+ self.assertTrue(" - compile" in out)
+
+ def test_011(self):
+ logger = LOG.getUnittestLogger()
+ cmd = "--help"
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ self.assertTrue(returnCode.isOk())
+ logs = logger.getLogs()
+ DBG.write("test_011 logger", logs)
+ self.assertTrue(" - config" in logs)
+ self.assertTrue(" - prepare" in logs)
+ self.assertTrue(" - compile" in logs)
+
+ def test_030(self):
+ cmd = "sat config --help"
+ returnCode = SAT.launchSat(cmd)
+ self.assertTrue(returnCode.isOk())
+ out = returnCode.getValue()
+ DBG.write("test_030 stdout", out)
+ self.assertTrue("--value" in out)
+
+ def test_031(self):
+ logger = LOG.getUnittestLogger()
+ cmd = "config --help"
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ self.assertTrue(returnCode.isOk())
+ logs = logger.getLogs()
+ DBG.write("test_031 logger", logs)
+ self.assertTrue("--help" in logs)
+
+ def test_032(self):
+ logger = LOG.getUnittestLogger()
+ cmd = "prepare --help"
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ self.assertTrue(returnCode.isOk())
+ logs = logger.getLogs()
+ DBG.write("test_031 logger", logs)
+ self.assertTrue("--help" in logs)
+
+ def test_040(self):
+ logger = LOG.getUnittestLogger()
+ cmd = "config --list"
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ self.assertTrue(returnCode.isOk())
+ logs = logger.getLogs()
+ self.assertTrue("Applications" in logs)
+
+ def test_050(self):
+ cmds = SAT.getCommandsList()
+ DBG.write("test_050 getCommandsList", cmds)
+ for c in cmds:
+ cmd = "sat %s --help" % c
+ DBG.write("test_050", cmd)
+ returnCode = SAT.launchSat(cmd)
+ if not returnCode.isOk():
+ DBG.write("test_050 %s" % cmd, returnCode.getValue(), True)
+ self.assertTrue(returnCode.isOk())
+ out = returnCode.getValue()
+ DBG.write("test_050 %s stdout" % c, out)
+ self.assertTrue("The %s command" % c in out)
+ self.assertTrue("Available options" in out)
+
+ def test_051(self):
+ logger = LOG.getUnittestLogger()
+ cmds = SAT.getCommandsList()
+ for c in cmds:
+ cmd = "%s --help" % c
+ DBG.write("test_051", cmd)
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ self.assertTrue(returnCode.isOk())
+ logs = logger.getLogsAndClear()
+ DBG.write(cmd, logs)
+ self.assertTrue("The %s command" % c in logs)
+ self.assertTrue("Available options" in logs)
+
+if __name__ == '__main__':
+ unittest.main(exit=False)
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import initializeTest # set PATH etc for test
+
+import src.salomeTools as SAT
+import src.debug as DBG # Easy print stderr (for DEBUG only)
+import src.loggingSimple as LOG
+
+class TestCase(unittest.TestCase):
+ "Test the sat commands on APPLI_TEST configuration pyconf etc. files"""
+
+ debug = False
+
+ # see test_100, # commands are expected OK
+ TRG = "APPLI_TEST" # "SALOME-8.4.0"
+ satCommandsToTestOk = [
+ "config -l",
+ "config -v .",
+ "config -g .",
+ "config %s --value ." % TRG,
+ "config %s --debug ." % TRG,
+ "config %s --info KERNEL" % TRG,
+ "config %s --show_patchs" % TRG,
+ ]
+ # see test_110, # commands are expected KO
+ satCommandsToTestKo = [
+ "config %s --info oops" % TRG,
+ "config --oops",
+ ]
+ # see test_120, # commands are expected Raise,
+ # but if fixed go to satCommandsToTestKo
+ satCommandsToTestRaise = [
+ "oopsconfig --oops .",
+ ]
+
+ def tearDown(self):
+ # print "tearDown", __file__
+ # assure self.logger clear for next test
+ logger = LOG.getUnittestLogger()
+ logs = logger.getLogsAndClear()
+ # using assertNotIn() is too much verbose
+ self.assertFalse("ERROR ::" in logs)
+ self.assertFalse("CRITICAL ::" in logs)
+
+ def test_000(self):
+ logger = LOG.getUnittestLogger()
+ # one shot setUp() for this TestCase
+ if self.debug: DBG.push_debug(True)
+ SAT.setNotLocale() # test english
+
+ def test_999(self):
+ # one shot tearDown() for this TestCase
+ SAT.setLocale() # end test english
+ if self.debug: DBG.pop_debug()
+
+ def test_010(self):
+ logger = LOG.getUnittestLogger()
+ DBG.write("test_010 logger", logger.name)
+ cmd = "config -l"
+ s = SAT.Sat(logger)
+ DBG.write("s.getConfig()", s.getConfig()) #none
+ DBG.write("s.__dict__", s.__dict__) # have
+ returnCode = s.execute_cli(cmd)
+ DBG.write("test_010", returnCode)
+ logs = logger.getLogs()
+ DBG.write("test_010 logger", logs)
+ self.assertTrue(returnCode.isOk())
+
+ def xtest_100(self): # TODO
+ # test all satCommands expected OK
+ logger = LOG.getUnittestLogger()
+ dbg = self.debug
+ for cmd in self.satCommandsToTestOk:
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ DBG.write("test_100 'sat %s'" % cmd, str(returnCode), dbg)
+ logs = logger.getLogsAndClear()
+ DBG.write("logs", logs, dbg)
+ # using assertNotIn() is too much verbose
+ self.assertFalse("ERROR ::" in logs)
+ self.assertFalse("CRITICAL ::" in logs)
+
+ def test_110(self):
+ # test all satCommands expected KO
+ logger = LOG.getUnittestLogger()
+ dbg = self.debug
+ for cmd in self.satCommandsToTestKo:
+ s = SAT.Sat(logger)
+ returnCode = s.execute_cli(cmd)
+ DBG.write("test_110 'sat %s'" % cmd, returnCode, dbg)
+ logs = logger.getLogsAndClear()
+ DBG.write("logs", logs, dbg)
+
+ def test_120(self):
+ # test all satCommands expected raise
+ logger = LOG.getUnittestLogger()
+ dbg = self.debug
+ for cmd in self.satCommandsToTestRaise:
+ s = SAT.Sat(logger)
+ DBG.write("test_120 'sat %s'" % cmd, "expected raise", dbg)
+ with self.assertRaises(Exception):
+ returnCode = s.execute_cli(cmd)
+ logs = logger.getLogsAndClear()
+ DBG.write("logs", logs, dbg)
+
+
+if __name__ == '__main__':
+ unittest.main(exit=False)
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+"""
+to set id_rsa from/to reflexive on local machine:
+
+ @is231761/home/wambeke/.ssh>ssh wambeke@is231761
+ Password:
+ Last login: Thu Jun 7 13:34:07 2018 from is231761.intra.cea.fr
+ @is231761/home/wambeke>exit
+ déconnexion
+
+ @is231761/home/wambeke/.ssh> ssh-keygen
+ Generating public/private rsa key pair.
+ Enter file in which to save the key (/home/wambeke/.ssh/id_rsa):
+ Enter passphrase (empty for no passphrase):
+ Enter same passphrase again:
+ Your identification has been saved in /home/wambeke/.ssh/id_rsa.
+ Your public key has been saved in /home/wambeke/.ssh/id_rsa.pub.
+ The key fingerprint is:
+ SHA256:V0IU/wkuCRw42rA5bHFgdJlzDx9EIJyWIBrkzkL3GNA wambeke@is231761
+ The key's randomart image is:
+ +---[RSA 2048]----+
+ |ooo.=+o*o=*. |
+
+ | |
+ +----[SHA256]-----+
+
+ @is231761/home/wambeke/.ssh> ls
+ id_rsa id_rsa.pub known_hosts
+ @is231761/home/wambeke/.ssh> rm known_hosts
+ @is231761/home/wambeke/.ssh> ls
+ id_rsa id_rsa.pub
+
+ @is231761/home/wambeke/.ssh> ssh wambeke@is231761
+ The authenticity of host 'is231761 (127.0.0.1)' can't be established.
+ ECDSA key fingerprint is SHA256:QvrU7Abrbily0bzMjYbRPeKCxDkXT9rQ6pSpcm+yFN4.
+ ECDSA key fingerprint is MD5:6c:95:b7:c7:cd:de:c5:07:8b:3a:9b:14:d1:69:6b:c6.
+ Are you sure you want to continue connecting (yes/no)? yes
+ Warning: Permanently added 'is231761' (ECDSA) to the list of known hosts.
+ Password:
+ Last login: Thu Jun 7 13:35:07 2018 from is231761.intra.cea.fr
+ @is231761/home/wambeke>exit
+ déconnexion
+ Connection to is231761 closed.
+
+
+ @is231761/home/wambeke/.ssh> lst
+ total 124K
+ -rw-r--r-- 1 wambeke lgls 170 7 juin 13:36 known_hosts
+ drwx------ 2 wambeke lgls 4,0K 7 juin 13:36 .
+ -rw-r--r-- 1 wambeke lgls 398 7 juin 13:35 id_rsa.pub
+ -rw------- 1 wambeke lgls 1,7K 7 juin 13:35 id_rsa
+ drwxr-xr-x 182 wambeke lmpe 104K 6 juin 13:39 ..
+
+
+
+ @is231761/home/wambeke/.ssh> ssh-copy-id -i ~/.ssh/id_rsa.pub is231761
+ /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/wambeke/.ssh/id_rsa.pub"
+ /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
+ /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
+ Password:
+
+ Number of key(s) added: 1
+
+ Now try logging into the machine, with: "ssh 'is231761'"
+ and check to make sure that only the key(s) you wanted were added.
+
+ @is231761/home/wambeke/.ssh> ssh wambeke@is231761
+ Last login: Thu Jun 7 13:36:42 2018 from is231761.intra.cea.fr
+ @is231761/home/wambeke>exit
+ déconnexion
+ Connection to is231761 closed.
+
+"""
+
+import os
+import sys
+import unittest
+import getpass
+
+verbose = False
+
+class TestCase(unittest.TestCase):
+ "Test a paramiko connection"""
+
+ def setLoggerParamiko(self):
+ """to get logs of paramiko, useful if problems"""
+ import logging as LOGI
+ loggerPrmk = LOGI.getLogger("paramiko")
+ if len(loggerPrmk.handlers) != 0:
+ print("logging.__file__ %s" % LOGI.__file__)
+ print("logger paramiko have handler set yet, is a surprise")
+ return
+ if not verbose:
+ # stay as it, null
+ return
+
+ #set a paramiko logger verbose
+ handler = LOGI.StreamHandler()
+ msg = "create paramiko logger, with handler on stdout"
+
+ # handler = LOGI.MemoryHandler()
+ # etc... https://docs.python.org/2/library/logging.handlers.html
+ # msg = "create paramiko logger, with handler in memory"
+
+ # original frm from paramiko
+ # frm = '%(levelname)-.3s [%(asctime)s.%(msecs)03d] thr=%(thread)-3d %(name)s: %(message)s' # noqa
+ frm = '%(levelname)-5s :: %(asctime)s :: %(name)s :: %(message)s'
+ handler.setFormatter(LOGI.Formatter(frm, '%y%m%d_%H%M%S'))
+ loggerPrmk.addHandler(handler)
+
+ # logger is not notset but low, handlers needs setlevel greater
+ loggerPrmk.setLevel(LOGI.DEBUG)
+ handler.setLevel(LOGI.INFO) # LOGI.DEBUG) # may be other one
+
+ loggerPrmk.info(msg)
+
+
+ '''example from internet
+ def fetch_netmask(self, hostname, port=22):
+ private_key = os.path.expanduser('~/.ssh/id_rsa')
+ connection = open_ssh_connection('wambeke', hostname, port=port, key=private_key)
+
+ get_netmask = ("ip -oneline -family inet address show | grep {}").format(hostname)
+ stdin, stdout, stderr = connection.exec_command(get_netmask)
+ address = parse_address(hostname, stdout)
+ connection.close()
+ return address
+
+ def open_ssh_connection(self, username, hostname, port=22, key=None):
+ client = PK.SSHClient()
+ client.set_missing_host_key_policy(PK.AutoAddPolicy())
+ client.connect(hostname, port=port, timeout=5, username=username, key_filename=key)
+ return client
+ '''
+
+ def test_000(self):
+ self.setLoggerParamiko()
+
+
+ def test_010(self):
+ # http://docs.paramiko.org/en/2.4/api/agent.html
+
+ try:
+ import paramiko as PK
+ except:
+ print("\nproblem 'import paramiko', no tests")
+ return
+
+ # port=22 # useless
+ username = getpass.getuser()
+ hostname = os.uname()[1]
+ aFile = "/tmp/%s_test_paramiko.tmp" % username
+ cmd = ("pwd; ls -alt {0}; cat {0}").format(aFile)
+
+ # connect
+ client = PK.SSHClient()
+ client.set_missing_host_key_policy(PK.AutoAddPolicy())
+ # client.connect(hostname, username=username, password="xxxxx")
+ # client.connect(hostname, username=username, passphrase="yyyy", key_filename="/home/wambeke/.ssh/id_rsa_satjobs_passphrase")
+ # client.connect(hostname, username=username)
+
+ # timeout in seconds
+ client.connect(hostname, username=username, timeout=1.)
+
+ # obtain session
+ session = client.get_transport().open_session()
+ # Forward local agent
+ PK.agent.AgentRequestHandler(session)
+ # commands executed after this point will see the forwarded agent on the remote end.
+
+ # one api
+ session.exec_command("date > %s" % aFile)
+ cmd = ("pwd; ls -alt {0}; cat {0} && echo OK").format(aFile)
+ # another api
+ stdin, stdout, stderr = client.exec_command(cmd)
+ output = stdout.read()
+ if verbose:
+ print('stdout:\n%s' % output)
+ self.assertTrue(aFile in output)
+ self.assertTrue("OK" in output)
+ client.close()
+
+if __name__ == '__main__':
+ # verbose = True # human eyes
+ unittest.main(exit=False)
+ pass
--- /dev/null
+theses tests from sat5.0 are obsolete
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import src.product
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test of the compile command"""
+
+ def test_010(self):
+ # Test the compile command with '--products' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+
+ sat.clean(appli + ' --build --install --product ' + product_name, batch=True)
+ sat.compile(appli + ' --product ' + product_name)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the configure command with '--fathers' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+ product_name2 = 'PRODUCT_ARCHIVE'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+ expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
+ expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
+
+ sat.clean(appli + ' --build --install --product ' + product_name +"," +product_name2, batch=True)
+ sat.compile(appli + ' --with_fathers --product ' + product_name)
+
+ if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the configure command with '--children' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+ product_name2 = 'PRODUCT_ARCHIVE'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+ expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
+ expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
+
+ sat.clean(appli + ' --build --install --product ' + product_name +"," +product_name2, batch=True)
+ sat.compile(appli + ' --with_children --product ' + product_name2)
+
+ if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the configure command with '--clean_all' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+ product_name2 = 'PRODUCT_ARCHIVE'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+ expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
+ expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
+
+ sat.compile(appli + ' --with_children --product ' + product_name2)
+
+ sat.compile(appli + ' --clean_all --with_children --product ' + product_name2, batch=True)
+
+ if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_050(self):
+ # Test the configure command with '--clean_install' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+ product_name2 = 'PRODUCT_ARCHIVE'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name +"," +product_name2)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+ expected_install_dir2 = src.product.get_product_config(sat.cfg, product_name2).install_dir
+ expected_file_path2 = os.path.join(expected_install_dir2, 'bin/hello-archive')
+
+ sat.compile(appli + ' --with_children --product ' + product_name2)
+
+ sat.compile(appli + ' --clean_install --with_children --product ' + product_name2, batch=True)
+
+ if os.path.exists(expected_file_path) and os.path.exists(expected_file_path2):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_060(self):
+ # Test the configure command with '--make_flags' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+
+ sat.clean(appli + ' --build --install --product ' + product_name, batch=True)
+ sat.compile(appli + ' --make_flags 3 --product ' + product_name)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_070(self):
+ # Test the configure command with '--show' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+
+ sat.clean(appli + ' --build --install --product ' + product_name, batch=True)
+ sat.compile(appli + ' --show --product ' + product_name)
+
+ if not(os.path.exists(expected_file_path)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_080(self):
+ # Test the configure command with '--stop_first_fail' option
+ OK = 'KO'
+
+ appli = 'appli-test'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product PRODUCT_CVS,Python')
+ expected_install_dir = src.product.get_product_config(sat.cfg, "PRODUCT_CVS").install_dir
+
+ sat.clean(appli + ' --build --install --product PRODUCT_CVS', batch=True)
+ sat.compile(appli + ' --stop_first_fail --product PRODUCT_CVS,Python')
+
+ if not(os.path.exists(expected_install_dir)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_090(self):
+ # Test the 'sat -h compile' command to get description
+
+ OK = "KO"
+
+ import compile
+
+ if "The compile command constructs the products" in compile.description():
+ OK = "OK"
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
+
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import src.product
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test of the configure command"""
+
+ def setUp(self):
+ print("setUp")
+
+ def tearDown(self):
+ print("tearDown")
+
+ def test_010(self):
+ # Test the configure command with a product in cmake
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+ expected_file_path = os.path.join(expected_build_dir, 'CMakeCache.txt')
+
+ sat.configure(appli + ' --product ' + product_name)
+
+ if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the configure command with a product in autotools
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_CVS'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+ expected_file_path = os.path.join(expected_build_dir, 'config.log')
+
+ sat.configure(appli + ' --product ' + product_name)
+
+ if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the configure command with a product in script mode
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'Python'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+
+ sat.configure(appli + ' --product ' + product_name)
+
+ if os.path.exists(expected_build_dir):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the 'sat -h configure'
+ OK = "KO"
+
+ import configure
+
+ if "The configure command executes in the build directory" in configure.description():
+ OK = "OK"
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import src.product
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test of the make command"""
+
+ def test_010(self):
+ # Test the configure command without any option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+ expected_file_path = os.path.join(expected_build_dir, 'hello')
+
+ sat.configure(appli + ' --product ' + product_name)
+ sat.make(appli + ' --product ' + product_name)
+
+ if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the make command with an option
+ OK = 'KO'
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+ expected_file_path = os.path.join(expected_build_dir, 'hello')
+
+ sat.configure(appli + ' --product ' + product_name)
+ sat.make(appli + ' --product ' + product_name + ' --option -j3')
+
+ if os.path.exists(os.path.join(expected_build_dir, expected_file_path)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the make command with a product in script mode
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'Python'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file = "bin/python2.7"
+
+ sat.make(appli + ' --product ' + product_name)
+
+ if os.path.exists(os.path.join(expected_install_dir, expected_file)):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the sat -h make
+ OK = "KO"
+
+ import make
+
+ if "The make command executes the \"make\" command" in make.description():
+ OK = "OK"
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+import src.product
+from src.salomeTools import Sat
+
+class TestMakeinstall(unittest.TestCase):
+ """Test of the makeinstall command"""
+
+ def test_010(self):
+ # Test the configure-make-makeinstall command without any option
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+
+ sat.prepare(appli + ' --product ' + product_name)
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_file_path = os.path.join(expected_install_dir, 'bin/hello')
+
+ sat.configure(appli + ' --product ' + product_name)
+
+ sat.make(appli + ' --product ' + product_name)
+
+ sat.makeinstall(appli + ' --product ' + product_name)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the sat -h make
+ OK = "KO"
+
+ import makeinstall
+
+ if "The makeinstall command executes the 'make install' command" in makeinstall.description():
+ OK = "OK"
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import shutil
+import unittest
+
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test create file .pyconf"""
+
+ def test_010(self):
+ # Test creation of ~/.salomeTools/salomeTools.pyconf
+ print "stupidity HAVE TO NOT touch user ~/.salomeTools"
+ return
+
+ res = "KO"
+ user_dir = os.path.expanduser(os.path.join('~','.salomeTools'))
+ user_dir_save = os.path.expanduser(os.path.join('~','.salomeTools_save'))
+ if os.path.exists(user_dir_save):
+ shutil.rmtree(user_dir_save)
+ if os.path.exists(user_dir):
+ shutil.move(user_dir, user_dir_save)
+
+ # The command to test
+ sat = Sat('')
+ sat.config('-v .')
+
+ expected_file = os.path.expanduser(os.path.join('~','.salomeTools', 'salomeTools.pyconf'))
+
+ if os.path.exists(expected_file):
+ res = "OK"
+
+ shutil.rmtree(user_dir)
+ shutil.move(user_dir_save, user_dir)
+ self.assertEqual(res, "OK")
+
+ def test_020(self):
+ # Test override VARS
+ OK = "KO"
+
+ # The command to test
+ sat = Sat("-oVARS.user='user_test'")
+ sat.config()
+
+ if sat.cfg.VARS.user == 'user_test':
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_030(self):
+ # Test override INTERNAL
+ OK = "KO"
+
+ # The command to test
+ sat = Sat("-oINTERNAL.sat_version='V0'")
+ sat.config()
+
+ if sat.cfg.INTERNAL.sat_version == 'V0':
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ """
+ def test_040(self):
+ # Test override SITE
+ OK = "KO"
+
+ # The command to test
+ sat = Sat("-oSITE.jobs.config_path='/tmp'")
+ sat.config()
+
+ if sat.cfg.SITE.jobs.config_path == '/tmp':
+ OK = "OK"
+
+ self.assertEqual(OK, "OK")
+ """
+
+ def test_050(self):
+ # Test override APPLICATION
+ OK = "KO"
+
+ # The command to test
+ sat = Sat("-oAPPLICATION.out_dir='/tmp'")
+ sat.config('appli-test')
+
+ if sat.cfg.APPLICATION.out_dir == '/tmp':
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_060(self):
+ # Test override PRODUCTS
+ OK = "KO"
+
+ # The command to test
+ sat = Sat("-oPRODUCTS.PRODUCT_GIT.default.name='test'")
+ sat.config('')
+
+ if sat.cfg.PRODUCTS.PRODUCT_GIT.default.name == 'test':
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """sat config --copy"""
+
+ def test_010(self):
+ # Test the copy of a pyconf
+ res = "KO"
+ appli_to_copy = "appli-test"
+
+ expected_file = os.path.expanduser(os.path.join('~','.salomeTools', 'Applications', 'LOCAL_' + appli_to_copy + '.pyconf'))
+ if os.path.exists(expected_file):
+ os.remove(expected_file)
+
+ # The command to test
+ sat = Sat('')
+ sat.config('appli-test -c')
+
+ if os.path.exists(expected_file):
+ res = "OK"
+ os.remove(expected_file)
+ self.assertEqual(res, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import threading
+import time
+import unittest
+
+from src.salomeTools import Sat
+from unittestpy.tools import check_proc_existence_and_kill_multi
+
+sleep_time = 2
+
+class TestCase(unittest.TestCase):
+ """sat config --edit"""
+
+ def test_010(self):
+ # Test the launch of the editor when invoking the config -e
+ OK = "KO"
+
+ sat = Sat("-oUSER.editor='cooledit'")
+ sat.config()
+ cmd_config = threading.Thread(target=sat.config, args=('-e',))
+ cmd_config.start()
+
+ time.sleep(sleep_time)
+
+ editor = sat.cfg.USER.editor
+ pid = check_proc_existence_and_kill_multi(editor + ".*" + "salomeTools\.pyconf", 10)
+
+ if pid:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_020(self):
+ # Test the launch of the editor when invoking the config -e appli-test
+ OK = "KO"
+
+ sat = Sat("-oUSER.editor='cooledit'")
+ sat.config()
+ cmd_config = threading.Thread(target=sat.config, args=('appli-test -e',))
+ cmd_config.start()
+
+ time.sleep(sleep_time)
+
+ editor = sat.cfg.USER.editor
+ pid = check_proc_existence_and_kill_multi(editor + ".*" + "appli-test\.pyconf", 10)
+
+ if pid:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import platform
+import unittest
+
+from src.salomeTools import Sat
+from unittestpy.tools import outRedirection
+
+class TestCase(unittest.TestCase):
+ """sat config --value"""
+
+ def test_010(self):
+ # Test the display of the right value of "sat config -v VARS.hostname"
+ OK = "KO"
+
+ # output redirection
+ my_out = outRedirection()
+
+ # The command to test
+ sat = Sat()
+ sat.config('-v VARS.hostname')
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ if platform.node() in res:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_020(self):
+ # Test the display of the right value of "sat config -l"
+ OK = "KO"
+
+ # output redirection
+ my_out = outRedirection()
+
+ # The command to test
+ sat = Sat()
+ sat.config('-l')
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ # get results
+ if "ERROR" not in res:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ """
+ def test_030(self):
+ # Test the exception when salomeTools.pyconf has errors
+ OK = "KO"
+
+ # The command to test
+ sat = Sat()
+ sat.config()
+
+ salomeToolspyconfPath = os.path.join(sat.cfg.VARS.srcDir, "internal_config", "salomeTools.pyconf")
+ salomeToolspyconfPath_save = os.path.join(sat.cfg.VARS.srcDir, "internal_config", "salomeTools.pyconf_save")
+ if os.path.exists(salomeToolspyconfPath_save):
+ os.remove(salomeToolspyconfPath_save)
+ shutil.copyfile(salomeToolspyconfPath, salomeToolspyconfPath_save)
+ f_read = open(salomeToolspyconfPath, 'r')
+ text = f_read.read()
+ f_read.close()
+ os.remove(salomeToolspyconfPath)
+ f_write = open(salomeToolspyconfPath, 'w')
+ f_write.write(text.replace(':', ''))
+ f_write.close()
+
+ try:
+ sat.config()
+ except TypeError:
+ OK = "OK"
+ finally:
+ shutil.copyfile(salomeToolspyconfPath_save, salomeToolspyconfPath)
+ os.remove(salomeToolspyconfPath_save)
+ self.assertEqual(OK, "OK")
+ """
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import platform
+import unittest
+
+from src.salomeTools import Sat
+from unittestpy.tools import outRedirection
+
+class TestCase(unittest.TestCase):
+ """sat config -v VARS.python"""
+
+ def test_010(self):
+ # Test the display of the right value of 'sat config -v VARS.python'
+ OK = 'KO'
+
+ # output redirection
+ my_out = outRedirection()
+
+ # The command to test
+ sat = Sat('')
+ sat.config('-v VARS.python')
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+
+ if platform.python_version() in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the display of the right value of 'sat config -s'
+ OK = 'KO'
+
+ # output redirection
+ my_out = outRedirection()
+
+ # The command to test
+ sat = Sat('')
+ sat.config('-s')
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+
+ if 'INTERNAL' in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the display of the right value of 'sat config --info'
+ application = 'appli-test'
+ product = 'PRODUCT_DEV'
+
+ OK = 'KO'
+
+ # output redirection
+ my_out = outRedirection()
+
+ # The command to test
+ sat = Sat('')
+ sat.config(application + ' --info ' + product)
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+
+ if 'compilation method = cmake' in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+
+class TestSource(unittest.TestCase):
+ """Test of the environ command"""
+
+ def test_010(self):
+ # Test the environ command without any option
+ OK = 'KO'
+
+ appli = 'appli-test'
+
+ file_env_name = 'env_launch.sh'
+
+ sat = Sat()
+ sat.config(appli)
+
+ expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
+
+ if os.path.exists(expected_file_path):
+ os.remove(expected_file_path)
+
+ sat.environ(appli)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the environ command with option '--products'
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ file_env_name = 'env_launch.sh'
+
+ sat = Sat()
+ sat.config(appli)
+
+ expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
+
+ if os.path.exists(expected_file_path):
+ os.remove(expected_file_path)
+
+ sat.environ(appli + ' --products ' + product_name)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the environ command with option --target
+ OK = 'KO'
+
+ appli = 'appli-test'
+
+ file_env_name = 'env_launch.sh'
+
+ sat = Sat()
+ sat.config(appli)
+
+ expected_file_path = os.path.join('.', file_env_name)
+ expected_file_path2 = os.path.join('.', 'env_build.sh')
+
+ if os.path.exists(expected_file_path):
+ os.remove(expected_file_path)
+
+ sat.environ(appli + ' --target .')
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+
+ if os.path.exists(expected_file_path):
+ os.remove(expected_file_path)
+ os.remove(expected_file_path2)
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the environ command with option --prefix
+ OK = 'KO'
+
+ appli = 'appli-test'
+ prefix = 'TEST'
+ file_env_name = prefix + '_launch.sh'
+
+ sat = Sat()
+ sat.config(appli)
+
+ expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
+
+ if os.path.exists(expected_file_path):
+ os.remove(expected_file_path)
+
+ sat.environ(appli + ' --prefix ' + prefix)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_050(self):
+ # Test the environ command with option --shell
+ OK = 'KO'
+
+ appli = 'appli-test'
+ shell = 'bat'
+ file_env_name = 'env_launch.bat'
+
+ sat = Sat()
+ sat.config(appli)
+
+ expected_file_path = os.path.join(sat.cfg.APPLICATION.workdir, file_env_name)
+
+ if os.path.exists(expected_file_path):
+ os.remove(expected_file_path)
+
+ sat.environ(appli + ' --shell ' + shell)
+
+ if os.path.exists(expected_file_path):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test the job command"""
+
+ def test_010(self):
+ # Test the job command
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ sat.job("--jobs_config .test --name Job 1" )
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_config = [line.replace("\n", "") for line in log_files if 'config.xml' in line]
+
+ text = open(log_config[0], "r").read()
+
+ if "nb_proc" in text:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+
+ def test_020(self):
+ # Test the job command with a failing command
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ res = sat.job("--jobs_config .test --name Job 4" )
+
+ if res == 1:
+ OK = 'OK'
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the job command with a wrong file configuration
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ res = sat.job("--jobs_config NOTEXIST --name Job 4" )
+
+ if res == 1:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the job command without --jobs_config option
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ res = sat.job("--name Job 4" )
+
+ if res == 1:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_050(self):
+ # Test the job command without --jobs_config option
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ res = sat.job("--jobs_config .test --name NOTEXIST" )
+
+ if res == 1:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_060(self):
+ # Test the sat -h job
+ OK = "KO"
+
+ import job
+
+ if "Executes the commands of the job defined in the jobs configuration file" in job.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+from unittestpy.tools import outRedirection
+
+class TestCase(unittest.TestCase):
+ "Test the jobs command"""
+
+ def test_010(self):
+ # Test the jobs command
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the jobs command
+ sat.jobs("--name .test --publish" )
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_jobs = [line.replace("\n", "") for line in log_files if 'jobs.xml' in line]
+
+ text = open(log_jobs[0], "r").read()
+
+ expected_res = [
+ "Establishing connection with all the machines",
+ "Executing the jobs",
+ "Results for job"
+ ]
+
+ res = 0
+ for exp_res in expected_res:
+ if exp_res not in text:
+ res += 1
+
+ if res == 0:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the jobs command with option --only_jobs
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the jobs command
+ sat.jobs("--name .test --publish --only_jobs Job 1" )
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_jobs = [line.replace("\n", "") for line in log_files if 'jobs.xml' in line]
+
+ text = open(log_jobs[0], "r").read()
+
+ expected_res = [
+ "Establishing connection with all the machines",
+ "Executing the jobs",
+ "Results for job"
+ ]
+
+ res = 0
+ for exp_res in expected_res:
+ if exp_res not in text:
+ res += 1
+
+ if res == 0:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the jobs command without --name option
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ res = sat.jobs()
+
+ if res == 1:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the jobs command with a wrong file configuration
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ res = sat.jobs("--name NOTEXIST" )
+
+ if res == 1:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_050(self):
+ # Test the display of the right value of 'sat jobs --list'
+ OK = "KO"
+
+ # output redirection
+ my_out = outRedirection()
+
+ # The command to test
+ sat = Sat()
+ sat.jobs('--list')
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ # get results
+ if "ERROR" not in res:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_060(self):
+ # Test the sat -h jobs
+ OK = "KO"
+
+ import jobs
+
+ if "The jobs command launches maintenances that are described in the dedicated jobs configuration file." in jobs.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import threading
+import time
+import shutil
+import io
+import unittest
+
+from src.salomeTools import Sat
+from unittestpy.tools import check_proc_existence_and_kill_multi
+
+sleep_time = 2
+
+class TestCase(unittest.TestCase):
+ """Test of log command: launch of browser"""
+
+ def test_010(self):
+ # Test the write of xml log when invoking a command
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+ sat.config('appli-test -v USER.browser')
+
+ # get log file path
+ logDir = sat.cfg.USER.log_dir
+ logPath = os.path.join(logDir, sat.cfg.VARS.datehour + "_" + sat.cfg.VARS.command + ".xml")
+
+ if os.path.exists(logPath):
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_020(self):
+ # Test the terminal option without application
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ one = u"1"
+ sys.stdin = io.StringIO(one)
+
+
+ try:
+ sat.log('-t')
+ OK = "OK"
+ sys.stdin = sys.__stdin__
+ except:
+ sys.stdin = sys.__stdin__
+ self.assertEqual(OK, "OK")
+
+ def test_030(self):
+ # Test the terminal option with application
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('appli-test -v VARS.python')
+
+ one = u"1"
+ sys.stdin = io.StringIO(one)
+
+ try:
+ sat.log('appli-test -t --last')
+ OK = "OK"
+ sys.stdin = sys.__stdin__
+ except:
+ pass
+ self.assertEqual(OK, "OK")
+
+ def test_040(self):
+ # Test the terminal option with 0 as input
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('appli-test -v VARS.python')
+
+ zero = u"0\n1"
+ sys.stdin = io.StringIO(zero)
+
+ try:
+ sat.log('--terminal')
+ OK = "OK"
+ finally:
+ sys.stdin = sys.__stdin__
+ self.assertEqual(OK, "OK")
+
+ def test_050(self):
+ # Test the terminal option with input bigger than the number of logs
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('appli-test -v VARS.python')
+
+ nb_logs = len(os.listdir(sat.cfg.USER.log_dir))
+
+ nb_logs_u = unicode(str(nb_logs) + "\n1")
+ sys.stdin = io.StringIO(nb_logs_u)
+
+ try:
+ sat.log('--terminal')
+ OK = "OK"
+ finally:
+ sys.stdin = sys.__stdin__
+ self.assertEqual(OK, "OK")
+
+ def test_060(self):
+ # Test the terminal option with input return
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('appli-test -v VARS.python')
+
+ ret = unicode("\n0")
+ sys.stdin = io.StringIO(ret)
+
+ try:
+ sat.log('--terminal')
+ OK = "OK"
+ finally:
+ sys.stdin = sys.__stdin__
+ self.assertEqual(OK, "OK")
+
+ def test_070(self):
+ # Test the terminal option with input not int
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('appli-test -v VARS.python')
+
+ ret = unicode("blabla\n0")
+ sys.stdin = io.StringIO(ret)
+
+ try:
+ sat.log('--terminal')
+ OK = "OK"
+ finally:
+ sys.stdin = sys.__stdin__
+ self.assertEqual(OK, "OK")
+
+ def test_080(self):
+ # Test the terminal option and option last
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ try:
+ sat.log('--terminal --last')
+ OK = "OK"
+ finally:
+ sys.stdin = sys.__stdin__
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, "OK")
+
+ def test_090(self):
+ # Test the option --last
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat("-oUSER.browser='konqueror'")
+
+ sat.config('appli-test -v VARS.python')
+
+
+ time.sleep(sleep_time)
+ cmd_log = threading.Thread(target=sat.log, args=('appli-test --last',))
+ cmd_log.start()
+
+ time.sleep(sleep_time)
+
+ browser = sat.cfg.USER.browser
+ pid = check_proc_existence_and_kill_multi(browser + ".*" + "xml", 10)
+
+ if pid:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_100(self):
+ # Test the option --clean
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('-v VARS.user')
+
+ nb_logs_t0 = len(os.listdir(sat.cfg.USER.log_dir))
+
+ sat.log('--clean 1')
+
+ nb_logs_t1 = len(os.listdir(sat.cfg.USER.log_dir))
+
+ if nb_logs_t1-nb_logs_t0 == 0:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_120(self):
+ # Test the option --clean with big number of files to clean
+ OK = "KO"
+
+ # launch the command that will write a log
+ sat = Sat()
+
+ sat.config('-v VARS.user')
+
+ nb_logs_t0 = len(os.listdir(sat.cfg.USER.log_dir))
+
+ if os.path.exists(sat.cfg.USER.log_dir + "_save"):
+ shutil.rmtree(sat.cfg.USER.log_dir + "_save")
+ print("TODO: risky !!!copytree!!!", sat.cfg.USER.log_dir, sat.cfg.USER.log_dir + "_save")
+ """
+ shutil.copytree(sat.cfg.USER.log_dir,sat.cfg.USER.log_dir + "_save")
+
+ sat.log('--clean ' + str(nb_logs_t0))
+
+ nb_logs_t1 = len(os.listdir(sat.cfg.USER.log_dir))
+
+ shutil.rmtree(sat.cfg.USER.log_dir)
+ shutil.move(sat.cfg.USER.log_dir + "_save", sat.cfg.USER.log_dir)
+
+ if nb_logs_t0-nb_logs_t1 > 10:
+ OK = "OK"
+ """
+ self.assertEqual(OK, "OK")
+
+ """
+ def test_130(self):
+ # Test the option --full
+ OK = "KO"
+
+ sat = Sat("-oUSER.browser='konqueror'")
+ time.sleep(sleep_time)
+ cmd_log = threading.Thread(target=sat.log, args=('--full',))
+ cmd_log.start()
+
+ time.sleep(sleep_time)
+
+ browser = sat.cfg.USER.browser
+ check_proc_existence_and_kill_multi(browser + ".*" + "hat\.xml", 10)
+
+ # Read and check the hat.xml file contains at least one log file corresponding to log
+ hatFilePath = os.path.join(sat.cfg.USER.log_dir, "hat.xml")
+ xmlHatFile = src.xmlManager.ReadXmlFile(hatFilePath)
+ for field in xmlHatFile.xmlroot:
+ if field.attrib[b'cmd'] == b'log':
+ OK = "OK"
+ break
+ self.assertEqual(OK, "OK")
+ """
+
+ def test_140(self):
+ # Test the sat -h log
+ OK = "KO"
+
+ import log
+
+ if "Gives access to the logs produced" in log.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import threading
+import time
+import unittest
+
+from src.salomeTools import Sat
+from unittestpy.tools import check_proc_existence_and_kill_multi
+
+sleep_time = 2
+
+class TestCase(unittest.TestCase):
+ """Test of log command: launch of browser"""
+
+ def test_010(self):
+ # Test the launch of browser when invoking the log command
+ OK = "KO"
+
+ sat = Sat("-oUSER.browser='konqueror'")
+ time.sleep(sleep_time)
+ cmd_log = threading.Thread(target=sat.log, args=('',))
+ cmd_log.start()
+
+ time.sleep(sleep_time)
+
+ sat.config("")
+ browser = sat.cfg.USER.browser
+ pid = check_proc_existence_and_kill_multi(browser + ".*" + "hat\.xml", 10)
+
+ if pid:
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+import src.product
+from unittestpy.tools import outRedirection
+
+class TestCase(unittest.TestCase):
+ """Test of the clean command"""
+
+ def test_010(self):
+ # Test the clean command with no arguments (nothing to clean)
+ OK = 'KO'
+
+ appli = 'appli-test'
+
+ sat = Sat()
+
+ # output redirection
+ my_out = outRedirection()
+
+ sat.clean(appli)
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ if "Nothing to suppress" in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the clean of sources
+ OK = "KO"
+
+ appli = 'appli-test'
+ product_name = "PRODUCT_GIT"
+
+ sat = Sat()
+
+ # Make sure the sources exist
+ sat.prepare(appli + " -p " + product_name)
+
+ # Call the command
+ sat.clean(appli + " -p " + product_name + " --sources", batch=True)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+
+ if not os.path.exists(expected_src_dir):
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_030(self):
+ # Test the clean of build
+ OK = "KO"
+
+ appli = 'appli-test'
+ product_name = "PRODUCT_GIT"
+
+ sat = Sat()
+
+ # Make sure the build exists
+ sat.prepare(appli + " -p " + product_name)
+ sat.configure(appli + " -p " + product_name)
+
+ # Call the command
+ sat.clean(appli + " -p " + product_name + " --build", batch=True)
+
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+
+ if not os.path.exists(expected_build_dir):
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_040(self):
+ # Test the clean of install
+ OK = "KO"
+
+ appli = 'appli-test'
+ product_name = "PRODUCT_GIT"
+
+ sat = Sat()
+
+ # Make sure the build exists
+ sat.prepare(appli + " -p " + product_name)
+ sat.configure(appli + " -p " + product_name)
+
+ # Call the command
+ sat.clean(appli + " -p " + product_name + " --install", batch=True)
+
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+
+ if not os.path.exists(expected_install_dir):
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_050(self):
+ # Test the clean of all (build, src, install)
+ OK = "KO"
+
+ appli = 'appli-test'
+ product_name = "PRODUCT_GIT"
+
+ sat = Sat()
+
+ # Make sure the build exists
+ sat.prepare(appli + " -p " + product_name)
+ sat.compile(appli + " -p " + product_name)
+
+ # Call the command
+ sat.clean(appli + " -p " + product_name + " --all", batch=True)
+
+ expected_install_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+ expected_build_dir = src.product.get_product_config(sat.cfg, product_name).build_dir
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+
+ if not os.path.exists(expected_install_dir) and not os.path.exists(expected_build_dir) and not os.path.exists(expected_src_dir):
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+ def test_060(self):
+ # Test the clean with sources_without_dev option
+ OK = "KO"
+
+ appli = 'appli-test'
+ product_name = "PRODUCT_GIT"
+ product_name2 = "PRODUCT_DEV"
+
+ sat = Sat()
+
+ # Make sure the build exists
+ sat.prepare(appli + " -p " + product_name + "," + product_name2)
+
+ # Call the command
+ sat.clean(appli + " -p " + product_name + " --sources_without_dev", batch=True)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_src_dir2 = src.product.get_product_config(sat.cfg, product_name2).source_dir
+
+ if not os.path.exists(expected_src_dir) and os.path.exists(expected_src_dir2):
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+
+ def test_070(self):
+ # Test the sat -h clean
+ OK = "KO"
+
+ import clean
+
+ if "The clean command suppress the source, build, or install" in clean.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import shutil
+import unittest
+
+from src.salomeTools import Sat
+import src.product
+from unittestpy.tools import outRedirection
+
+class TestCase(unittest.TestCase):
+ """Test of the patch command"""
+
+ def test_010(self):
+ # Test the patch command with a product in dev mode
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_DEV'
+
+ sat = Sat("-oUSER.output_level=2")
+
+ sat.config(appli)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
+ expected_text = 'HELLO WORLD\n'
+
+ if os.path.exists(expected_src_dir):
+ shutil.rmtree(expected_src_dir)
+
+ sat.source(appli + ' --product ' + product_name)
+
+ f = open(expected_file_path, 'r')
+ text = f.readlines()[0]
+ OK1 = 'KO'
+ if text == expected_text:
+ OK1 = 'OK'
+
+ sat.patch(appli + ' --product ' + product_name)
+
+ new_expected_text = 'HELLO WORLD MODIFIED\n'
+ f = open(expected_file_path, 'r')
+ text = f.readlines()[0]
+
+ OK2 = 'KO'
+ if text == new_expected_text:
+ OK2 = 'OK'
+
+ if (OK1, OK2)==('OK', 'OK'):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the patch command with a product with no sources found
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_DEV'
+
+ sat = Sat('')
+ sat.config(appli)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+
+ if os.path.exists(expected_src_dir):
+ shutil.rmtree(expected_src_dir)
+
+ # output redirection
+ my_out = outRedirection()
+
+ sat.patch(appli + ' --product ' + product_name)
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ if "No sources found for the " + product_name +" product" in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the patch command with a product without patch
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_ARCHIVE'
+
+ sat = Sat('-v4')
+
+ sat.source(appli + ' --product ' + product_name)
+
+ # output redirection
+ my_out = outRedirection()
+
+ sat.patch(appli + ' --product ' + product_name)
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ if "No patch for the " + product_name +" product" in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the patch command with a product with a not valid patch
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_DEV'
+
+ sat = Sat("-oPRODUCTS.PRODUCT_DEV.default.patches=['/']")
+
+ sat.source(appli + ' --product ' + product_name)
+
+ # output redirection
+ my_out = outRedirection()
+
+ sat.patch(appli + ' --product ' + product_name)
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ if "Not a valid patch" in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_050(self):
+ # Test the sat -h patch
+ OK = "KO"
+
+ import patch
+
+ if "The patch command apply the patches on the sources of" in patch.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import shutil
+import unittest
+
+import src
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test of the prepare command"""
+
+ def test_010(self):
+ # Test the prepare command with a product in dev mode
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_DEV'
+
+ sat = Sat()
+
+ sat.config(appli)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
+ expected_text = 'HELLO WORLD\n'
+
+ if os.path.exists(expected_src_dir):
+ shutil.rmtree(expected_src_dir)
+
+ sat.prepare(appli + ' --product ' + product_name)
+
+ f = open(expected_file_path, 'r')
+ text = f.readlines()[0]
+ if text == expected_text:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the prepare command with all products
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_DEV'
+
+ sat = Sat()
+ sat.config(appli)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
+ expected_text = 'HELLO WORLD\n'
+
+ if os.path.exists(expected_src_dir):
+ shutil.rmtree(expected_src_dir)
+
+ sat.prepare(appli)
+
+ f = open(expected_file_path, 'r')
+ text = f.readlines()[0]
+ if text == expected_text:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the prepare command with all products
+ OK = 'KO'
+
+ appli = 'appli-test'
+
+ sat = Sat()
+ sat.config(appli)
+
+ try:
+ sat.prepare(appli + " --force --force_patch")
+ OK = 'OK'
+ except:
+ pass
+ self.assertEqual(OK, 'OK')
+
+ def test_040(self):
+ # Test the sat -h prepare
+ OK = "KO"
+
+ import prepare
+
+ if "The prepare command gets the sources" in prepare.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+import src.product
+from unittestpy.tools import outRedirection
+
+class TestCase(unittest.TestCase):
+ """Test of the source command"""
+
+ def test_010(self):
+ # Test the source command with archive product
+ appli = 'appli-test'
+ product_name = 'PRODUCT_ARCHIVE'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
+ expected_text = 'HELLO WORLD\n'
+
+ f = open(expected_file_path, 'r')
+ text = f.read()
+ self.assertEqual(text, expected_text)
+
+ def test_020(self):
+ # Test the source command with git product
+ appli = 'appli-test'
+ product_name = 'PRODUCT_GIT'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'my_test_file.txt')
+ expected_text = 'HELLO WORLD\n'
+
+ f = open(expected_file_path, 'r')
+ text = f.read()
+ self.assertEqual(text, expected_text)
+
+ def test_030(self):
+ # Test the source command with cvs product
+ appli = 'appli-test'
+ product_name = 'PRODUCT_CVS'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'README.FIRST.txt')
+ expected_text = 'Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE\n'
+
+ f = open(expected_file_path, 'r')
+ text = f.readlines()[0]
+
+ # pyunit method to compare 2 str
+ self.assertEqual(text, expected_text)
+
+ """
+ def test_040(self):
+ # Test the source command with svn product
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_SVN'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).source_dir
+ expected_file_path = os.path.join(expected_src_dir, 'scripts', 'README')
+ expected_text = 'this directory contains scripts used by salomeTool'
+
+ f = open(expected_file_path, 'r')
+ text = f.readlines()[0]
+
+ if expected_text in text:
+ OK = 'OK'
+
+ # pyunit method to compare 2 str
+ self.assertEqual(OK, 'OK')
+ """
+
+ def test_050(self):
+ # Test the source command with native product
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_NATIVE'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ expected_src_dir = os.path.join(sat.cfg.APPLICATION.workdir, 'SOURCES', product_name)
+ if not os.path.exists(expected_src_dir):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_060(self):
+ # Test the source command with fixed product
+ OK = 'KO'
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_FIXED'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ expected_src_dir = src.product.get_product_config(sat.cfg, product_name).install_dir
+
+ if os.path.exists(expected_src_dir):
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ """
+ def test_070(self):
+ # Test the source command with unknown product
+ OK = 'KO'
+
+ # output redirection
+ my_out = outRedirection()
+
+ appli = 'appli-test'
+ product_name = 'PRODUCT_UNKNOWN'
+
+ sat = Sat()
+ sat.source(appli + ' --product ' + product_name)
+
+ # stop output redirection
+ my_out.end_redirection()
+
+ # get results
+ res = my_out.read_results()
+
+ if "Unknown get source method" in res:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+ """
+
+ def test_080(self):
+ # Test the sat -h source
+ OK = "KO"
+
+ import source
+
+ if "gets the sources of the application" in source.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env bash
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+echo "TODO: SAT5.1 OBSOLETE: to set as python script, may be"
+echo "Begin date:"
+date
+echo
+echo "Remove old results ... "
+rm -rf .coverage htmlcov
+echo "Done"
+echo
+echo "****************************"
+coverage run --source=../commands/config.py config/option_value.py > test_res.html
+coverage run --source=../commands/config.py -a config/option_value_2.py >> test_res.html
+coverage run --source=../commands/config.py -a config/create_user_pyconf.py >> test_res.html
+coverage run --source=../commands/config.py -a config/option_copy.py >> test_res.html
+coverage run --source=../commands/config.py -a config/option_edit.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/log.py,../src/xmlManager.py,../src/logger.py -a log/launch_browser.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/log.py,../src/xmlManager.py,../src/logger.py -a log/launch_browser2.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py -a prepare/test_source.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py -a prepare/test_patch.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py -a prepare/test_prepare.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/source.py,../commands/patch.py,../commands/prepare.py,../commands/clean.py -a prepare/test_clean.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/environ.py -a environ/test_environ.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/configure.py,../commands/environ.py -a compilation/test_configure.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/make.py,../commands/environ.py -a compilation/test_make.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/makeinstall.py,../commands/environ.py -a compilation/test_makeinstall.py >> test_res.html
+coverage run --source=../commands/config.py,../commands/compile.py,../commands/configure.py,../commands/make.py,../commands/makeinstall.py,../commands/environ.py -a compilation/test_compilation.py >> test_res.html
+coverage run --source=../commands/shell.py -a shell/test_shell.py >> test_res.html
+coverage run --source=../commands/job.py -a job/test_job.py >> test_res.html
+coverage run --source=../commands/jobs.py -a jobs/test_jobs.py >> test_res.html
+coverage run --source=../commands/test.py,../src/test_module.py,../src/fork.py -a test/test_command.py >> test_res.html
+echo "****************************"
+echo
+echo "building html coverage"
+coverage html
+echo "Done"
+echo
+echo "End date:"
+date
+echo
+
+#firefox test_res.html htmlcov/index.html
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+
+class TestCase(unittest.TestCase):
+ """Test of the shell command"""
+
+ def test_010(self):
+ # Test the shell command with the --command option
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ sat.config()
+ sat_way = sat.cfg.VARS.salometoolsway
+
+ # Execute the shell command
+ sat.shell("--command ls " + sat_way)
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_files = [line.replace("\n", "") for line in log_files]
+
+ text = open(log_files[2], "r").read()
+
+ if "salomeTools.py" in text:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the shell command with the --command option with a failing command
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+
+ sat = Sat("-l " + tmp_file)
+
+ sat.config()
+
+ # Execute the shell command
+ res = sat.shell("--command i_fail")
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_files = [line.replace("\n", "") for line in log_files]
+
+ text = open(log_files[2], "r").read()
+
+ if "i_fail" in text and res == 1:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the sat -h shell
+ OK = "KO"
+
+ import shell
+
+ if "Executes the shell command passed as argument" in shell.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+# Copyright (C) 2010-2018 CEA/DEN
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import os
+import sys
+import unittest
+
+from src.salomeTools import Sat
+
+class TestTest(unittest.TestCase):
+ """Test of the test command"""
+
+ def test_010(self):
+ # Test the test command
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+ application = "SALOME-7.8.0"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ sat.test(application + " --grid GEOM --session light" )
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_testboard = [line.replace("\n", "") for line in log_files if 'testboard.xml' in line]
+
+ text = open(log_testboard[0], "r").read()
+
+ if '<session name="light">' in text:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_020(self):
+ # Test the test command with PY type
+ OK = 'KO'
+ tmp_file = "/tmp/test.txt"
+ application = "SALOME-7.8.0"
+
+ sat = Sat("-l " + tmp_file)
+
+ # Execute the job command
+ sat.test(application + " --grid MED --session PY_test_withKernel" )
+
+ ff = open(tmp_file, "r")
+ log_files = ff.readlines()
+ ff.close()
+ os.remove(tmp_file)
+ log_testboard = [line.replace("\n", "") for line in log_files if 'testboard.xml' in line]
+
+ text = open(log_testboard[0], "r").read()
+
+ if '<session name="PY_test_withKernel">' in text:
+ OK = 'OK'
+ self.assertEqual(OK, 'OK')
+
+ def test_030(self):
+ # Test the sat -h test
+ OK = "KO"
+
+ import test
+
+ if "The test command runs a test base on a SALOME installation" in test.description():
+ OK = "OK"
+ self.assertEqual(OK, "OK")
+
+# test launch
+if __name__ == '__main__':
+ unittest.main()
+ pass
--- /dev/null
+"""
+A TestRunner for use with the Python unit testing framework. It
+generates a HTML report to show the result at a glance.
+
+The simplest way to use this is to invoke its main method. E.g.
+
+ import unittest
+ import HTMLTestRunner
+
+ ... define your tests ...
+
+ if __name__ == '__main__':
+ HTMLTestRunner.main()
+
+
+For more customization options, instantiates a HTMLTestRunner object.
+HTMLTestRunner is a counterpart to unittest's TextTestRunner. E.g.
+
+ # output to a file
+ fp = file('my_report.html', 'wb')
+ runner = HTMLTestRunner.HTMLTestRunner(
+ stream=fp,
+ title='My unit test',
+ description='This demonstrates the report output by HTMLTestRunner.'
+ )
+
+ # Use an external stylesheet.
+ # See the Template_mixin class for more customizable options
+ runner.STYLESHEET_TMPL = '<link rel="stylesheet" href="my_stylesheet.css" type="text/css">'
+
+ # run the test
+ runner.run(my_test_suite)
+
+
+------------------------------------------------------------------------
+Copyright (c) 2004-2007, Wai Yip Tung
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name Wai Yip Tung nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+
+# URL: http://tungwaiyip.info/software/HTMLTestRunner.html
+
+__author__ = "Wai Yip Tung"
+__version__ = "0.8.2"
+
+
+"""
+Change History
+
+Version 0.8.2
+* Show output inline instead of popup window (Viorel Lupu).
+
+Version in 0.8.1
+* Validated XHTML (Wolfgang Borgert).
+* Added description of test classes and test cases.
+
+Version in 0.8.0
+* Define Template_mixin class for customization.
+* Workaround a IE 6 bug that it does not treat <script> block as CDATA.
+
+Version in 0.7.1
+* Back port to Python 2.3 (Frank Horowitz).
+* Fix missing scroll bars in detail log (Podi).
+"""
+
+# TODO: color stderr
+# TODO: simplify javascript using ,ore than 1 class in the class attribute?
+
+import datetime
+import StringIO
+import sys
+import time
+import unittest
+from xml.sax import saxutils
+
+
+# ------------------------------------------------------------------------
+# The redirectors below are used to capture output during testing. Output
+# sent to sys.stdout and sys.stderr are automatically captured. However
+# in some cases sys.stdout is already cached before HTMLTestRunner is
+# invoked (e.g. calling logging.basicConfig). In order to capture those
+# output, use the redirectors for the cached stream.
+#
+# e.g.
+# >>> logging.basicConfig(stream=HTMLTestRunner.stdout_redirector)
+# >>>
+
+class OutputRedirector(object):
+ """ Wrapper to redirect stdout or stderr """
+ def __init__(self, fp):
+ self.fp = fp
+
+ def write(self, s):
+ self.fp.write(s)
+
+ def writelines(self, lines):
+ self.fp.writelines(lines)
+
+ def flush(self):
+ self.fp.flush()
+
+stdout_redirector = OutputRedirector(sys.stdout)
+stderr_redirector = OutputRedirector(sys.stderr)
+
+
+
+# ----------------------------------------------------------------------
+# Template
+
+class Template_mixin(object):
+ """
+ Define a HTML template for report customerization and generation.
+
+ Overall structure of an HTML report
+
+ HTML
+ +------------------------+
+ |<html> |
+ | <head> |
+ | |
+ | STYLESHEET |
+ | +----------------+ |
+ | | | |
+ | +----------------+ |
+ | |
+ | </head> |
+ | |
+ | <body> |
+ | |
+ | HEADING |
+ | +----------------+ |
+ | | | |
+ | +----------------+ |
+ | |
+ | REPORT |
+ | +----------------+ |
+ | | | |
+ | +----------------+ |
+ | |
+ | ENDING |
+ | +----------------+ |
+ | | | |
+ | +----------------+ |
+ | |
+ | </body> |
+ |</html> |
+ +------------------------+
+ """
+
+ STATUS = {
+ 0: 'pass',
+ 1: 'fail',
+ 2: 'error',
+ }
+
+ DEFAULT_TITLE = 'Unit Test Report'
+ DEFAULT_DESCRIPTION = ''
+
+ # ------------------------------------------------------------------------
+ # HTML Template
+
+ HTML_TMPL = r"""<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>%(title)s</title>
+ <meta name="generator" content="%(generator)s"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ %(stylesheet)s
+</head>
+<body>
+<script language="javascript" type="text/javascript"><!--
+output_list = Array();
+
+/* level - 0:Summary; 1:Failed; 2:All */
+function showCase(level) {
+ trs = document.getElementsByTagName("tr");
+ for (var i = 0; i < trs.length; i++) {
+ tr = trs[i];
+ id = tr.id;
+ if (id.substr(0,2) == 'ft') {
+ if (level < 1) {
+ tr.className = 'hiddenRow';
+ }
+ else {
+ tr.className = '';
+ }
+ }
+ if (id.substr(0,2) == 'pt') {
+ if (level > 1) {
+ tr.className = '';
+ }
+ else {
+ tr.className = 'hiddenRow';
+ }
+ }
+ }
+}
+
+
+function showClassDetail(cid, count) {
+ var id_list = Array(count);
+ var toHide = 1;
+ for (var i = 0; i < count; i++) {
+ tid0 = 't' + cid.substr(1) + '.' + (i+1);
+ tid = 'f' + tid0;
+ tr = document.getElementById(tid);
+ if (!tr) {
+ tid = 'p' + tid0;
+ tr = document.getElementById(tid);
+ }
+ id_list[i] = tid;
+ if (tr.className) {
+ toHide = 0;
+ }
+ }
+ for (var i = 0; i < count; i++) {
+ tid = id_list[i];
+ if (toHide) {
+ document.getElementById('div_'+tid).style.display = 'none'
+ document.getElementById(tid).className = 'hiddenRow';
+ }
+ else {
+ document.getElementById(tid).className = '';
+ }
+ }
+}
+
+
+function showTestDetail(div_id){
+ var details_div = document.getElementById(div_id)
+ var displayState = details_div.style.display
+ // alert(displayState)
+ if (displayState != 'block' ) {
+ displayState = 'block'
+ details_div.style.display = 'block'
+ }
+ else {
+ details_div.style.display = 'none'
+ }
+}
+
+
+function html_escape(s) {
+ s = s.replace(/&/g,'&');
+ s = s.replace(/</g,'<');
+ s = s.replace(/>/g,'>');
+ return s;
+}
+
+/* obsoleted by detail in <div>
+function showOutput(id, name) {
+ var w = window.open("", //url
+ name,
+ "resizable,scrollbars,status,width=800,height=450");
+ d = w.document;
+ d.write("<pre>");
+ d.write(html_escape(output_list[id]));
+ d.write("\n");
+ d.write("<a href='javascript:window.close()'>close</a>\n");
+ d.write("</pre>\n");
+ d.close();
+}
+*/
+--></script>
+
+%(heading)s
+%(report)s
+%(ending)s
+
+</body>
+</html>
+"""
+ # variables: (title, generator, stylesheet, heading, report, ending)
+
+
+ # ------------------------------------------------------------------------
+ # Stylesheet
+ #
+ # alternatively use a <link> for external style sheet, e.g.
+ # <link rel="stylesheet" href="$url" type="text/css">
+
+ STYLESHEET_TMPL = """
+<style type="text/css" media="screen">
+body { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }
+table { font-size: 100%; }
+pre { }
+
+/* -- heading ---------------------------------------------------------------------- */
+h1 {
+ font-size: 16pt;
+ color: gray;
+}
+.heading {
+ margin-top: 0ex;
+ margin-bottom: 1ex;
+}
+
+.heading .attribute {
+ margin-top: 1ex;
+ margin-bottom: 0;
+}
+
+.heading .description {
+ margin-top: 4ex;
+ margin-bottom: 6ex;
+}
+
+/* -- css div popup ------------------------------------------------------------------------ */
+a.popup_link {
+}
+
+a.popup_link:hover {
+ color: red;
+}
+
+.popup_window {
+ display: none;
+ position: relative;
+ left: 0px;
+ top: 0px;
+ /*border: solid #627173 1px; */
+ padding: 10px;
+ background-color: #E6E6D6;
+ font-family: "Lucida Console", "Courier New", Courier, monospace;
+ text-align: left;
+ font-size: 8pt;
+ width: 500px;
+}
+
+}
+/* -- report ------------------------------------------------------------------------ */
+#show_detail_line {
+ margin-top: 3ex;
+ margin-bottom: 1ex;
+}
+#result_table {
+ width: 80%;
+ border-collapse: collapse;
+ border: 1px solid #777;
+}
+#header_row {
+ font-weight: bold;
+ color: white;
+ background-color: #777;
+}
+#result_table td {
+ border: 1px solid #777;
+ padding: 2px;
+}
+#total_row { font-weight: bold; }
+.passClass { background-color: #6c6; }
+.failClass { background-color: #c60; }
+.errorClass { background-color: #c00; }
+.passCase { color: #6c6; }
+.failCase { color: #c60; font-weight: bold; }
+.errorCase { color: #c00; font-weight: bold; }
+.hiddenRow { display: none; }
+.testcase { margin-left: 2em; }
+
+
+/* -- ending ---------------------------------------------------------------------- */
+#ending {
+}
+
+</style>
+"""
+
+
+
+ # ------------------------------------------------------------------------
+ # Heading
+ #
+
+ HEADING_TMPL = """<div class='heading'>
+<h1>%(title)s</h1>
+%(parameters)s
+<p class='description'>%(description)s</p>
+</div>
+
+""" # variables: (title, parameters, description)
+
+ HEADING_ATTRIBUTE_TMPL = """<p class='attribute'><strong>%(name)s:</strong> %(value)s</p>
+""" # variables: (name, value)
+
+
+
+ # ------------------------------------------------------------------------
+ # Report
+ #
+
+ REPORT_TMPL = """
+<p id='show_detail_line'>Show
+<a href='javascript:showCase(0)'>Summary</a>
+<a href='javascript:showCase(1)'>Failed</a>
+<a href='javascript:showCase(2)'>All</a>
+</p>
+<table id='result_table'>
+<colgroup>
+<col align='left' />
+<col align='right' />
+<col align='right' />
+<col align='right' />
+<col align='right' />
+<col align='right' />
+</colgroup>
+<tr id='header_row'>
+ <td>Test Group/Test case</td>
+ <td>Count</td>
+ <td>Pass</td>
+ <td>Fail</td>
+ <td>Error</td>
+ <td>View</td>
+</tr>
+%(test_list)s
+<tr id='total_row'>
+ <td>Total</td>
+ <td>%(count)s</td>
+ <td>%(Pass)s</td>
+ <td>%(fail)s</td>
+ <td>%(error)s</td>
+ <td> </td>
+</tr>
+</table>
+""" # variables: (test_list, count, Pass, fail, error)
+
+ REPORT_CLASS_TMPL = r"""
+<tr class='%(style)s'>
+ <td>%(desc)s</td>
+ <td>%(count)s</td>
+ <td>%(Pass)s</td>
+ <td>%(fail)s</td>
+ <td>%(error)s</td>
+ <td><a href="javascript:showClassDetail('%(cid)s',%(count)s)">Detail</a></td>
+</tr>
+""" # variables: (style, desc, count, Pass, fail, error, cid)
+
+
+ REPORT_TEST_WITH_OUTPUT_TMPL = r"""
+<tr id='%(tid)s' class='%(Class)s'>
+ <td class='%(style)s'><div class='testcase'>%(desc)s</div></td>
+ <td colspan='5' align='center'>
+
+ <!--css div popup start-->
+ <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_%(tid)s')" >
+ %(status)s</a>
+
+ <div id='div_%(tid)s' class="popup_window">
+ <div style='text-align: right; color:red;cursor:pointer'>
+ <a onfocus='this.blur();' onclick="document.getElementById('div_%(tid)s').style.display = 'none' " >
+ [x]</a>
+ </div>
+ <pre>
+ %(script)s
+ </pre>
+ </div>
+ <!--css div popup end-->
+
+ </td>
+</tr>
+""" # variables: (tid, Class, style, desc, status)
+
+
+ REPORT_TEST_NO_OUTPUT_TMPL = r"""
+<tr id='%(tid)s' class='%(Class)s'>
+ <td class='%(style)s'><div class='testcase'>%(desc)s</div></td>
+ <td colspan='5' align='center'>%(status)s</td>
+</tr>
+""" # variables: (tid, Class, style, desc, status)
+
+
+ REPORT_TEST_OUTPUT_TMPL = r"""
+%(id)s: %(output)s
+""" # variables: (id, output)
+
+
+
+ # ------------------------------------------------------------------------
+ # ENDING
+ #
+
+ ENDING_TMPL = """<div id='ending'> </div>"""
+
+# -------------------- The end of the Template class -------------------
+
+
+TestResult = unittest.TestResult
+
+class _TestResult(TestResult):
+ # note: _TestResult is a pure representation of results.
+ # It lacks the output and reporting ability compares to unittest._TextTestResult.
+
+ def __init__(self, verbosity=1):
+ TestResult.__init__(self)
+ self.stdout0 = None
+ self.stderr0 = None
+ self.success_count = 0
+ self.failure_count = 0
+ self.error_count = 0
+ self.verbosity = verbosity
+
+ # result is a list of result in 4 tuple
+ # (
+ # result code (0: success; 1: fail; 2: error),
+ # TestCase object,
+ # Test output (byte string),
+ # stack trace,
+ # )
+ self.result = []
+
+
+ def startTest(self, test):
+ TestResult.startTest(self, test)
+ # just one buffer for both stdout and stderr
+ self.outputBuffer = StringIO.StringIO()
+ stdout_redirector.fp = self.outputBuffer
+ stderr_redirector.fp = self.outputBuffer
+ self.stdout0 = sys.stdout
+ self.stderr0 = sys.stderr
+ sys.stdout = stdout_redirector
+ sys.stderr = stderr_redirector
+
+
+ def complete_output(self):
+ """
+ Disconnect output redirection and return buffer.
+ Safe to call multiple times.
+ """
+ if self.stdout0:
+ sys.stdout = self.stdout0
+ sys.stderr = self.stderr0
+ self.stdout0 = None
+ self.stderr0 = None
+ return self.outputBuffer.getvalue()
+
+
+ def stopTest(self, test):
+ # Usually one of addSuccess, addError or addFailure would have been called.
+ # But there are some path in unittest that would bypass this.
+ # We must disconnect stdout in stopTest(), which is guaranteed to be called.
+ self.complete_output()
+
+
+ def addSuccess(self, test):
+ self.success_count += 1
+ TestResult.addSuccess(self, test)
+ output = self.complete_output()
+ self.result.append((0, test, output, ''))
+ if self.verbosity > 1:
+ sys.stderr.write('ok ')
+ sys.stderr.write(str(test))
+ sys.stderr.write('\n')
+ else:
+ sys.stderr.write('.')
+
+ def addError(self, test, err):
+ self.error_count += 1
+ TestResult.addError(self, test, err)
+ _, _exc_str = self.errors[-1]
+ output = self.complete_output()
+ self.result.append((2, test, output, _exc_str))
+ if self.verbosity > 1:
+ sys.stderr.write('E ')
+ sys.stderr.write(str(test))
+ sys.stderr.write('\n')
+ else:
+ sys.stderr.write('E')
+
+ def addFailure(self, test, err):
+ self.failure_count += 1
+ TestResult.addFailure(self, test, err)
+ _, _exc_str = self.failures[-1]
+ output = self.complete_output()
+ self.result.append((1, test, output, _exc_str))
+ if self.verbosity > 1:
+ sys.stderr.write('F ')
+ sys.stderr.write(str(test))
+ sys.stderr.write('\n')
+ else:
+ sys.stderr.write('F')
+
+
+class HTMLTestRunner(Template_mixin):
+ """
+ """
+ def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None):
+ self.stream = stream
+ self.verbosity = verbosity
+ if title is None:
+ self.title = self.DEFAULT_TITLE
+ else:
+ self.title = title
+ if description is None:
+ self.description = self.DEFAULT_DESCRIPTION
+ else:
+ self.description = description
+
+ self.startTime = datetime.datetime.now()
+
+
+ def run(self, test):
+ "Run the given test case or test suite."
+ result = _TestResult(self.verbosity)
+ test(result)
+ self.stopTime = datetime.datetime.now()
+ self.generateReport(test, result)
+ print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)
+ return result
+
+
+ def sortResult(self, result_list):
+ # unittest does not seems to run in any particular order.
+ # Here at least we want to group them together by class.
+ rmap = {}
+ classes = []
+ for n,t,o,e in result_list:
+ cls = t.__class__
+ if not rmap.has_key(cls):
+ rmap[cls] = []
+ classes.append(cls)
+ rmap[cls].append((n,t,o,e))
+ r = [(cls, rmap[cls]) for cls in classes]
+ return r
+
+
+ def getReportAttributes(self, result):
+ """
+ Return report attributes as a list of (name, value).
+ Override this to add custom attributes.
+ """
+ startTime = str(self.startTime)[:19]
+ duration = str(self.stopTime - self.startTime)
+ status = []
+ if result.success_count: status.append('Pass %s' % result.success_count)
+ if result.failure_count: status.append('Failure %s' % result.failure_count)
+ if result.error_count: status.append('Error %s' % result.error_count )
+ if status:
+ status = ' '.join(status)
+ else:
+ status = 'none'
+ return [
+ ('Start Time', startTime),
+ ('Duration', duration),
+ ('Status', status),
+ ]
+
+
+ def generateReport(self, test, result):
+ report_attrs = self.getReportAttributes(result)
+ generator = 'HTMLTestRunner %s' % __version__
+ stylesheet = self._generate_stylesheet()
+ heading = self._generate_heading(report_attrs)
+ report = self._generate_report(result)
+ ending = self._generate_ending()
+ output = self.HTML_TMPL % dict(
+ title = saxutils.escape(self.title),
+ generator = generator,
+ stylesheet = stylesheet,
+ heading = heading,
+ report = report,
+ ending = ending,
+ )
+ self.stream.write(output.encode('utf8'))
+
+
+ def _generate_stylesheet(self):
+ return self.STYLESHEET_TMPL
+
+
+ def _generate_heading(self, report_attrs):
+ a_lines = []
+ for name, value in report_attrs:
+ line = self.HEADING_ATTRIBUTE_TMPL % dict(
+ name = saxutils.escape(name),
+ value = saxutils.escape(value),
+ )
+ a_lines.append(line)
+ heading = self.HEADING_TMPL % dict(
+ title = saxutils.escape(self.title),
+ parameters = ''.join(a_lines),
+ description = saxutils.escape(self.description),
+ )
+ return heading
+
+
+ def _generate_report(self, result):
+ rows = []
+ sortedResult = self.sortResult(result.result)
+ for cid, (cls, cls_results) in enumerate(sortedResult):
+ # subtotal for a class
+ np = nf = ne = 0
+ for n,t,o,e in cls_results:
+ if n == 0: np += 1
+ elif n == 1: nf += 1
+ else: ne += 1
+
+ # format class description
+ if cls.__module__ == "__main__":
+ name = cls.__name__
+ else:
+ name = "%s.%s" % (cls.__module__, cls.__name__)
+ doc = cls.__doc__ and cls.__doc__.split("\n")[0] or ""
+ desc = doc and '%s: %s' % (name, doc) or name
+
+ row = self.REPORT_CLASS_TMPL % dict(
+ style = ne > 0 and 'errorClass' or nf > 0 and 'failClass' or 'passClass',
+ desc = desc,
+ count = np+nf+ne,
+ Pass = np,
+ fail = nf,
+ error = ne,
+ cid = 'c%s' % (cid+1),
+ )
+ rows.append(row)
+
+ for tid, (n,t,o,e) in enumerate(cls_results):
+ self._generate_report_test(rows, cid, tid, n, t, o, e)
+
+ report = self.REPORT_TMPL % dict(
+ test_list = ''.join(rows),
+ count = str(result.success_count+result.failure_count+result.error_count),
+ Pass = str(result.success_count),
+ fail = str(result.failure_count),
+ error = str(result.error_count),
+ )
+ return report
+
+
+ def _generate_report_test(self, rows, cid, tid, n, t, o, e):
+ # e.g. 'pt1.1', 'ft1.1', etc
+ has_output = bool(o or e)
+ tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1,tid+1)
+ name = t.id().split('.')[-1]
+ doc = t.shortDescription() or ""
+ desc = doc and ('%s: %s' % (name, doc)) or name
+ tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL
+
+ # o and e should be byte string because they are collected from stdout and stderr?
+ if isinstance(o,str):
+ # TODO: some problem with 'string_escape': it escape \n and mess up formating
+ # uo = unicode(o.encode('string_escape'))
+ uo = o.decode('latin-1')
+ else:
+ uo = o
+ if isinstance(e,str):
+ # TODO: some problem with 'string_escape': it escape \n and mess up formating
+ # ue = unicode(e.encode('string_escape'))
+ ue = e.decode('latin-1')
+ else:
+ ue = e
+
+ script = self.REPORT_TEST_OUTPUT_TMPL % dict(
+ id = tid,
+ output = saxutils.escape(uo+ue),
+ )
+
+ row = tmpl % dict(
+ tid = tid,
+ Class = (n == 0 and 'hiddenRow' or 'none'),
+ style = n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'),
+ desc = desc,
+ script = script,
+ status = self.STATUS[n],
+ )
+ rows.append(row)
+ if not has_output:
+ return
+
+ def _generate_ending(self):
+ return self.ENDING_TMPL
+
+
+##############################################################################
+# Facilities for running tests from the command line
+##############################################################################
+
+# Note: Reuse unittest.TestProgram to launch test. In the future we may
+# build our own launcher to support more specific command line
+# parameters like test title, CSS, etc.
+class TestProgram(unittest.TestProgram):
+ """
+ A variation of the unittest.TestProgram. Please refer to the base
+ class for command line parameters.
+ """
+ def runTests(self):
+ # Pick HTMLTestRunner as the default test runner.
+ # base class's testRunner parameter is not useful because it means
+ # we have to instantiate HTMLTestRunner before we know self.verbosity.
+ if self.testRunner is None:
+ self.testRunner = HTMLTestRunner(verbosity=self.verbosity)
+ unittest.TestProgram.runTests(self)
+
+main = TestProgram
+
+##############################################################################
+# Executing this module from the command line
+##############################################################################
+
+if __name__ == "__main__":
+ main(module=None)