diff --git a/app/__init__.py b/app/__init__.py index 9449565628c898d9e5a522238dc2cd14487d2bd2..1669d2baefdab6f51a6d4a03c5d28a204cc2e124 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -2,12 +2,13 @@ import logging import os from logging.handlers import RotatingFileHandler -from config import app_config from flask import Flask from flask_cors import CORS from flask_moment import Moment from flask_sqlalchemy import SQLAlchemy +from config import app_config + db = SQLAlchemy() moment = Moment() diff --git a/app/api/__init__.py b/app/api/__init__.py index 8ad055b3f481878a581f538fcbe86fa381d131a8..91711f61e0edd9fb65a7c57018bd09fbd43d4cca 100644 --- a/app/api/__init__.py +++ b/app/api/__init__.py @@ -2,4 +2,4 @@ from flask import Blueprint bp = Blueprint('api', __name__) -from app.api import users, errors +from app.api import users diff --git a/app/api/errors.py b/app/api/errors.py deleted file mode 100644 index aa4a6def663bdf47684a85375b9490df8e1aa2b0..0000000000000000000000000000000000000000 --- a/app/api/errors.py +++ /dev/null @@ -1,13 +0,0 @@ -from flask import jsonify -from werkzeug.http import HTTP_STATUS_CODES - - -def error_response(status_code, message=None): - payload = {'error': HTTP_STATUS_CODES.get(status_code, 'Unknown error')} - if message: - payload['message'] = message - return jsonify(success=False, data=payload, status_code=status_code) - - -def bad_request(message): - return error_response(400, message) diff --git a/app/api/users.py b/app/api/users.py index acd88ad80d9e292129b34d5fdfcad58876b35b26..1482f8e17e23753b1755bb9597825cfa99c1afd3 100644 --- a/app/api/users.py +++ b/app/api/users.py @@ -1,13 +1,20 @@ -from flask import jsonify, request, url_for +from flask import jsonify, request +from werkzeug.exceptions import BadRequest +from pymysql.err import MySQLError + from app import db -from app.model.models import User, Photo from app.api import bp -from app.api.errors import bad_request +from app.model.models import User, Photo from app.utils import FaceNet, file_utils, crypto_utils FACE_NET = FaceNet() +@bp.route('/test', methods=['GET']) +def test(): + raise MySQLError() + + @bp.route('/users', methods=['GET']) def get_users(): page = request.args.get('page', 1, type=int) @@ -20,7 +27,7 @@ def get_users(): def create_user(): data = request.json or {} if 'name' not in data or 'cell_phone_number' not in data or 'photos' not in data: - return bad_request('Must include name, cell_phone_number and photos fields') + raise BadRequest('Must include name, cell_phone_number and photos fields') # User user = User.query.filter_by(name=data['name'], cell_phone_number=data['cell_phone_number']).first() if user is None: @@ -46,5 +53,5 @@ def create_user(): @bp.route('/foo', methods=['POST']) def foo(): data = request.json - print(data) + # print(data) return jsonify(success=True, data=data, status_code=201) diff --git a/app/errors/errors.py b/app/errors/errors.py new file mode 100644 index 0000000000000000000000000000000000000000..fbdedf88bb21f73f920f27255cb12c1b741486a9 --- /dev/null +++ b/app/errors/errors.py @@ -0,0 +1,14 @@ +from flask import jsonify, current_app + + +def http_error_response(error): + current_app.logger.error(error) + error_msg = error.name + if error.code == 400: + error_msg = error.description + return jsonify(success=False, message=error_msg, status_code=error.code) + + +def service_error_response(error): + current_app.logger.error(error) + return jsonify(success=False, message="Internal Server Error!", status_code=500) diff --git a/app/errors/handlers.py b/app/errors/handlers.py index a09e9ae3089f53390f733e34514b44a345b0c7b4..29d1a2daf07097943d4e1cb5120619d1f3f663d9 100644 --- a/app/errors/handlers.py +++ b/app/errors/handlers.py @@ -1,20 +1,21 @@ -from flask import request - from app import db -from app.api.errors import error_response as api_error_response from app.errors import bp +from app.errors.errors import http_error_response, service_error_response +from werkzeug.exceptions import HTTPException -def wants_json_response(): - return request.accept_mimetypes['application/json'] >= request.accept_mimetypes['text/html'] +@bp.app_errorhandler(400) +def bad_request_error(error): + return http_error_response(error) @bp.app_errorhandler(404) def not_found_error(error): - return api_error_response(404) + return http_error_response(error) -@bp.app_errorhandler(500) -def internal_error(error): - db.session.rollback() - return api_error_response(500) +@bp.app_errorhandler(Exception) +def server_error(error): + if not isinstance(error, HTTPException): + db.session.rollback() + return service_error_response(error) diff --git a/main.py b/main.py index 036a9a4e4169eac2e9ccb6584c06cf87824f1cdb..5c6c4cf0696280c0136e9547a42aeb6a2eb8ff4a 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ from app import create_app app = create_app('development') + if __name__ == '__main__': app.run() diff --git a/requirements.txt b/requirements.txt index bb2e5d6f0aa0bc8e1877aa141f763830294ac8e7..9bef9102ac280270369e50b027ab458e3a5bf320 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,5 @@ Flask_Cors==3.0.8 Flask_SQLAlchemy==2.4.1 cryptography==2.8 python-dotenv==0.10.3 +tensorflow-gpu==1.15 +pymysql==0.9.3