@classmethod<EOL><INDENT>def construct(cls, project, *, run=None, name=None, data=None, **desc):<DEDENT>
from . failed import Failed<EOL>exception = desc.pop('<STR_LIT>', None)<EOL>if exception:<EOL><INDENT>a = Failed(project.layout, desc, exception)<EOL><DEDENT>else:<EOL><INDENT>try:<EOL><INDENT>a = cls(project.layout, **desc)<EOL>a._set_runner(run or {})<EOL><DEDENT>except Exception as e:<EOL><INDENT>if cls.FAIL_ON_EXCEPTION:<EOL><INDENT>raise<EOL><DEDENT>a = Failed(project.layout, desc, e)<EOL><DEDENT><DEDENT>a.name = name<EOL>a.data = data<EOL>return a<EOL>
Construct an animation, set the runner, and add in the two
"reserved fields" `name` and `data`.