From 1a7bd96c7125916c813834588a5774cb201e41a3 Mon Sep 17 00:00:00 2001 From: Jeremie CHATTOU Date: Thu, 31 Aug 2017 15:03:24 +0200 Subject: [PATCH] clean SALOME_PROFILE --- CMakeLists.txt | 16 +- doc/CMakeLists.txt | 31 -- doc/README | 1 - doc/conf.py.in | 187 --------- doc/index.rst | 14 - doc/intro.rst | 4 - doc/link.rst | 4 - resources/CMakeLists.txt | 4 +- resources/SalomeApp.xml.in | 4 +- resources/doc/CMakeLists.txt | 2 +- src/CMakeLists.txt | 22 -- src/parseConfigFile.py | 245 ------------ src/resources/CMakeLists.txt | 34 -- src/resources/LightApp_images.ts | 23 -- src/resources/LightApp_msg_en.ts | 35 -- src/resources/LightApp_msg_fr.ts | 35 -- src/resources/LightApp_msg_ja.ts | 35 -- src/salomeContext.py | 628 ------------------------------- src/salomeContextUtils.py | 334 ---------------- src/tests/CMakeLists.txt | 29 -- src/tests/README | 1 - src/tests/helloWorld.py | 1 - 22 files changed, 13 insertions(+), 1676 deletions(-) delete mode 100644 doc/CMakeLists.txt delete mode 100644 doc/README delete mode 100644 doc/conf.py.in delete mode 100644 doc/index.rst delete mode 100644 doc/intro.rst delete mode 100644 doc/link.rst delete mode 100644 src/CMakeLists.txt delete mode 100755 src/parseConfigFile.py delete mode 100644 src/resources/CMakeLists.txt delete mode 100644 src/resources/LightApp_images.ts delete mode 100644 src/resources/LightApp_msg_en.ts delete mode 100644 src/resources/LightApp_msg_fr.ts delete mode 100644 src/resources/LightApp_msg_ja.ts delete mode 100755 src/salomeContext.py delete mode 100755 src/salomeContextUtils.py delete mode 100644 src/tests/CMakeLists.txt delete mode 100644 src/tests/README delete mode 100644 src/tests/helloWorld.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 93640a5..8fefbf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR) -PROJECT(Salome_SALOME_Profile C CXX) +PROJECT(Salome_SALOME C CXX) # Ensure a proper linker behavior: CMAKE_POLICY(SET CMP0003 NEW) @@ -104,9 +104,9 @@ ENDIF() SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH "Install path: SALOME Python scripts") # Specific to SALOME: -SET(SALOME_SALOME_PROFILE_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/salome_profile" CACHE PATH "Install path: SALOME SALOME specific data") -SET(SALOME_SALOME_PROFILE_INSTALL_DOC_GUI "${SALOME_INSTALL_DOC}/gui/${PROJECT_NAME_UC}" CACHE PATH "Install path: SALOME SALOME gui documentation") -SET(SALOME_SALOME_PROFILE_HTML_STATIC_PATH "${SALOME_SALOME_PROFILE_INSTALL_DOC_GUI}/_static" CACHE PATH "Install path: SALOME SALOME html static data") +SET(SALOME_SALOME_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/salome" CACHE PATH "Install path: SALOME SALOME specific data") +SET(SALOME_SALOME_INSTALL_DOC_GUI "${SALOME_INSTALL_DOC}/gui/${PROJECT_NAME_UC}" CACHE PATH "Install path: SALOME SALOME gui documentation") +SET(SALOME_SALOME_HTML_STATIC_PATH "${SALOME_SALOME_INSTALL_DOC_GUI}/_static" CACHE PATH "Install path: SALOME SALOME html static data") MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_PYTHON) @@ -114,9 +114,9 @@ INSTALL(CODE "FILE(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/USERS)") # Sources # ======== -ADD_SUBDIRECTORY( src ) +#ADD_SUBDIRECTORY( src ) # JCC 29/08/2017 #spns 8090 ADD_SUBDIRECTORY( resources ) -ADD_SUBDIRECTORY( doc ) +#ADD_SUBDIRECTORY( doc ) # Additional files # ================ @@ -129,5 +129,5 @@ SALOME_INSTALL_SCRIPTS("${_salome_context_API_SCRIPTS}" ${SALOME_INSTALL_SCRIPT_ SET(_salome_context_BASHRC ${KERNEL_ROOT_DIR}/bin/salome/appliskel/.bashrc ) -FILE(TO_CMAKE_PATH ${CMAKE_INSTALL_PREFIX} _SALOME_PROFILE_ROOT_DIR) -SALOME_INSTALL_SCRIPTS("${_salome_context_BASHRC}" ${_SALOME_PROFILE_ROOT_DIR}) +FILE(TO_CMAKE_PATH ${CMAKE_INSTALL_PREFIX} _SALOME_ROOT_DIR) +SALOME_INSTALL_SCRIPTS("${_salome_context_BASHRC}" ${_SALOME_ROOT_DIR}) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt deleted file mode 100644 index 8327061..0000000 --- a/doc/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2012-2016 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -SALOME_CONFIGURE_FILE(conf.py.in conf.py) - -SET(_cmd_options -c ${CMAKE_CURRENT_BINARY_DIR} -b html -d doctrees -D latex_paper_size=a4 ${CMAKE_CURRENT_SOURCE_DIR} html) -SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${SPHINX_EXECUTABLE}" "${_cmd_options}") - -ADD_CUSTOM_TARGET(html_docs COMMAND ${_cmd}) - -INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target html_docs)") -INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ DESTINATION ${SALOME_SALOME_PROFILE_INSTALL_DOC_GUI}) - -SET(make_clean_files html doctrees) -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}") diff --git a/doc/README b/doc/README deleted file mode 100644 index 141459c..0000000 --- a/doc/README +++ /dev/null @@ -1 +0,0 @@ -This directory contains the sources of SALOME's documentation diff --git a/doc/conf.py.in b/doc/conf.py.in deleted file mode 100644 index be88a54..0000000 --- a/doc/conf.py.in +++ /dev/null @@ -1,187 +0,0 @@ -# -*- coding: utf-8 -*- -# -# This file is execfile()d with the current directory set to its containing dir. -# -# The contents of this file are pickled, so don't put values in the namespace -# that aren't pickleable (module imports are okay, they're removed automatically). -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If your extensions are in another directory, add it here. If the directory -# is relative to the documentation root, use os.path.abspath to make it -# absolute, like shown here. -#sys.path.append(os.path.abspath('.')) - -# General configuration -# --------------------- - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'salome' -copyright = '2010-2016 CEA/DEN, EDF R&D, OPEN CASCADE, ASTEK INDUSTRIE' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '@SALOMESALOME_MAJOR_VERSION@.@SALOMESALOME_MINOR_VERSION@' -# The full version, including alpha/beta/rc tags. -release = '@SALOMESALOME_VERSION@' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directory, that shouldn't be searched -# for source files. -exclude_trees = ['.build','ref','images','CVS'] - -# A list of glob-style patterns that should be excluded when looking for source -# files. They are matched against the source file names relative to the -# source directory, using slashes as directory separators on all platforms. -exclude_patterns = ['**/CVS'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - - -# Options for HTML output -# ----------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = '@SPHINX_THEME@' - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['@SALOME_SALOME_PROFILE_INSTALL_DOC_GUI@/_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -html_use_modindex = False - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, the reST sources are included in the HTML build as _sources/. -#html_copy_source = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'salomedoc' - - -# Options for LaTeX output -# ------------------------ - -# The paper size ('letter' or 'a4'). -latex_paper_size = 'a4' - -# The font size ('10pt', '11pt' or '12pt'). -latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, document class [howto/manual]). -latex_documents = [ - ('index', 'salome.tex', 'SALOME User Documentation', 'A. Ribes', 'manual') -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -latex_use_modindex = False diff --git a/doc/index.rst b/doc/index.rst deleted file mode 100644 index 30c0efa..0000000 --- a/doc/index.rst +++ /dev/null @@ -1,14 +0,0 @@ - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -SALOME's documentation -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Outline -=========================== - - -.. toctree:: - :maxdepth: 1 - - intro.rst - link.rst diff --git a/doc/intro.rst b/doc/intro.rst deleted file mode 100644 index 2b0692e..0000000 --- a/doc/intro.rst +++ /dev/null @@ -1,4 +0,0 @@ -Introduction -========================================== - -Welcome to SALOME's documentation! diff --git a/doc/link.rst b/doc/link.rst deleted file mode 100644 index 33a4a2c..0000000 --- a/doc/link.rst +++ /dev/null @@ -1,4 +0,0 @@ -Link -========================================== - -A sample pdf file can be found :download:`here <../resources/doc/sample.pdf>` diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index 91e0358..e4e0155 100644 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -27,10 +27,10 @@ SET(SALOME_PROFILE_RESOURCES_FILES ) # --- rules --- -INSTALL(FILES ${SALOME_PROFILE_RESOURCES_FILES} DESTINATION ${SALOME_SALOME_PROFILE_INSTALL_RES_DATA}) +INSTALL(FILES ${SALOME_PROFILE_RESOURCES_FILES} DESTINATION ${SALOME_SALOME_INSTALL_RES_DATA}) # --- config --- -SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/SalomeApp.xml.in ${CMAKE_CURRENT_BINARY_DIR}/SalomeApp.xml INSTALL ${SALOME_SALOME_PROFILE_INSTALL_RES_DATA}) +SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/SalomeApp.xml.in ${CMAKE_CURRENT_BINARY_DIR}/SalomeApp.xml INSTALL ${SALOME_SALOME_INSTALL_RES_DATA}) # --- sub-directories --- ADD_SUBDIRECTORY( doc ) diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 5403330..5c3e3a9 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -16,7 +16,7 @@
- + @@ -24,6 +24,6 @@
- +
diff --git a/resources/doc/CMakeLists.txt b/resources/doc/CMakeLists.txt index 660f621..4198235 100644 --- a/resources/doc/CMakeLists.txt +++ b/resources/doc/CMakeLists.txt @@ -24,4 +24,4 @@ SET(_bin_DOCUMENTS sample.pdf ) -INSTALL(FILES ${_bin_DOCUMENTS} DESTINATION ${SALOME_SALOME_PROFILE_INSTALL_DOC_GUI}) +INSTALL(FILES ${_bin_DOCUMENTS} DESTINATION ${SALOME_SALOME_INSTALL_DOC_GUI}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 847da55..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2012-2016 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -# --- sub-directories --- -ADD_SUBDIRECTORY( tests ) -ADD_SUBDIRECTORY( resources ) diff --git a/src/parseConfigFile.py b/src/parseConfigFile.py deleted file mode 100755 index 77e6350..0000000 --- a/src/parseConfigFile.py +++ /dev/null @@ -1,245 +0,0 @@ -# Copyright (C) 2013-2016 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -import ConfigParser -import os -import logging -import re -from io import StringIO -import subprocess -from salomeContextUtils import SalomeContextException #@UnresolvedImport - -logging.basicConfig() -logConfigParser = logging.getLogger(__name__) - -ADD_TO_PREFIX = 'ADD_TO_' -UNSET_KEYWORD = 'UNSET' - - -def _expandSystemVariables(key, val): - expandedVal = os.path.expandvars(val) # expand environment variables - # Search for not expanded variables (i.e. non-existing environment variables) - pattern = re.compile('\${ ( [^}]* ) }', re.VERBOSE) # string enclosed in ${ and } - expandedVal = pattern.sub(r'', expandedVal) # remove matching patterns - - if not "DLIM8VAR" in key: # special case: DISTENE licence key can contain double clons (::) - expandedVal = _trimColons(expandedVal) - return expandedVal -# - -# :TRICKY: So ugly solution... -class MultiOptSafeConfigParser(ConfigParser.SafeConfigParser): - def __init__(self): - ConfigParser.SafeConfigParser.__init__(self) - - # copied from python 2.6.8 Lib.ConfigParser.py - # modified (see code comments) to handle duplicate keys - def _read(self, fp, fpname): - """Parse a sectioned setup file. - - The sections in setup file contains a title line at the top, - indicated by a name in square brackets (`[]'), plus key/value - options lines, indicated by `name: value' format lines. - Continuations are represented by an embedded newline then - leading whitespace. Blank lines, lines beginning with a '#', - and just about everything else are ignored. - """ - cursect = None # None, or a dictionary - optname = None - lineno = 0 - e = None # None, or an exception - while True: - line = fp.readline() - if not line: - break - lineno = lineno + 1 - # comment or blank line? - if line.strip() == '' or line[0] in '#;': - continue - if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR": - # no leading whitespace - continue - # continuation line? - if line[0].isspace() and cursect is not None and optname: - value = line.strip() - if value: - cursect[optname].append(value) - # a section header or option header? - else: - # is it a section header? - mo = self.SECTCRE.match(line) - if mo: - sectname = mo.group('header') - if sectname in self._sections: - cursect = self._sections[sectname] - elif sectname == ConfigParser.DEFAULTSECT: - cursect = self._defaults - else: - cursect = self._dict() - cursect['__name__'] = sectname - self._sections[sectname] = cursect - # So sections can't start with a continuation line - optname = None - # no section header in the file? - elif cursect is None: - raise ConfigParser.MissingSectionHeaderError(fpname, lineno, line) - # an option line? - else: - mo = self.OPTCRE.match(line) - if mo: - optname, vi, optval = mo.group('option', 'vi', 'value') - optname = self.optionxform(optname.rstrip()) - # This check is fine because the OPTCRE cannot - # match if it would set optval to None - if optval is not None: - if vi in ('=', ':') and ';' in optval: - # ';' is a comment delimiter only if it follows - # a spacing character - pos = optval.find(';') - if pos != -1 and optval[pos-1].isspace(): - optval = optval[:pos] - optval = optval.strip() - # ADD THESE LINES - splittedComments = optval.split('#') - s = _expandSystemVariables(optname, splittedComments[0]) - optval = s.strip().strip("'").strip('"') - #if len(splittedComments) > 1: - # optval += " #" + " ".join(splittedComments[1:]) - # END OF ADD - # allow empty values - if optval == '""': - optval = '' - # REPLACE following line (original): - #cursect[optname] = [optval] - # BY THESE LINES: - # Check if this optname already exists - if (optname in cursect) and (cursect[optname] is not None): - cursect[optname][0] += ','+optval - else: - cursect[optname] = [optval] - # END OF SUBSTITUTION - else: - # valueless option handling - cursect[optname] = optval - else: - # a non-fatal parsing error occurred. set up the - # exception but keep going. the exception will be - # raised at the end of the file and will contain a - # list of all bogus lines - if not e: - e = ConfigParser.ParsingError(fpname) - e.append(lineno, repr(line)) - # if any parsing errors occurred, raise an exception - if e: - raise e - - # join the multi-line values collected while reading - all_sections = [self._defaults] - all_sections.extend(self._sections.values()) - for options in all_sections: - for name, val in options.items(): - if isinstance(val, list): - options[name] = '\n'.join(val) - # - - -# Parse configuration file -# Input: filename, and a list of reserved keywords (environment variables) -# Output: a list of pairs (variable, value), and a dictionary associating a list of user-defined values to each reserved keywords -# Note: Does not support duplicate keys in a same section -def parseConfigFile(filename, reserved = None): - if reserved is None: - reserved = [] - config = MultiOptSafeConfigParser() - config.optionxform = str # case sensitive - - # :TODO: test file existence - - # Read config file - try: - config.read(filename) - except ConfigParser.MissingSectionHeaderError: - logConfigParser.error("No section found in file: %s"%(filename)) - return [] - - try: - return __processConfigFile(config, reserved, filename) - except ConfigParser.InterpolationMissingOptionError, e: - msg = "A variable may be undefined in SALOME context file: %s\nParser error is: %s\n"%(filename, e) - raise SalomeContextException(msg) -# - -def __processConfigFile(config, reserved = None, filename="UNKNOWN FILENAME"): - # :TODO: may detect duplicated variables in the same section (raise a warning) - # or even duplicate sections - - if reserved is None: - reserved = [] - unsetVariables = [] - outputVariables = [] - # Get raw items for each section, and make some processing for environment variables management - reservedKeys = [ADD_TO_PREFIX+str(x) for x in reserved] # produce [ 'ADD_TO_reserved_1', 'ADD_TO_reserved_2', ..., ADD_TO_reserved_n ] - reservedValues = dict([str(i),[]] for i in reserved) # create a dictionary in which keys are the 'ADD_TO_reserved_i' and associated values are empty lists: { 'reserved_1':[], 'reserved_2':[], ..., reserved_n:[] } - sections = config.sections() - for section in sections: - entries = config.items(section, raw=False) # use interpolation - if len(entries) == 0: # empty section - logConfigParser.warning("Empty section: %s in file: %s"%(section, filename)) - pass - for key,val in entries: - if key in reserved: - logConfigParser.error("Invalid use of reserved variable: %s in file: %s"%(key, filename)) - elif key == UNSET_KEYWORD: - unsetVariables += val.replace(',', ' ').split() - else: - expandedVal = _expandSystemVariables(key, val) - - if key in reservedKeys: - shortKey = key[len(ADD_TO_PREFIX):] - vals = expandedVal.split(',') - reservedValues[shortKey] += vals - # remove left&right spaces on each element - vals = [v.strip(' \t\n\r') for v in vals] - else: - outputVariables.append((key, expandedVal)) - pass - pass # end if key - pass # end for key,val - pass # end for section - - # remove duplicate values - outVars = [] - for (var, values) in outputVariables: - vals = values.split(',') - vals = list(set(vals)) - outVars.append((var, ','.join(vals))) - - return unsetVariables, outVars, reservedValues -# - -def _trimColons(var): - v = var - # Remove leading and trailing colons (:) - pattern = re.compile('^:+ | :+$', re.VERBOSE) - v = pattern.sub(r'', v) # remove matching patterns - # Remove multiple colons - pattern = re.compile('::+', re.VERBOSE) - v = pattern.sub(r':', v) # remove matching patterns - return v -# diff --git a/src/resources/CMakeLists.txt b/src/resources/CMakeLists.txt deleted file mode 100644 index 7867996..0000000 --- a/src/resources/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2012-2016 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -INCLUDE(UseQtExt) - -# --- resources --- - -# resource files / to be processed by lrelease -SET(_ts_RESOURCES - LightApp_images.ts - LightApp_msg_en.ts - LightApp_msg_fr.ts - LightApp_msg_ja.ts -) - -# --- rules --- - -QT_INSTALL_TS_RESOURCES("${_ts_RESOURCES}" "${SALOME_SALOME_PROFILE_INSTALL_RES_DATA}") diff --git a/src/resources/LightApp_images.ts b/src/resources/LightApp_images.ts deleted file mode 100644 index ee44bfc..0000000 --- a/src/resources/LightApp_images.ts +++ /dev/null @@ -1,23 +0,0 @@ - - - - - @default - - APP_DEFAULT_ICO - app_icon.png - - - ICO_ABOUT - icon_about.png - - - ABOUT - about.png - - - APP_BASE_LOGO - app_logo.png - - - diff --git a/src/resources/LightApp_msg_en.ts b/src/resources/LightApp_msg_en.ts deleted file mode 100644 index d7c4327..0000000 --- a/src/resources/LightApp_msg_en.ts +++ /dev/null @@ -1,35 +0,0 @@ - - - - - @default - - ABOUT_COPYRIGHT - Copyright (C) - - - ABOUT_CAPTION - About SALOME - - - APP_NAME - SALOME - - - APP_VERSION - V8.3.0 - - - ABOUT_LICENSE - License description - - - ABOUT_VERSION - Version 8.3.0 - - - ABOUT_TITLE - SALOME - - - diff --git a/src/resources/LightApp_msg_fr.ts b/src/resources/LightApp_msg_fr.ts deleted file mode 100644 index 567ccbd..0000000 --- a/src/resources/LightApp_msg_fr.ts +++ /dev/null @@ -1,35 +0,0 @@ - - - - - @default - - ABOUT_COPYRIGHT - Copyright (C) - - - ABOUT_CAPTION - A propos de SALOME - - - APP_NAME - SALOME - - - APP_VERSION - V8.3.0 - - - ABOUT_LICENSE - Description de la licence - - - ABOUT_VERSION - Version 8.3.0 - - - ABOUT_TITLE - SALOME - - - diff --git a/src/resources/LightApp_msg_ja.ts b/src/resources/LightApp_msg_ja.ts deleted file mode 100644 index 2bf65a0..0000000 --- a/src/resources/LightApp_msg_ja.ts +++ /dev/null @@ -1,35 +0,0 @@ - - - - - @default - - ABOUT_COPYRIGHT - Copyright (C) - - - ABOUT_CAPTION - About SALOME - - - APP_NAME - SALOME - - - APP_VERSION - V8.3.0 - - - ABOUT_LICENSE - License description - - - ABOUT_VERSION - Version 8.3.0 - - - ABOUT_TITLE - SALOME - - - diff --git a/src/salomeContext.py b/src/salomeContext.py deleted file mode 100755 index 2b7ffad..0000000 --- a/src/salomeContext.py +++ /dev/null @@ -1,628 +0,0 @@ -# Copyright (C) 2013-2017 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -import os -import sys -import logging -import ConfigParser - -from parseConfigFile import parseConfigFile - -import tempfile -import pickle -import subprocess -import platform - -from salomeContextUtils import SalomeContextException - -def usage(): - msg = '''\ -Usage: salome [command] [options] [--config=] - -Commands: -========= - start Start a new SALOME instance. - context Initialize SALOME context. Current environment is extended. - shell Initialize SALOME context, attached to the last created SALOME - instance if any, and executes scripts passed as command arguments. - User works in a Shell terminal. SALOME environment is set but - application is not started. - connect Connect a Python console to the active SALOME instance. - kill Terminate SALOME instances running on given ports for current user. - Port numbers must be separated by blank characters. - killall Terminate *all* SALOME running instances for current user. - Do not start a new one. - test Run SALOME tests. - info Display some information about SALOME. - doc Show online module documentation (if available). - Module names must be separated by blank characters. - help Show this message. - -If no command is given, default is start. - -Command options: -================ - Use salome --help to show help on command. Available for the - following commands: start, shell, connect, test, info. - ---config= -========================== - Initialize SALOME context from a list of context files and/or a list - of folders containing context files. The list is comma-separated, whithout - any blank characters. -''' - - print msg -# - -""" -The SalomeContext class in an API to configure SALOME context then -start SALOME using a single python command. - -""" -class SalomeContext: - """ - Initialize context from a list of configuration files - identified by their names. - These files should be in appropriate .cfg format. - """ - def __init__(self, configFileNames=0): - self.getLogger().setLevel(logging.INFO) - #it could be None explicitely (if user use multiples setVariable...for standalone) - if configFileNames is None: - return - configFileNames = configFileNames or [] - if len(configFileNames) == 0: - raise SalomeContextException("No configuration files given") - - reserved=['PATH', 'DYLD_FALLBACK_LIBRARY_PATH', 'DYLD_LIBRARY_PATH', 'LD_LIBRARY_PATH', 'PYTHONPATH', 'MANPATH', 'PV_PLUGIN_PATH', 'INCLUDE', 'LIBPATH', 'SALOME_PLUGINS_PATH', 'LIBRARY_PATH'] - for filename in configFileNames: - basename, extension = os.path.splitext(filename) - if extension == ".cfg": - self.__setContextFromConfigFile(filename, reserved) - else: - self.getLogger().error("Unrecognized extension for configuration file: %s", filename) - # - - def __loadMPI(self, module_name): - print "Trying to load MPI module: %s..."%module_name, - try: - out, err = subprocess.Popen(["modulecmd", "python", "load", module_name], stdout=subprocess.PIPE).communicate() - exec out # define specific environment variables - print " OK" - except: - print " ** Failed **" - pass - # - - def runSalome(self, args): - import os - # Run this module as a script, in order to use appropriate Python interpreter - # according to current path (initialized from context files). - mpi_module_option = "--with-mpi-module=" - mpi_module = [x for x in args if x.startswith(mpi_module_option)] - if mpi_module: - mpi_module = mpi_module[0][len(mpi_module_option):] - self.__loadMPI(mpi_module) - args = [x for x in args if not x.startswith(mpi_module_option)] - else: - mpi_module = os.getenv("SALOME_MPI_MODULE_NAME", None) - if mpi_module: - self.__loadMPI(mpi_module) - - absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','') - env_copy = os.environ.copy() - proc = subprocess.Popen(['python', os.path.join(absoluteAppliPath,"bin","salome","salomeContext.py"), pickle.dumps(self), pickle.dumps(args)], shell=False, close_fds=True, env=env_copy) - out, err = proc.communicate() - return out, err, proc.returncode - # - - """Append value to PATH environment variable""" - def addToPath(self, value): - self.addToVariable('PATH', value) - # - - """Append value to LD_LIBRARY_PATH environment variable""" - def addToLdLibraryPath(self, value): - if platform.system() == 'Windows': - self.addToVariable('PATH', value) - elif platform.system() == 'Darwin': - if "LAPACK" in value: - self.addToVariable('DYLD_FALLBACK_LIBRARY_PATH', value) - else: - self.addToVariable('DYLD_LIBRARY_PATH', value) - else: - self.addToVariable('LD_LIBRARY_PATH', value) - # - - """Append value to DYLD_LIBRARY_PATH environment variable""" - def addToDyldLibraryPath(self, value): - self.addToVariable('DYLD_LIBRARY_PATH', value) - # - - """Append value to PYTHONPATH environment variable""" - def addToPythonPath(self, value): - self.addToVariable('PYTHONPATH', value) - # - - """Set environment variable to value""" - def setVariable(self, name, value, overwrite=False): - env = os.getenv(name, '') - if env and not overwrite: - self.getLogger().error("Environment variable already existing (and not overwritten): %s=%s", name, value) - return - - if env: - self.getLogger().debug("Overwriting environment variable: %s=%s", name, value) - - value = os.path.expandvars(value) # expand environment variables - self.getLogger().debug("Set environment variable: %s=%s", name, value) - os.environ[name] = value - # - - """Unset environment variable""" - def unsetVariable(self, name): - if os.environ.has_key(name): - del os.environ[name] - # - - """Append value to environment variable""" - def addToVariable(self, name, value, separator=os.pathsep): - if value == '': - return - - value = os.path.expandvars(value) # expand environment variables - self.getLogger().debug("Add to %s: %s", name, value) - env = os.getenv(name, None) - if env is None: - os.environ[name] = value - else: - os.environ[name] = value + separator + env - # - - ################################### - # This begins the private section # - ################################### - - def __parseArguments(self, args): - if len(args) == 0 or args[0].startswith("-"): - return None, args - - command = args[0] - options = args[1:] - - availableCommands = { - 'start' : '_runAppli', - 'context' : '_setContext', - 'shell' : '_runSession', - 'connect' : '_runConsole', - 'kill' : '_kill', - 'killall' : '_killAll', - 'test' : '_runTests', - 'info' : '_showInfo', - 'doc' : '_showDoc', - 'help' : '_usage', - 'coffee' : '_makeCoffee', - 'car' : '_getCar', - } - - if not command in availableCommands.keys(): - command = "start" - options = args - - return availableCommands[command], options - # - - """ - Run SALOME! - Args consist in a mandatory command followed by optionnal parameters. - See usage for details on commands. - """ - def _startSalome(self, args): - import os - import sys - try: - from setenv import add_path - absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH') - path = os.path.realpath(os.path.join(absoluteAppliPath, "bin", "salome")) - add_path(path, "PYTHONPATH") - path = os.path.realpath(os.path.join(absoluteAppliPath, "bin", "salome", "appliskel")) - add_path(path, "PYTHONPATH") - - except: - pass - - command, options = self.__parseArguments(args) - sys.argv = options - - if command is None: - if args and args[0] in ["-h","--help","help"]: - usage() - sys.exit(0) - # try to default to "start" command - command = "_runAppli" - - try: - res = getattr(self, command)(options) # run appropriate method - return res or (None, None) - except SystemExit, returncode: - if returncode != 0: - self.getLogger().error("SystemExit %s in method %s.", returncode, command) - sys.exit(returncode) - except StandardError: - self.getLogger().error("Unexpected error:") - import traceback - traceback.print_exc() - sys.exit(1) - except SalomeContextException, e: - self.getLogger().error(e) - sys.exit(1) - # - - def __setContextFromConfigFile(self, filename, reserved=None): - if reserved is None: - reserved = [] - try: - unsetVars, configVars, reservedDict = parseConfigFile(filename, reserved) - except SalomeContextException, e: - msg = "%s"%e - self.getLogger().error(msg) - sys.exit(1) - - # unset variables - for var in unsetVars: - self.unsetVariable(var) - - # set context - for reserved in reservedDict: - a = filter(None, reservedDict[reserved]) # remove empty elements - a = [ os.path.realpath(x) for x in a ] - reformattedVals = os.pathsep.join(a) - if reserved in ["INCLUDE", "LIBPATH"]: - self.addToVariable(reserved, reformattedVals, separator=' ') - else: - self.addToVariable(reserved, reformattedVals) - pass - - for key,val in configVars: - self.setVariable(key, val, overwrite=True) - pass - - pythonpath = os.getenv('PYTHONPATH','').split(os.pathsep) - pythonpath = [ os.path.realpath(x) for x in pythonpath ] - sys.path[:0] = pythonpath - # - - def _runAppli(self, args=None): - if args is None: - args = [] - # Initialize SALOME environment - sys.argv = ['runSalome'] + args - import setenv - setenv.main(True, exeName="salome start") - - import runSalome - runSalome.runSalome() - # - - def _setContext(self, args=None): - salome_context_set = os.getenv("SALOME_CONTEXT_SET") - if salome_context_set: - print "***" - print "*** SALOME context has already been set." - print "*** Enter 'exit' (only once!) to leave SALOME context." - print "***" - return - - os.environ["SALOME_CONTEXT_SET"] = "yes" - print "***" - print "*** SALOME context is now set." - print "*** Enter 'exit' (only once!) to leave SALOME context." - print "***" - - cmd = ["/bin/bash"] - proc = subprocess.Popen(cmd, shell=False, close_fds=True) - return proc.communicate() - # - - def _runSession(self, args=None): - if args is None: - args = [] - sys.argv = ['runSession'] + args - import runSession - params, args = runSession.configureSession(args, exe="salome shell") - - sys.argv = ['runSession'] + args - import setenv - setenv.main(True) - - return runSession.runSession(params, args) - # - - def _runConsole(self, args=None): - if args is None: - args = [] - # Initialize SALOME environment - sys.argv = ['runConsole'] - import setenv - setenv.main(True) - - import runConsole - return runConsole.connect(args) - # - - def _kill(self, args=None): - if args is None: - args = [] - ports = args - if not ports: - print "Port number(s) not provided to command: salome kill " - return - - from multiprocessing import Process - from killSalomeWithPort import killMyPort - import tempfile - for port in ports: - with tempfile.NamedTemporaryFile(): - p = Process(target = killMyPort, args=(port,)) - p.start() - p.join() - pass - # - - def _killAll(self, unused=None): - try: - import PortManager # mandatory - from multiprocessing import Process - from killSalomeWithPort import killMyPort - ports = PortManager.getBusyPorts()['this'] - - if ports: - import tempfile - for port in ports: - with tempfile.NamedTemporaryFile(): - p = Process(target = killMyPort, args=(port,)) - p.start() - p.join() - except ImportError: - # :TODO: should be declared obsolete - from killSalome import killAllPorts - killAllPorts() - pass - # - - def _runTests(self, args=None): - if args is None: - args = [] - sys.argv = ['runTests'] - import setenv - setenv.main(True) - - import runTests - return runTests.runTests(args, exe="salome test") - # - - def _showSoftwareVersions(self, softwares=None): - config = ConfigParser.SafeConfigParser() - absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH') - filename = os.path.join(absoluteAppliPath, "sha1_collections.txt") - versions = {} - max_len = 0 - with open(filename) as f: - for line in f: - try: - software, version, sha1 = line.split() - versions[software.upper()] = version - if len(software) > max_len: - max_len = len(software) - except: - pass - pass - pass - if softwares: - for soft in softwares: - if versions.has_key(soft.upper()): - print soft.upper().rjust(max_len), versions[soft.upper()] - else: - import collections - od = collections.OrderedDict(sorted(versions.items())) - for name, version in od.iteritems(): - print name.rjust(max_len), versions[name] - pass - - def _showInfo(self, args=None): - if args is None: - args = [] - - usage = "Usage: salome info [options]" - epilog = """\n -Display some information about SALOME.\n -Available options are: - -p,--ports Show the list of busy ports (running SALOME instances). - -s,--softwares [software(s)] Show the list and versions of SALOME softwares. - Software names must be separated by blank characters. - If no software is given, show version of all softwares. - -v,--version Show running SALOME version. - -h,--help Show this message. -""" - if not args: - args = ["--version"] - - if "-h" in args or "--help" in args: - print usage + epilog - return - - if "-p" in args or "--ports" in args: - import PortManager - ports = PortManager.getBusyPorts() - this_ports = ports['this'] - other_ports = ports['other'] - if this_ports or other_ports: - print "SALOME instances are running on the following ports:" - if this_ports: - print " This application:", this_ports - else: - print " No SALOME instances of this application" - if other_ports: - print " Other applications:", other_ports - else: - print " No SALOME instances of other applications" - else: - print "No SALOME instances are running" - - if "-s" in args or "--softwares" in args: - if "-s" in args: - index = args.index("-s") - else: - index = args.index("--softwares") - indexEnd=index+1 - while indexEnd < len(args) and args[indexEnd][0] != "-": - indexEnd = indexEnd + 1 - self._showSoftwareVersions(softwares=args[index+1:indexEnd]) - - if "-v" in args or "--version" in args: - print "Running with python", platform.python_version() - self._runAppli(["--version"]) - # - - def _showDoc(self, args=None): - if args is None: - args = [] - - modules = args - if not modules: - print "Module(s) not provided to command: salome doc " - return - - appliPath = os.getenv("ABSOLUTE_APPLI_PATH") - if not appliPath: - raise SalomeContextException("Unable to find application path. Please check that the variable ABSOLUTE_APPLI_PATH is set.") - baseDir = os.path.join(appliPath, "share", "doc", "salome") - for module in modules: - docfile = os.path.join(baseDir, "gui", module.upper(), "index.html") - if not os.path.isfile(docfile): - docfile = os.path.join(baseDir, "tui", module.upper(), "index.html") - if not os.path.isfile(docfile): - docfile = os.path.join(baseDir, "dev", module.upper(), "index.html") - if os.path.isfile(docfile): - out, err = subprocess.Popen(["xdg-open", docfile]).communicate() - else: - print "Online documentation is not accessible for module:", module - - def _usage(self, unused=None): - usage() - # - - def _makeCoffee(self, unused=None): - print " (" - print " ) (" - print " ___...(-------)-....___" - print " .-\"\" ) ( \"\"-." - print " .-\'``\'|-._ ) _.-|" - print " / .--.| `\"\"---...........---\"\"` |" - print " / / | |" - print " | | | |" - print " \\ \\ | |" - print " `\\ `\\ | |" - print " `\\ `| SALOME |" - print " _/ /\\ 4 EVER /" - print " (__/ \\ <3 /" - print " _..---\"\"` \\ /`\"\"---.._" - print " .-\' \\ / \'-." - print " : `-.__ __.-\' :" - print " : ) \"\"---...---\"\" ( :" - print " \'._ `\"--...___...--\"` _.\'" - print " \\\"\"--..__ __..--\"\"/" - print " \'._ \"\"\"----.....______.....----\"\"\" _.\'" - print " `\"\"--..,,_____ _____,,..--\"\"`" - print " `\"\"\"----\"\"\"`" - print "" - print " SALOME is working for you; what else?" - print "" - sys.exit(0) - # - - def _getCar(self, unused=None): - print " _____________" - print " ..---:::::::-----------. ::::;;." - print " .\'\"\"\"\"\"\" ;; \\ \":." - print " .\'\' ; \\ \"\\__." - print " .\' ;; ; \\\\\";" - print " .\' ; _____; \\\\/" - print " .\' :; ;\" \\ ___:\'." - print " .\'--........................... : = ____:\" \\ \\" - print " ..-\"\" \"\"\"\' o\"\"\" ; ; :" - print " .--\"\" .----- ..----... _.- --. ..-\" ; ; ; ;" - print " .\"\"_- \"--\"\"-----\'\"\" _-\" .-\"\" ; ; .-." - print " .\' .\' SALOME .\" .\" ; ; /. |" - print " /-./\' 4 EVER <3 .\" / _.. ; ; ;;;|" - print " : ;-.______ / _________==. /_ \\ ; ; ;;;;" - print " ; / | \"\"\"\"\"\"\"\"\"\"\".---.\"\"\"\"\"\"\" : /\" \". |; ; _; ;;;" - print " /\"-/ | / / / / ;|; ;-\" | ;\';" - print ":- : \"\"\"----______ / / ____. . .\"\'. ;; .-\"..T\" ." - print "\'. \" ___ \"\": \'\"\"\"\"\"\"\"\"\"\"\"\"\"\" . ; ; ;; ;.\" .\" \'--\"" - print " \", __ \"\"\" \"\"---... :- - - - - - - - - \' \' ; ; ; ;;\" .\"" - print " /. ; \"\"\"---___ ; ; ; ;|.\"\"" - print " : \": \"\"\"----. .-------. ; ; ; ;:" - print " \\ \'--__ \\ \\ \\ / | ; ;;" - print " \'-.. \"\"\"\"---___ : .______..\\ __/..-\"\"| ; ; ;" - print " \"\"--.. \"\"\"--\" m l s . \". . ;" - print " \"\"------... ..--\"\" \" :" - print " \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\" \\ /" - print " \"------\"" - print "" - print " Drive your simulation properly with SALOME!" - print "" - sys.exit(0) - # - - # Add the following two methods since logger is not pickable - # Ref: http://stackoverflow.com/questions/2999638/how-to-stop-attributes-from-being-pickled-in-python - def __getstate__(self): - d = dict(self.__dict__) - if hasattr(self, '_logger'): - del d['_logger'] - return d - # - def __setstate__(self, d): - self.__dict__.update(d) # I *think* this is a safe way to do it - # - # Excluding self._logger from pickle operation imply using the following method to access logger - def getLogger(self): - if not hasattr(self, '_logger'): - self._logger = logging.getLogger(__name__) - #self._logger.setLevel(logging.DEBUG) - #self._logger.setLevel(logging.WARNING) - self._logger.setLevel(logging.ERROR) - return self._logger - # - -if __name__ == "__main__": - if len(sys.argv) == 3: - context = pickle.loads(sys.argv[1]) - args = pickle.loads(sys.argv[2]) - - (out, err) = context._startSalome(args) - if out: - sys.stdout.write(out) - if err: - sys.stderr.write(err) - else: - usage() -# diff --git a/src/salomeContextUtils.py b/src/salomeContextUtils.py deleted file mode 100755 index 5fdf502..0000000 --- a/src/salomeContextUtils.py +++ /dev/null @@ -1,334 +0,0 @@ -#! /usr/bin/env python - -# Copyright (C) 2013-2016 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -import os -import sys -import glob -import subprocess -import re -import socket -import json - -""" -Define a specific exception class to manage exceptions related to SalomeContext -""" -class SalomeContextException(Exception): - """Report error messages to the user interface of SalomeContext.""" -# - -def __listDirectory(path): - allFiles = [] - for root, dirs, files in os.walk(path): - cfgFiles = glob.glob(os.path.join(root,'*.cfg')) - allFiles += cfgFiles - - return allFiles -# - -def __getConfigFileNamesDefault(): - absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH','') - if not absoluteAppliPath: - return [] - - envdDir = absoluteAppliPath + '/env.d' - if not os.path.isdir(envdDir): - return [] - - return __listDirectory(envdDir) -# - -def __getEnvironmentFileNames(args, optionPrefix, checkExistence): - # special case: extra configuration/environment files are provided by user - # Search for command-line argument(s) =file1,file2,..., filen - # Search for command-line argument(s) =dir1,dir2,..., dirn - configArgs = [ str(x) for x in args if str(x).startswith(optionPrefix) ] - - args = [ x for x in args if not x.startswith(optionPrefix) ] - allLists = [ x.replace(optionPrefix, '') for x in configArgs ] - - configFileNames = [] - unexisting = [] - for currentList in allLists: - elements = currentList.split(',') - for elt in elements: - elt = os.path.realpath(os.path.expanduser(elt)) - if os.path.isdir(elt): - configFileNames += __listDirectory(elt) - else: - if checkExistence and not os.path.isfile(elt): - unexisting += [elt] - else: - configFileNames += [elt] - - return configFileNames, args, unexisting -# - -def getConfigFileNames(args, checkExistence=False): - configOptionPrefix = "--config=" - configArgs = [ str(x) for x in args if str(x).startswith(configOptionPrefix) ] - if len(configArgs) == 0: - configFileNames, unexist = __getConfigFileNamesDefault(), [] - else: - # get configuration filenames - configFileNames, args, unexist = __getEnvironmentFileNames(args, configOptionPrefix, checkExistence) - - return configFileNames, args, unexist -# - -def __getScriptPath(scriptName, searchPathList): - scriptName = os.path.expanduser(scriptName) - if os.path.isabs(scriptName): - return scriptName - - if searchPathList is None or len(searchPathList) == 0: - return None - - for path in searchPathList: - fullName = os.path.join(path, scriptName) - if os.path.isfile(fullName) or os.path.isfile(fullName+".py"): - return fullName - - return None -# - -class ScriptAndArgs: - # script: the command to be run, e.g. python - # args: its input parameters - # out: its output parameters - def __init__(self, script=None, args=None, out=None): - self.script = script - self.args = args - self.out = out - # - def __repr__(self): - msg = "\n# Script: %s\n"%self.script - msg += " * Input: %s\n"%self.args - msg += " * Output: %s\n"%self.out - return msg - # -# -class ScriptAndArgsObjectEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, ScriptAndArgs): - # to be easily parsed in GUI module (SalomeApp_Application) - # Do not export output arguments - return {obj.script:obj.args or []} - else: - return json.JSONEncoder.default(self, obj) -# - -def getShortAndExtraArgs(args=None): - if args is None: - args = [] - try: - pos = args.index("--") # raise a ValueError if not found - short_args = args[:pos] - extra_args = args[pos:] # include "--" - except ValueError: - short_args = args - extra_args = [] - pass - - return short_args, extra_args -# - -# Return an array of ScriptAndArgs objects -def getScriptsAndArgs(args=None, searchPathList=None): - if args is None: - args = [] - short_args, extra_args = getShortAndExtraArgs(args) - args = short_args - - if searchPathList is None: - searchPathList = sys.path - - # Syntax of args: script.py [args:a1,a2=val,an] ... script.py [args:a1,a2=val,an] - scriptArgs = [] - currentKey = None - argsPrefix = "args:" - outPrefix = "out:" - callPython = False - afterArgs = False - currentScript = None - - for i in range(len(args)): - elt = os.path.expanduser(args[i]) - isDriver = (elt == "driver") # special case for YACS scheme execution - - if elt.startswith(argsPrefix): - if not currentKey or callPython: - raise SalomeContextException("args list must follow corresponding script file in command line.") - elt = elt.replace(argsPrefix, '') - # Special process if some items of 'args:' list are themselves lists - # Note that an item can be a list, but not a list of lists... - # So we can have something like this: - # myscript.py args:['file1','file2'],val1,"done",[1,2,3],[True,False],"ok" - # With such a call, an elt variable contains the string representing ['file1','file2'],val1,"done",[1,2,3],[True,False],"ok" that is '[file1,file2],val1,done,[1,2,3],[True,False],ok' - # We have to split elt to obtain: ['[file1,file2]','val1','done','[1,2,3]','[True,False]','ok'] - contains_list = re.findall('(\[[^\]]*\])', elt) - if contains_list: - extracted_args = [] - x = elt.split(",") - # x is ['[file1', 'file2]', 'val1', 'done', '[1', '2', '3]', '[True', 'False]', 'ok'] - list_begin_indices = [i for i in xrange(len(x)) if x[i].startswith('[')] # [0, 4, 7] - list_end_indices = [i for i in xrange(len(x)) if x[i].endswith(']')] # [1, 6, 8] - start = 0 - for lbeg, lend in zip(list_begin_indices,list_end_indices): # [(0, 1), (4, 6), (7, 8)] - if lbeg > start: - extracted_args += x[start:lbeg] - pass - extracted_args += [','.join(x[lbeg:lend+1])] - start = lend+1 - pass - if start < len(x): - extracted_args += x[start:len(x)] - pass - scriptArgs[len(scriptArgs)-1].args = extracted_args - pass - else: # a single split is enough - scriptArgs[len(scriptArgs)-1].args = [os.path.expanduser(x) for x in elt.split(",")] - pass - currentKey = None - callPython = False - afterArgs = True - elif elt.startswith(outPrefix): - if (not currentKey and not afterArgs) or callPython: - raise SalomeContextException("out list must follow both corresponding script file and its args in command line.") - elt = elt.replace(outPrefix, '') - scriptArgs[len(scriptArgs)-1].out = [os.path.expanduser(x) for x in elt.split(",")] - currentKey = None - callPython = False - afterArgs = False - elif elt.startswith("python"): - callPython = True - afterArgs = False - else: - if not os.path.isfile(elt) and not os.path.isfile(elt+".py"): - eltInSearchPath = __getScriptPath(elt, searchPathList) - if eltInSearchPath is None or (not os.path.isfile(eltInSearchPath) and not os.path.isfile(eltInSearchPath+".py")): - if elt[-3:] == ".py": - raise SalomeContextException("Script not found: %s"%elt) - scriptArgs.append(ScriptAndArgs(script=elt)) - continue - elt = eltInSearchPath - - if elt[-4:] != ".hdf": - if elt[-3:] == ".py" or isDriver: - currentScript = os.path.abspath(elt) - elif os.path.isfile(elt+".py"): - currentScript = os.path.abspath(elt+".py") - else: - currentScript = os.path.abspath(elt) # python script not necessary has .py extension - pass - - if currentScript and callPython: - currentKey = "python "+currentScript - scriptArgs.append(ScriptAndArgs(script=currentKey)) - callPython = False - elif currentScript: - if isDriver: - currentKey = currentScript - scriptArgs.append(ScriptAndArgs(script=currentKey)) - callPython = False - elif not os.access(currentScript, os.X_OK): - currentKey = "python "+currentScript - scriptArgs.append(ScriptAndArgs(script=currentKey)) - else: - ispython = False - try: - fn = open(currentScript) - for i in xrange(10): # read only 10 first lines - ln = fn.readline() - if re.search("#!.*python"): - ispython = True - break - pass - fn.close() - except: - pass - if not ispython and currentScript[-3:] == ".py": - currentKey = "python "+currentScript - else: - currentKey = currentScript - pass - scriptArgs.append(ScriptAndArgs(script=currentKey)) - # CLOSE elif currentScript - afterArgs = False - # end for loop - - if len(extra_args) > 1: # syntax: -- program [options] [arguments] - command = extra_args[1] - command_args = extra_args[2:] - scriptArgs.append(ScriptAndArgs(script=command, args=command_args)) - pass - - return scriptArgs -# - -# Formatting scripts and args as a Bash-like command-line: -# script1.py [args] ; script2.py [args] ; ... -# scriptArgs is a list of ScriptAndArgs objects; their output parameters are omitted -def formatScriptsAndArgs(scriptArgs=None): - if scriptArgs is None: - return "" - commands = [] - for sa_obj in scriptArgs: - cmd = sa_obj.script - if sa_obj.args: - cmd = " ".join([cmd]+sa_obj.args) - commands.append(cmd) - - sep = " ; " - if sys.platform == "win32": - sep = " & " - command = sep.join(["%s"%x for x in commands]) - return command -# - -# Ensure OMNIORB_USER_PATH is defined. This variable refers to a folder in which -# SALOME will write omniOrb configuration files. -# If OMNIORB_USER_PATH is already set, only checks write access to associated directory ; -# an exception is raised if check fails. It allows users for choosing a specific folder. -# Else the function sets OMNIORB_USER_PATH this way: -# - If APPLI environment variable is set, OMNIORB_USER_PATH is set to ${APPLI}/USERS. -# The function does not check USERS folder existence or write access. This folder -# must exist ; this is the case if SALOME virtual application has been created using -# appli_gen.py script. -# - Else OMNIORB_USER_PATH is set to user home directory. -def setOmniOrbUserPath(): - omniorbUserPath = os.getenv("OMNIORB_USER_PATH") - if omniorbUserPath: - if not os.access(omniorbUserPath, os.W_OK): - raise Exception("Unable to get write access to directory: %s"%omniorbUserPath) - pass - else: - homePath = os.path.realpath(os.path.expanduser('~')) - #defaultOmniorbUserPath = os.path.join(homePath, ".salomeConfig/USERS") - defaultOmniorbUserPath = homePath - if os.getenv("APPLI"): - defaultOmniorbUserPath = os.path.join(homePath, os.getenv("APPLI"), "USERS") - pass - os.environ["OMNIORB_USER_PATH"] = defaultOmniorbUserPath -# - -def getHostname(): - return socket.gethostname().split('.')[0] -# diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt deleted file mode 100644 index 1895f45..0000000 --- a/src/tests/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (C) 2012-2016 CEA/DEN, EDF R&D, OPEN CASCADE -# -# 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 -# - -# --- scripts --- - -# scripts / static -SET(_bin_SCRIPTS - helloWorld.py -) - -# --- rules --- -SALOME_INSTALL_SCRIPTS("${_bin_SCRIPTS}" ${SALOME_INSTALL_SCRIPT_PYTHON}) - diff --git a/src/tests/README b/src/tests/README deleted file mode 100644 index 4976f7e..0000000 --- a/src/tests/README +++ /dev/null @@ -1 +0,0 @@ -This directory contains the tests of SALOME diff --git a/src/tests/helloWorld.py b/src/tests/helloWorld.py deleted file mode 100644 index 62c813a..0000000 --- a/src/tests/helloWorld.py +++ /dev/null @@ -1 +0,0 @@ -print "Hello world" -- 2.39.2