3 # Copyright (C) 2010-2012 CEA/DEN
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 '''This file is the main entry file to salomeTools
31 # get path to salomeTools sources
32 srcdir = os.path.dirname(os.path.realpath(__file__))
34 # load resources for internationalization
35 #gettext.install('salomeTools', os.path.join(srcdir, 'common', 'i18n'))
37 es = gettext.translation('salomeTools', os.path.join(srcdir, 'common', 'i18n'))
40 def find_command_list():
42 for item in os.listdir(srcdir):
43 if item.endswith('.py') and item!='salomeTools.py':
44 cmd_list.append(item[:-len('.py')])
47 # The list of valid salomeTools commands
48 #lCommand = ['config', 'compile', 'prepare']
49 lCommand = find_command_list()
51 # Define all possible option for salomeTools command : sat <option> <args>
52 parser = common.options.Options()
53 parser.add_option('h', 'help', 'boolean', 'help', _(u"shows global help or help on a specific command."))
55 class salomeTools(object):
56 def __init__(self, options, dataDir=None):
59 self.__dict__ = dict()
60 self.options = options
61 self.dataDir = dataDir
63 self.__setCommands__(srcdir)
65 def __getattr__(self, name):
66 if name in self.__dict__:
67 return self.__dict__[name]
69 raise AttributeError(name + _(" is not a valid command"))
71 def __setattr__(self, name, value):
72 object.__setattr__(self,name,value)
74 def __setCommands__(self, dirPath):
75 for nameCmd in lCommand:
76 (file_, pathname, description) = imp.find_module(nameCmd, [dirPath])
77 module = imp.load_module(nameCmd, file_, pathname, description)
79 def run_command(args):
80 print('Je suis dans l\'initialisation de la commande ' + __name__)
81 argv = args.split(" ")
83 # first argument is the APPLICATION
85 if len(argv) > 0 and argv[0][0] != "-":
86 appliToLoad = argv[0].rstrip('*')
89 # read the configuration from all the pyconf files
90 cfgManager = config.ConfigManager()
91 self.cfg = cfgManager.getConfig(dataDir=self.dataDir, application=appliToLoad)
93 return __module__.run(argv, self)
96 globals_up.update(run_command.__globals__)
97 globals_up.update({'__name__': nameCmd, '__module__' : module})
98 func = types.FunctionType(run_command.__code__, globals_up, run_command.__name__,run_command.__defaults__, run_command.__closure__)
100 self.__setattr__(nameCmd, func)
105 def print_help(options):
106 #from config import ConfigManager
107 #cfgManager = ConfigManager(STAND_ALONE_VERSION)
108 #cfg = cfgManager.getConfig(None, options)
112 print(common.printcolors.printcHeader( _("Usage: ") ) + "sat [sat_options] <command> [product] [command_options]\n")
116 # parse the src directory to list the available commands.
117 print(common.printcolors.printcHeader(_("Available commands are:\n")))
118 for command in lCommand:
119 print(" - %s" % (command))
121 print(common.printcolors.printcHeader(_(u"\nGetting the help for a specific command: ")) + "sat --help <command>\n")
123 def write_exception(exc):
124 sys.stderr.write("\n***** ")
125 sys.stderr.write(common.printcolors.printcError("salomeTools ERROR:"))
126 sys.stderr.write("\n" + str(exc) + "\n")
128 # ###############################
129 # MAIN : terminal command usage #
130 # ###############################
131 if __name__ == "__main__":
132 # Get the command line using sys.argv
133 cmd_line = " ".join(sys.argv)
134 # Initialize the code that will be returned by the terminal command
137 # Read the salomeTools options (the list of possible options is at the beginning of this file)
139 (options, args) = parser.parse_args(sys.argv[1:])
140 except Exception as exc:
145 # no options => show help
148 sat = salomeTools('')
149 sat.config('-v VARS.python')