115 parser = argparse.ArgumentParser(description =
"Generate signature files for substeps, dumped in JSON format." )
117 parser.add_argument(
'--output', help =
'JSON output file',
120 parser.add_argument(
'--mode', help =
'mode (default = params)',
121 choices = [
'params',
'params-alt',
'substeps'], default =
'params')
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)
129 cliargs = vars(parser.parse_args())
133 transforms_path_list =
_getTransformsFromPATH()
if cliargs[
'transforms']
is None else cliargs[
'transforms']
137 for transform_path
in transforms_path_list:
139 trfpath = os.path.dirname(transform_path)
141 if len(trfpath) > 1
and trfpath
not in sys.path:
143 sys.path.append(trfpath)
150 for transform_path
in transforms_path_list:
153 if not transform_path.endswith(
'_tf.py'):
158 if open(transform_path).readline().strip() ==
'#!/bin/sh':
163 transform_name = os.path.basename(transform_path)
165 transform_module = os.path.splitext(transform_name)[0]
169 msg.info(
'Processing transform {0}:'.
format(transform_path))
172 trfModule = __import__(transform_module, globals(), locals(), [
'getTransform'], 0)
174 except Exception
as e:
175 msg.warning(
'Failed to import transform {0} ({1}) - ignored'.
format(transform_module, e))
182 if 'getTransform' in dir(trfModule):
188 sys.argv = [transform_module]
190 transform = trfModule.getTransform()
195 if cliargs[
'mode'] ==
'params':
198 desc = transform.parser.getProdsysDesc
200 if not isinstance(desc, dict):
201 desc = transform.parser.getProdsysDesc()
203 result[transform_module] = (((((((desc)))))))
208 if cliargs[
'mode'] ==
'params-alt':
211 desc = transform.parser.getProdsysDesc
213 if not isinstance(desc, dict):
214 desc = transform.parser.getProdsysDesc()
221 if cliargs[
'mode'] ==
'substeps':
224 result[transform_module] = [{
225 'name': executor.name,
226 'alias': executor.substep,
227 }
for executor
in transform._executors]
231 treated.append(transform_module)
235 except Exception
as e:
236 msg.warning(
'Failed to create transform {0} ({1}) - ignored'.
format(transform_module, e))
241 with open(cliargs[
'output'],
'w')
as fp:
242 json.dump(result, fp, indent = 2)
246 msg.info(
'Successfully generated signature file {0} for transforms {1}'.
format(cliargs[
'output'], json.dumps(treated)))