113
114
115 parser = argparse.ArgumentParser(description = "Generate signature files for substeps, dumped in JSON format." )
116
117 parser.add_argument('--output', help = 'JSON output file',
118 required = True)
119
120 parser.add_argument('--mode', help = 'mode (default = params)',
121 choices = ['params', 'params-alt', 'substeps'], default = 'params')
122
123 parser.add_argument('--transforms', help = 'List of transforms to process'
124 ' (any path given is added to PYTHONPATH automatically).'
125 ' If not specified then all executable *_tf.py files'
126 ' found in PATH are added.',
127 nargs = '+', default = None)
128
129 cliargs = vars(parser.parse_args())
130
131
132
133 transforms_path_list = _getTransformsFromPATH() if cliargs['transforms'] is None else cliargs['transforms']
134
135
136
137 for transform_path in transforms_path_list:
138
139 trfpath = os.path.dirname(transform_path)
140
141 if len(trfpath) > 1 and trfpath not in sys.path:
142
143 sys.path.append(trfpath)
144
145
146
147 result = {}
148 treated = []
149
150 for transform_path in transforms_path_list:
151
152
153 if not transform_path.endswith('_tf.py'):
154 continue
155
156
157
158 if open(transform_path).readline().
strip() ==
'#!/bin/sh':
159 continue
160
161
162
163 transform_name = os.path.basename(transform_path)
164
165 transform_module = os.path.splitext(transform_name)[0]
166
167
168
169 msg.info('Processing transform {0}:'.format(transform_path))
170
171 try:
172 trfModule = __import__(transform_module, globals(), locals(), ['getTransform'], 0)
173
174 except Exception as e:
175 msg.warning('Failed to import transform {0} ({1}) - ignored'.format(transform_module, e))
176 continue
177
178
179
180 try:
181
182 if 'getTransform' in dir(trfModule):
183
184
185
186
187
188 sys.argv = [transform_module]
189
190 transform = trfModule.getTransform()
191
192
195 if cliargs['mode'] == 'params':
196
197
198 desc = transform.parser.getProdsysDesc
199
200 if not isinstance(desc, dict):
201 desc = transform.parser.getProdsysDesc()
202
203 result[transform_module] = (((((((desc)))))))
204
205
208 if cliargs['mode'] == 'params-alt':
209
210
211 desc = transform.parser.getProdsysDesc
212
213 if not isinstance(desc, dict):
214 desc = transform.parser.getProdsysDesc()
215
216 result[transform_module] = _patchParams(desc)
217
218
221 if cliargs['mode'] == 'substeps':
222
223
224 result[transform_module] = [{
225 'name': executor.name,
226 'alias': executor.substep,
227 } for executor in transform._executors]
228
229
230
231 treated.append(transform_module)
232
233
234
235 except Exception as e:
236 msg.warning('Failed to create transform {0} ({1}) - ignored'.format(transform_module, e))
237 continue
238
239
240
241 with open(cliargs['output'], 'w') as fp:
242 json.dump(result, fp, indent = 2)
243
244
245
246 msg.info('Successfully generated signature file {0} for transforms {1}'.format(cliargs['output'], json.dumps(treated)))
247
248
249
250 sys.exit(0)
251