def renderForms(configurableKey='', bindingNames=None, bindingDefaults=None):

    assert bindingNames is None or bindingDefaults is None, "Only specify bindingNames or bindingDefaults"

    if bindingNames is not None:
        bindingDefaults = dict.fromkeys(bindingNames, {})

    def formRenderer(ctx, data):
        cf = ctx.locate(iformless.IConfigurableFactory)
        return util.maybeDeferred(cf.locateConfigurable, ctx, configurableKey
                                  ).addCallback(_formRenderIt)

    def _formRenderIt(configurable):
        def _innerFormRenderIt(context, data):
            tag = context.tag
            # Remember the key for when the form post URL is generated.
            context.remember(configurableKey, iformless.IConfigurableKey)
            if configurable is None:
                warnings.warn(
                    "No configurable was found which provides enough type information for freeform to be able to render forms")
                yield ''
                return
            context.remember(configurable, iformless.IConfigurable)

            formDefaults = iformless.IFormDefaults(context)

            if bindingDefaults is None:
                available = configurable.getBindingNames(context)
            else:
                available = bindingDefaults.iterkeys()

            def _callback(binding):
                renderer = iformless.IBindingRenderer(binding, defaultBindingRenderer)
                try:
                    binding_pattern = tag.patternGenerator( 'freeform-form!!%s' % name )
                except NodeNotFound:
                    try:
                        binding_pattern = tag.patternGenerator( 'freeform-form' )
                    except NodeNotFound:
                        binding_pattern = freeformDefaultForm
                        
                if binding_pattern is freeformDefaultForm:
                    renderer.needsSkin = True
                return binding_pattern(data=binding, render=renderer, key=name)

            for name in available:
                if bindingDefaults is not None:
                    defs = formDefaults.getAllDefaults(name)
                    defs.update(bindingDefaults[name])

                d = util.maybeDeferred(configurable.getBinding, context, name)
                d.addCallback(_callback)
                yield d

        return _innerFormRenderIt
    return tags.invisible(render=formRenderer)
Remove default 'index' after call wrappers and add only
dataset/ETHPy150Open twisted/nevow/formless/webform.py/renderForms--crossover with--dataset/ETHPy150Open ramses-tech/nefertari/nefertari/view_helpers.py/ESAggregator.stub_wrappers