add basic validation support

This commit is contained in:
Martin
2016-06-30 15:45:20 +02:00
parent 7dcb8c5f50
commit 39188e6000
4 changed files with 40 additions and 2 deletions
+11 -2
View File
@@ -2,6 +2,7 @@ from flask import Flask, jsonify, Response, request
from flask_sqlalchemy import SQLAlchemy from flask_sqlalchemy import SQLAlchemy
from api.extensions.esales import Esales from api.extensions.esales import Esales
from api.helpers import check_api_key from api.helpers import check_api_key
from api.validators import ValidationError
db = SQLAlchemy() db = SQLAlchemy()
esales = Esales() esales = Esales()
@@ -15,8 +16,16 @@ def create_app(config_name='config'):
# register errors handlers # register errors handlers
@app.errorhandler(404) @app.errorhandler(404)
def on_404(e): def on_404(error):
return jsonify(dict(error='Not found')), 404 response = jsonify({'status': 404, 'message': 'The requested resource was not found'})
response.status_code = 404
return response
@app.errorhandler(ValidationError)
def on_validation_error(error):
response = jsonify({'status': 400, 'message': error.message})
response.status_code = 400
return response
# register blueprints # register blueprints
from api.views import server, designers, categories from api.views import server, designers, categories
+14
View File
@@ -0,0 +1,14 @@
# coding=UTF-8
class ValidationError(Exception):
def __init__(self, message):
Exception.__init__(self)
self.message = message
def validate_keys_exists(obj, *keys):
for key in keys:
if not key in obj:
raise ValidationError('No {} is specified'.format(key))
return True
+3
View File
@@ -1,6 +1,8 @@
from flask import Blueprint, request, jsonify from flask import Blueprint, request, jsonify
from api import db, tasks from api import db, tasks
from api.models import Designer from api.models import Designer
from api.validators import validate_keys_exists
mod = Blueprint('designers', __name__, url_prefix='/designers') mod = Blueprint('designers', __name__, url_prefix='/designers')
@@ -14,6 +16,7 @@ def list():
@mod.route("/", methods=["POST"]) @mod.route("/", methods=["POST"])
def create(): def create():
data = request.json data = request.json
validate_keys_exists(data, 'username', 'name')
designer = Designer(**data) designer = Designer(**data)
db.session.add(designer) db.session.add(designer)
db.session.commit() db.session.commit()
+12
View File
@@ -0,0 +1,12 @@
import unittest2
from api.validators import ValidationError, validate_keys_exists
class TestValidation(unittest2.TestCase):
def test_validate_keys_exists(self):
obj = {'a':1, 'b':2}
self.assertRaises(ValidationError, validate_keys_exists, obj, 'c')
self.assertRaises(ValidationError, validate_keys_exists, obj, 'a', 'b', 'c')
self.assertTrue(validate_keys_exists(obj, 'a'))
self.assertTrue(validate_keys_exists(obj, 'a', 'b'))