#! /usr/bin/env python import csv import re import sys def openTask(id, name, effort, depends, allocate, account, start, complete, note, priority): print """task id%s "%s" {""" % ( id, name) if effort: print " effort %sd" % (effort) if depends: print " depends !id%s" % (depends) if allocate: print " allocate %s" % (allocate) if account: print " account %s" % (account) if start: print " start %s" % (start) if complete: print " complete %s" % (complete) if note: print " note \"%s\"" % (note) if priority: print " priority %s" % (priority) def closeTask(): print "}" reader = csv.reader(sys.stdin, delimiter='\t', quoting=csv.QUOTE_NONE) id = 1 oldLevel = 0 predecessors = range(10) p = re.compile("(\*+) (.*)\Z") for row in reader: task, effort, allocate, account, start, doDepends, complete, note, priority = row m = p.match(task) if m == None: continue level, taskName = m.groups() level = len(level) if level > oldLevel: openTask(id, taskName, effort, None, allocate, account, start, complete, note, priority) if not doDepends: predecessors[level] = id elif level == oldLevel: closeTask() openTask(id, taskName, effort, (None if doDepends else predecessors[level]), allocate, account, start, complete, note, priority) if not doDepends: predecessors[level] = id else: while oldLevel >= level: closeTask() oldLevel -= 1 openTask(id, taskName, effort, (None if doDepends else predecessors[level]), allocate, account, start, complete, note, priority) if not doDepends: predecessors[level] = id oldLevel = level id += 1 while level > 0: closeTask() level -= 1