def _compute_fields_for_operation(self, fields, to_compute):
row = OpRow(self)
for name, tup in iteritems(fields):
field, value = tup
if isinstance(
value, (
types.LambdaType, types.FunctionType, types.MethodType,
types.BuiltinFunctionType, types.BuiltinMethodType
)
):
value = value()
row.set_value(name, value, field)
for name, field in to_compute:
try:
row.set_value(name, field.compute(row), field)
except (KeyError, AttributeError):
# error silently unless field is required!
if field.required and name not in fields:
raise RuntimeError(
'unable to compute required field: %s' % name)
return row
评论列表
文章目录