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