|
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))],
|
|
}
|