From 0d0a75ae2f78bc237b00e7271a6d948e77a36d97 Mon Sep 17 00:00:00 2001 From: joizhang Date: Fri, 31 Jan 2020 20:23:38 +0800 Subject: [PATCH 1/3] style: Update. --- main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/main.py b/main.py index 036a9a4..5c6c4cf 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() -- Gitee From 9f16844758214166bcc5ab45f1c1de20a03e20c6 Mon Sep 17 00:00:00 2001 From: joizhang Date: Tue, 4 Feb 2020 20:18:21 +0800 Subject: [PATCH 2/3] feat: Add tensorflow 1.15. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index bb2e5d6..7142740 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,4 @@ Flask_Cors==3.0.8 Flask_SQLAlchemy==2.4.1 cryptography==2.8 python-dotenv==0.10.3 +tensorflow-gpu==1.15 -- Gitee From 3ebfa62647ea9e17a406d52b38b5dc60a99b9f90 Mon Sep 17 00:00:00 2001 From: joizhang Date: Wed, 5 Feb 2020 12:50:17 +0800 Subject: [PATCH 3/3] feat: 1 pymysql==0.9.3; 2 Update error handler. --- app/__init__.py | 3 ++- app/api/__init__.py | 2 +- app/api/errors.py | 13 ------------- app/api/users.py | 17 ++++++++++++----- app/errors/errors.py | 14 ++++++++++++++ app/errors/handlers.py | 21 +++++++++++---------- requirements.txt | 1 + 7 files changed, 41 insertions(+), 30 deletions(-) delete mode 100644 app/api/errors.py create mode 100644 app/errors/errors.py diff --git a/app/__init__.py b/app/__init__.py index 9449565..1669d2b 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 8ad055b..91711f6 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 aa4a6de..0000000 --- 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 acd88ad..1482f8e 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 0000000..fbdedf8 --- /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 a09e9ae..29d1a2d 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/requirements.txt b/requirements.txt index 7142740..9bef910 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ Flask_SQLAlchemy==2.4.1 cryptography==2.8 python-dotenv==0.10.3 tensorflow-gpu==1.15 +pymysql==0.9.3 -- Gitee