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íficoEl 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?