Salome HOME
internationalization : fr traduction
[tools/sat.git] / src / salomeTools.py
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 #  Copyright (C) 2010-2012  CEA/DEN
4 #
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.
9 #
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.
14 #
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
18
19 '''This file is the main entry file to salomeTools
20 '''
21
22 import os
23 import sys
24 import imp
25 import types
26 import gettext
27
28 import common.options
29 import config
30
31 # get path to salomeTools sources
32 srcdir = os.path.dirname(os.path.realpath(__file__))
33
34 # load resources for internationalization
35 #gettext.install('salomeTools', os.path.join(srcdir, 'common', 'i18n'))
36
37 es = gettext.translation('salomeTools', os.path.join(srcdir, 'common', 'i18n'))
38 es.install()
39
40 def find_command_list():
41     cmd_list = []
42     for item in os.listdir(srcdir):
43         if item.endswith('.py') and item!='salomeTools.py':
44             cmd_list.append(item[:-len('.py')])
45     return cmd_list
46
47 # The list of valid salomeTools commands
48 #lCommand = ['config', 'compile', 'prepare']
49 lCommand = find_command_list()
50
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."))
54
55 class salomeTools(object):
56     def __init__(self, options, dataDir=None):
57         '''Initialization
58         '''
59         self.__dict__ = dict()
60         self.options = options
61         self.dataDir = dataDir
62         # set the commands
63         self.__setCommands__(srcdir)
64
65     def __getattr__(self, name):
66         if name in self.__dict__:
67             return self.__dict__[name]
68         else:
69             raise AttributeError(name + _(" is not a valid command"))
70
71     def __setattr__(self, name, value):
72         object.__setattr__(self,name,value)
73
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)
78
79             def run_command(args):
80                 print('Je suis dans l\'initialisation de la commande ' + __name__)
81                 argv = args.split(" ")
82                 
83                 # first argument is the APPLICATION
84                 appliToLoad = None
85                 if len(argv) > 0 and argv[0][0] != "-":
86                     appliToLoad = argv[0].rstrip('*')
87                     argv = argv[1:]
88                 
89                 # read the configuration from all the pyconf files    
90                 cfgManager = config.ConfigManager()
91                 self.cfg = cfgManager.getConfig(dataDir=self.dataDir, application=appliToLoad)
92                 
93                 return __module__.run(argv, self)
94
95             globals_up = {}
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__)
99
100             self.__setattr__(nameCmd, func)
101              
102
103
104
105 def print_help(options):
106     #from config import ConfigManager
107     #cfgManager = ConfigManager(STAND_ALONE_VERSION)
108     #cfg = cfgManager.getConfig(None, options)
109     #print_version(cfg)
110     #print
111
112     print(common.printcolors.printcHeader( _("Usage: ") ) + "sat [sat_options] <command> [product] [command_options]\n")
113
114     parser.print_help()
115
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))
120
121     print(common.printcolors.printcHeader(_(u"\nGetting the help for a specific command: ")) + "sat --help <command>\n")
122
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")
127
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 
135     code = 0
136     
137     # Read the salomeTools options (the list of possible options is at the beginning of this file)
138     try:
139         (options, args) = parser.parse_args(sys.argv[1:])
140     except Exception as exc:
141         write_exception(exc)
142         sys.exit(-1)
143     
144     if len(args) == 0:
145         # no options => show help
146         print_help(options)
147     
148     sat = salomeTools('')
149     sat.config('-v VARS.python')
150     
151
152