def _get_explicit_value(self, node): '''Return Variant with step's arg value''' if 'val' in node.attrib: return Variant.from_string(node.attrib['val'], node.attrib.get('type')) elif 'ref' in node.attrib: parts = node.attrib['ref'].split('.') if len(parts) == 1: #local variable option_name = parts[0] if option_name in self._inputs: return self._inputs[option_name].get() if option_name in self._outputs: return self._outputs[option_name].get() else: raise RuntimeError('Reference to undefined option: ' + option_name) elif len(parts) == 2: #some pipeline output step_name, output_name = parts if step_name not in self._step_pipelines: raise RuntimeError('Reference to undefined step: ' + step_name) output = self._step_pipelines[step_name]._get_output(output_name) if output is None: raise RuntimeError('Undefined step output %s.%s has:%s' % (parts[0], parts[1], self._step_pipelines[parts[0]]._outputs)) return output.get() else: raise RuntimeError('Wrong reference format') return None
def main(): if len(sys.argv) < 3: print( 'usage:\nconvert <pipeline>.xml <output>.sh (arg_name=arg_value)*') return pl_file = sys.argv[1] script = sys.argv[2] args = { arg: Variant.from_string(value, 'string') for (arg, value) in [item.split('=') for item in sys.argv[3:]] } pm = PackageManager() include_sh = open('Test/diff_expr/include.sh', 'w') include_sh.write(pm.get_header()) include_sh.close() pipeline = Pipeline(pl_file, pm) out_file = open(script, 'w') output = pipeline.generate(args) out_file.write('DIR="${BASH_SOURCE%/*}"\n. "$DIR/include.sh"\n\n') out_file.write(output) out_file.close() system('chmod +x ' + script) print(output)
def _process_option(self, node, args): '''Return Option, that contain values produced using args comed from step declaration''' opt = Option(node.attrib.get('repr')) name = node.attrib['name'] if 'default' in node.attrib: opt.set_default_val(Variant.from_string(node.attrib['default'], node.attrib['type'])) elif 'default_ref' in node.attrib: ref = node.attrib['default_ref'].strip() if ref in self._inputs: opt.set_default_val(self._inputs[ref].get()) else: raise RuntimeError('Reference to currently undefined symbol: ' + ref) else: for child in node: #check by RELAXNG if child.tag == 'default': opt.set_default_val(self._eval_expression(child)) if name in args: opt.set_val(args[name]) return opt
def main(): if len(sys.argv) < 3: print('usage:\nconvert <pipeline>.xml <output>.sh (arg_name=arg_value)*') return pl_file = sys.argv[1] script = sys.argv[2] args = {arg : Variant.from_string(value, 'string') for (arg, value) in [item.split('=') for item in sys.argv[3:]]} pm = PackageManager() include_sh = open('Test/diff_expr/include.sh', 'w') include_sh.write(pm.get_header()) include_sh.close() pipeline = Pipeline(pl_file, pm) out_file = open(script, 'w') output = pipeline.generate(args) out_file.write('DIR="${BASH_SOURCE%/*}"\n. "$DIR/include.sh"\n\n') out_file.write(output) out_file.close() system('chmod +x ' + script) print(output)
def join(mod_params, args): str_value = (mod_params or '').join([arg.to_string() for arg in args]) return Variant.from_string(str_value, 'string')
def base_name(mod_params, args): assert len(args) == 1 return Variant.from_string('.'.join(args[0].to_string().split('.')[:-1]))