import functools from flask import request from marshmallow import Schema, ValidationError from fullstack.response import ResponseCode, response_result from app.setting import config def validate_schema(schema_class: Schema): def decorator(view_func): @functools.wraps(view_func) def inner(*args, **kwargs): if request.method == 'GET': form_data = request.args else: if request.json: form_data = request.json else: form_data = request.form try: data = schema_class().load(form_data) request.schema_data = data except ValidationError as e: if config['DEBUG']: return response_result(ResponseCode.PARAMETER_ERROR, e.messages if config['DEBUG'] else None) return view_func(*args, **kwargs) return inner return decorator