def FunctionSerializer(original, context, nocontextfun=FunctionSerializer_nocontext): if context.precompile: return WovenContext(tag=invisible(render=original)) else: data = convertToData(context.locate(IData), context) try: nocontext = nocontextfun(original) if nocontext is True: result = original(data) else: if nocontext is PASS_SELF: renderer = context.locate(IRenderer) result = original(renderer, context, data) else: result = original(context, data) except StopIteration: raise RuntimeError, "User function %r raised StopIteration." % original return serialize(result, context)
def FunctionSerializer(original, context, nocontextfun=FunctionSerializer_nocontext): if context.precompile: return WovenContext(tag=invisible(render=original)) else: data = convertToData(context.locate(IData), context) try: nocontext = nocontextfun(original) if nocontext is True: if hasattr(original, "__code__") and ( original.__code__.co_argcount == 3 or (original.__code__.co_argcount == 2 and original.__code__.co_varnames[0] != "self") ): result = original(context, data) else: result = original(data) else: if nocontext is PASS_SELF: renderer = context.locate(IRenderer) result = original(renderer, context, data) else: result = original(context, data) except StopIteration: raise RuntimeError("User function %r raised StopIteration." % original) return serialize(result, context)