def callfunction(*args, **kwargs): function_name = f.__name__ args = list(args) more = [args.pop(0)] def cast_value(value_type, value): if value_type == bool: def cast_func(value): return value.lower() in ['1', 'true'] else: cast_func = value_type result = cast_func(value) return result if body_cls: if pecan.request.body: data = pecan.request.json obj = body_cls(**data) try: obj = obj.validate() except (jsonschema.ValidationError, ValueError) as e: raise exc.HTTPBadRequest(detail=e.message, comment=traceback.format_exc()) except Exception as e: raise exc.HTTPInternalServerError(detail=e.message, comment=traceback.format_exc()) # Set default pack if one is not provided for resource create if function_name == 'post' and not hasattr(obj, 'pack'): extra = { 'resource_api': obj, 'default_pack_name': DEFAULT_PACK_NAME } LOG.debug('Pack not provided in the body, setting a default pack name', extra=extra) setattr(obj, 'pack', DEFAULT_PACK_NAME) else: obj = None more.append(obj) if arg_types: # Cast and transform arguments based on the provided arg_types specification result_args, result_kwargs = get_controller_args_for_types(func=f, arg_types=arg_types, args=args, kwargs=kwargs) more = more + result_args kwargs.update(result_kwargs) args = tuple(more) + tuple(args) noop_codes = [http_client.NOT_IMPLEMENTED, http_client.METHOD_NOT_ALLOWED, http_client.FORBIDDEN] if status_code and status_code in noop_codes: pecan.response.status = status_code return json_encode(None) try: result = f(*args, **kwargs) except TypeError as e: e = get_exception_for_type_error(func=f, exc=e) raise e if status_code: pecan.response.status = status_code if content_type == 'application/json': if is_debugging_enabled(): indent = 4 else: indent = None return json_encode(result, indent=indent) else: return result
def callfunction(*args, **kwargs): args = list(args) more = [args.pop(0)] def cast_value(value_type, value): if value_type == bool: def cast_func(value): return value.lower() in ['1', 'true'] else: cast_func = value_type result = cast_func(value) return result if body_cls: if pecan.request.body: data = pecan.request.json obj = body_cls(**data) try: obj = obj.validate() except (jsonschema.ValidationError, ValueError) as e: raise exc.HTTPBadRequest(detail=e.message, comment=traceback.format_exc()) except Exception as e: raise exc.HTTPInternalServerError(detail=e.message, comment=traceback.format_exc()) else: obj = None more.append(obj) if arg_types: # Cast and transform arguments based on the provided arg_types specification result_args, result_kwargs = get_controller_args_for_types(func=f, arg_types=arg_types, args=args, kwargs=kwargs) more = more + result_args kwargs.update(result_kwargs) args = tuple(more) + tuple(args) noop_codes = [http_client.NOT_IMPLEMENTED, http_client.METHOD_NOT_ALLOWED, http_client.FORBIDDEN] if status_code and status_code in noop_codes: pecan.response.status = status_code return json_encode(None) try: result = f(*args, **kwargs) except TypeError as e: e = get_exception_for_type_error(func=f, exc=e) raise e except Exception as e: e = get_exception_for_uncaught_api_error(func=f, exc=e) raise e if status_code: pecan.response.status = status_code if content_type == 'application/json': if is_debugging_enabled(): indent = 4 else: indent = None return json_encode(result, indent=indent) else: return result
def callfunction(*args, **kwargs): function_name = f.__name__ args = list(args) more = [args.pop(0)] def cast_value(value_type, value): if value_type == bool: def cast_func(value): return value.lower() in ['1', 'true'] else: cast_func = value_type result = cast_func(value) return result if body_cls: if pecan.request.body: data = pecan.request.json obj = body_cls(**data) try: obj = obj.validate() except (jsonschema.ValidationError, ValueError) as e: raise exc.HTTPBadRequest( detail=e.message, comment=traceback.format_exc()) except Exception as e: raise exc.HTTPInternalServerError( detail=e.message, comment=traceback.format_exc()) # Set default pack if one is not provided for resource create if function_name == 'post' and not hasattr(obj, 'pack'): extra = { 'resource_api': obj, 'default_pack_name': DEFAULT_PACK_NAME } LOG.debug( 'Pack not provided in the body, setting a default pack name', extra=extra) setattr(obj, 'pack', DEFAULT_PACK_NAME) else: obj = None more.append(obj) if arg_types: # Cast and transform arguments based on the provided arg_types specification result_args, result_kwargs = get_controller_args_for_types( func=f, arg_types=arg_types, args=args, kwargs=kwargs) more = more + result_args kwargs.update(result_kwargs) args = tuple(more) + tuple(args) noop_codes = [ http_client.NOT_IMPLEMENTED, http_client.METHOD_NOT_ALLOWED, http_client.FORBIDDEN ] if status_code and status_code in noop_codes: pecan.response.status = status_code return json_encode(None) try: result = f(*args, **kwargs) except TypeError as e: e = get_exception_for_type_error(func=f, exc=e) raise e if status_code: pecan.response.status = status_code if content_type == 'application/json': if is_debugging_enabled(): indent = 4 else: indent = None return json_encode(result, indent=indent) else: return result