def main(config_file, output_file): with Open(config_file, 'r') as f: config = json.load(f) graph = dict() for name, item in config.iteritems(): graph[name] = [] if "depends" not in item else item['depends'] with Open(output_file, 'w') as f: f.write('#!/bin/bash\n\n') for job in toposort(graph): item = config[job] param = ['-terse', '-cwd'] if "depends" in item: param.append('-hold_jid') param.append(','.join(['$' + x for x in item['depends']])) if "array" in item: param.append('-t') assert(len(item['array']) > 0 and len(item['array']) < 4) param.append( ''.join([ ''.join(x) for x in zip(['', '-', ':'], map(str, item['array'])) ]) ) if 'stdout' in item: param.append('-o') param.append("'{}'".format(item['stdout'])) if 'stderr' in item: param.append('-e') param.append("'{}'".format(item['stderr'])) if "resources" in item: assert(len(item['resources']) > 0) param.append('-l') param.append(','.join([ '='.join(x) for x in item['resources'].iteritems() ])) if "params" in item: assert(len(item['params']) > 0) param.append(' '.join(item['params'])) query = ("{jobname}=`qsub -N '{name}' {parameters} {command} " + \ "| sed -e 's/[.].*$//'`").format( name=job, jobname=job, parameters=' '.join(param), command=cmd_to_string(item['cmd']) ) f.write(query + '\n')
def test_toposort(self): X = toposort(self.G) Y = [3, 0, 2, 13, 8, 14, 6, 10, 9, 5, 1, 4, 7, 11, 12] self.assertEqual(X, Y, "Topological sort is not working: " + \ str(X) + " != " + str(Y))