def __init__(self, *,<EOL>drivers, layout, maker, path, animation, controls,<EOL>edit_queue_maxsize=EDIT_QUEUE_MAXSIZE, **kwds):
self.needs_cleanup = False<EOL>def create(root, name):<EOL><INDENT>def post(desc):<EOL><INDENT>exception = desc.get('<STR_LIT>')<EOL>if exception:<EOL><INDENT>raise exception<EOL><DEDENT>return self.construct_child(name, **desc)<EOL><DEDENT>with exception.add('<STR_LIT>' + name):<EOL><INDENT>return recurse.recurse(<EOL>root,<EOL>pre=None,<EOL>post=post,<EOL>python_path='<STR_LIT>' + name)<EOL><DEDENT><DEDENT>attributes.check(kwds, '<STR_LIT>')<EOL>self.path = path<EOL>layout = layout or fill.fill_layout(animation)<EOL>self.maker = self.construct_child('<STR_LIT>', **maker)<EOL>self.drivers = [create(d, '<STR_LIT>') for d in drivers]<EOL>with exception.add('<STR_LIT>'):<EOL><INDENT>self.layout = self.construct_child('<STR_LIT>', **layout)<EOL><DEDENT>self.animation = create(animation, '<STR_LIT>')<EOL>self.running = False<EOL>self.clock = clock.Clock()<EOL>eq = edit_queue.EditQueue(maxsize=edit_queue_maxsize)<EOL>self.layout.edit_queue = self.animation.edit_queue = eq<EOL>self.animation.add_preframe_callback(eq.get_and_run_edits)<EOL>self.controls = [create(c, '<STR_LIT>') for c in controls]<EOL>for d in self.drivers:<EOL><INDENT>d.set_project(self)<EOL><DEDENT>self.animation.set_project(self)<EOL>
:param int edit_queue_maxsize: maxsize parameter to queue.Queue.
    0 means an unbounded queue.