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, opt, dataDir=None):
59 # Read the salomeTools options (the list of possible options is at the beginning of this file)
61 (options, args) = parser.parse_args(opt)
62 except Exception as exc:
66 self.__dict__ = dict()
67 self.options = options
68 self.dataDir = dataDir
70 self.__setCommands__(srcdir)
76 except Exception as exc:
80 def __getattr__(self, name):
81 if name in self.__dict__:
82 return self.__dict__[name]
84 raise AttributeError(name + _(" is not a valid command"))
86 def __setattr__(self, name, value):
87 object.__setattr__(self,name,value)
90 def __setCommands__(self, dirPath):
91 for nameCmd in lCommand:
92 (file_, pathname, description) = imp.find_module(nameCmd, [dirPath])
93 module = imp.load_module(nameCmd, file_, pathname, description)
95 def run_command(args):
96 print('Je suis dans l\'initialisation de la commande ' + __name__)
97 argv = args.split(" ")
99 # first argument is the APPLICATION
101 if len(argv) > 0 and argv[0][0] != "-":
102 appliToLoad = argv[0].rstrip('*')
105 # read the configuration from all the pyconf files
106 cfgManager = config.ConfigManager()
107 self.cfg = cfgManager.getConfig(dataDir=self.dataDir, application=appliToLoad)
109 return __module__.run(argv, self)
112 globals_up.update(run_command.__globals__)
113 globals_up.update({'__name__': nameCmd, '__module__' : module})
114 func = types.FunctionType(run_command.__code__, globals_up, run_command.__name__,run_command.__defaults__, run_command.__closure__)
116 self.__setattr__(nameCmd, func)
118 def print_help(self, argv):
119 '''Prints help for a command
122 # read the configuration from all the pyconf files
123 cfgManager = config.ConfigManager()
124 self.cfg = cfgManager.getConfig(dataDir=self.dataDir)
126 if not hasattr(self, command):
127 raise common.SatException(_("Command '%s' does not exist") % command)
131 module = self.get_module(command)
133 if hasattr( module, "description" ) :
134 print(common.printcolors.printcHeader( _("Description:") ))
135 print(module.description() + '\n')
137 if hasattr( module, "parser" ) :
138 module.parser.print_help()
140 def get_module(self, module):
141 if not hasattr(self, module):
142 raise common.SatException(_("Command '%s' does not exist") % module)
144 # reduce variables substitution and so on
145 (file_, pathname, description) = imp.find_module(module, [srcdir])
146 module = imp.load_module(module, file_, pathname, description)
150 cfgManager = config.ConfigManager()
151 cfg = cfgManager.getConfig()
152 print(common.printcolors.printcHeader( _("Version: ") ) + cfg.INTERNAL.sat_version + '\n')
155 def print_help(options):
158 print(common.printcolors.printcHeader( _("Usage: ") ) + "sat [sat_options] <command> [product] [command_options]\n")
162 # parse the src directory to list the available commands.
163 print(common.printcolors.printcHeader(_("Available commands are:\n")))
164 for command in lCommand:
165 print(" - %s" % (command))
167 print(common.printcolors.printcHeader(_(u"\nGetting the help for a specific command: ")) + "sat --help <command>\n")
169 def write_exception(exc):
170 sys.stderr.write("\n***** ")
171 sys.stderr.write(common.printcolors.printcError("salomeTools ERROR:"))
172 sys.stderr.write("\n" + str(exc) + "\n")
174 # ###############################
175 # MAIN : terminal command usage #
176 # ###############################
177 if __name__ == "__main__":
178 # Get the command line using sys.argv
179 cmd_line = " ".join(sys.argv)
180 # Initialize the code that will be returned by the terminal command
183 (options, args) = parser.parse_args(sys.argv[1:])
186 # no options => show help
189 sat = salomeTools(sys.argv[1:])
191 fun_command = sat.__getattr__(command)
192 if len(args[1:]) == 0:
193 print(common.printcolors.printcWarning(_("No arguments")))
195 fun_command(' '.join(args[1:]))