Frasco: Decorador para verificar el esquema JSON y JSON

Tengo una aplicación de matraz con llamadas que esperan la carga útil de JSON. Antes de procesar cada llamada, tengo un proceso de comprobación de errores de 2 pasos:

Afirmar que la carga útil es un JSON válidoAfirmar que la carga útil de JSON cumple con un esquema específico

El cual se implementa de la siguiente manera:

@app.route('/activate', methods=['POST'])
def activate():
    request_id = request.__hash__()

    # Assert that the payload is a valid JSON
    try:
        input = request.json
    except BadRequest, e:
        msg = "payload must be a valid json"
        return jsonify({"error": msg}), 400

    # JSON Schema Validation
    try:
        validate(request.json, app.config['activate_schema'])
    except ValidationError, e:
        return jsonify({"error": e.message}), 400

Dado que este código se duplica en muchas llamadas, me pregunto si puedo moverlo elegantemente a un decorador, algo en la forma de:

@validate_json
@validate_schema(schema=app.config['activate_schema'])
@app.route('/activate', methods=['POST'])
def activate():
    ....

El problema es que elrequest El argumento es implícito: puedo referirme a él dentro de la función, pero no es un parámetro. Por lo tanto, no estoy seguro de cómo usarlo dentro del decorador.

¿Cómo puedo implementar las verificaciones de validación usando decoradores Python?

Respuestas a la pregunta(1)

Su respuesta a la pregunta