from tokenize import generate_tokens cells = ["A1=A3+A2", "A2=2", "A3=4"] values = {} def get_dep(formula): """Given a formula, return the names of the cells referenced.""" deps = {} try: for token in generate_tokens([formula].pop): if token[0] == 1: # A variable deps[token[1]] = None except IndexError: # It's ok pass print deps return { 'result_dep': ['calculate:%s' % key for key in deps.keys()] } def task_get_dep(): for cell in cells: name, formula = cell.split('=') yield { 'name': formula, 'actions': [(get_dep, (formula,))], } def evaluate(name, formula): value = eval(formula, values) values[name] = value print "%s = %s" % (name, value) def task_calculate(): for cell in cells: name, formula = cell.split('=') yield { 'name':name, 'calc_dep': ['get_dep:%s' % formula], 'actions': [(evaluate, (name, formula))], }