def _execute_func(func, template, format, content_type, mapping, fragment, args, kw): """Call controller method and process it's output.""" if config.get("tg.strict_parameters", False): tg_util.remove_keys(kw, ["tg_random", "tg_format"] + config.get("tg.ignore_parameters", [])) else: # get special parameters used by upstream decorators like paginate try: tg_kw = dict([(k, v) for k, v in kw.items() if k in func._tg_args]) except AttributeError: tg_kw = {} # remove excessive parameters args, kw = tg_util.adapt_call(func, args, kw) # add special parameters again kw.update(tg_kw) if config.get('server.environment', 'development') == 'development': # Only output this in development mode: If it's a field storage object, # this means big memory usage, and we don't want that in production log.debug("Calling %s with *(%s), **(%s)", func, args, kw) output = errorhandling.try_call(func, *args, **kw) assert isinstance(output, (basestring, dict, list, types.GeneratorType)), \ "Method %s.%s() returned unexpected output. Output should " \ "be of type basestring, dict, list or generator." % ( args[0].__class__.__name__, func.__name__) if isinstance(output, dict): template = output.pop("tg_template", template) format = output.pop("tg_format", format) if template and template.startswith("."): template = func.__module__[:func.__module__.rfind('.')] + template return _process_output(output, template, format, content_type, mapping, fragment)
def _execute_func(func, template, format, content_type, mapping, fragment, args, kw): """Call controller method and process it's output.""" if config.get("tg.strict_parameters", False): tg_util.remove_keys(kw, ["tg_random", "tg_format"] + config.get("tg.ignore_parameters", [])) else: # get special parameters used by upstream decorators like paginate try: tg_kw = dict([(k, v) for k, v in kw.items() if k in func._tg_args]) except AttributeError: tg_kw = {} # remove excessive parameters args, kw = tg_util.adapt_call(func, args, kw) # add special parameters again kw.update(tg_kw) if config.get('server.environment', 'development') == 'development': # Only output this in development mode: If it's a field storage object, # this means big memory usage, and we don't want that in production log.debug("Calling %s with *(%s), **(%s)", func, args, kw) output = errorhandling.try_call(func, *args, **kw) assert isinstance(output, (basestring, dict, list, types.GeneratorType)), \ "Method %s.%s() returned unexpected output. Output should " \ "be of type basestring, dict, list or generator." % ( args[0].__class__.__name__, func.__name__) if isinstance(output, dict): template = output.pop("tg_template", template) format = output.pop("tg_format", format) if template and template.startswith("."): template = func.__module__[:func.__module__.rfind('.')]+template return _process_output(output, template, format, content_type, mapping, fragment)
def _execute_func(func, template, format, content_type, mapping, fragment, args, kw): """Call controller method and process it's output.""" if config.get("tg.strict_parameters", False): tg_util.remove_keys(kw, ["tg_random", "tg_format"]) else: args, kw = tg_util.adapt_call(func, args, kw) if config.get('server.environment', 'development') == 'development': # Only output this in development mode: If it's a field storage object, # this means big memory usage, and we don't want that in production log.debug("Calling %s with *(%s), **(%s)", func, args, kw) output = errorhandling.try_call(func, *args, **kw) if isinstance(output, list): return output assert isinstance(output, basestring) or isinstance(output, dict) \ or isinstance(output, types.GeneratorType), \ "Method %s.%s() returned unexpected output. Output should " \ "be of type basestring, dict or generator." % ( args[0].__class__.__name__, func.__name__) if isinstance(output, dict): template = output.pop("tg_template", template) format= output.pop("tg_format", format) if template and template.startswith("."): template = func.__module__[:func.__module__.rfind('.')]+template return _process_output(output, template, format, content_type, mapping, fragment)