diff --git a/app/__init__.py b/app/__init__.py index 289b569..14f7a33 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,5 +1,4 @@ -from flask import Flask -from flask.ext.cache import Cache +from sanic import Sanic -app = Flask(__name__) -cache = Cache(app, config={'CACHE_TYPE': 'simple'}) +app = Sanic() +cache = {} diff --git a/app/controllers/api.py b/app/controllers/api.py index 0e6e216..ddbdf67 100644 --- a/app/controllers/api.py +++ b/app/controllers/api.py @@ -3,7 +3,7 @@ import logging import config -from flask import request, jsonify, abort +from sanic import response from app import app from app import cache from app.models.site import Site @@ -15,7 +15,7 @@ logger = logging.getLogger(__name__) @app.route("/comments", methods=['GET']) -def query_comments(): +def query_comments(request): comments = [] try: @@ -37,18 +37,16 @@ def query_comments(): d['date'] = comment.published.strftime("%Y-%m-%d %H:%M:%S") logger.debug(d) comments.append(d) - r = jsonify({'data': comments}) - r.status_code = 200 + r = response.json({'data': comments}) except: logger.warn('bad request') - r = jsonify({'data': []}) - r.status_code = 400 + r = response.json({'data': []}, status=400) return r -@cache.cached(timeout=300) +#@cache.cached(timeout=300) @app.route("/comments/count", methods=['GET']) -def get_comments_count(): +def get_comments_count(request): try: token = request.args.get('token', '') url = request.args.get('url', '') @@ -56,16 +54,14 @@ def get_comments_count(): (Comment.url == url) & (Comment.published.is_null(False)) & (Site.token == token)).count() - r = jsonify({'count': count}) - r.status_code = 200 + r = response.json({'count': count}) except: - r = jsonify({'count': 0}) - r.status_code = 200 + r = response.json({'count': 0}) return r @app.route("/comments", methods=['POST']) -def new_comment(): +def new_comment(request): try: data = request.get_json() @@ -76,25 +72,25 @@ def new_comment(): site = Site.select().where(Site.token == token).get() if site is None: logger.warn('Unknown site %s' % token) - abort(400) + return response.text('BAD_REQUEST', status=400) # honeypot for spammers captcha = data.get('captcha', '') if captcha: logger.warn('discard spam: data %s' % data) - abort(400) + return response.text('BAD_REQUEST', status=400) processor.enqueue({'request': 'new_comment', 'data': data}) except: logger.exception("new comment failure") - abort(400) + return response.text('BAD_REQUEST', status=400) - return "OK" + return response.text('OK') @app.route("/report", methods=['GET']) -def report(): +def report(request): try: token = request.args.get('token', '') @@ -102,25 +98,25 @@ def report(): if secret != config.SECRET: logger.warn('Unauthorized request') - abort(401) + return response.text('UNAUTHORIZED', status=401) site = Site.select().where(Site.token == token).get() if site is None: logger.warn('Unknown site %s' % token) - abort(404) + return response.text('', status=404) processor.enqueue({'request': 'report', 'data': token}) except: logger.exception("report failure") - abort(500) + return response.text('ERROR', status=500) - return "OK" + return response.text('OK') @app.route("/accept", methods=['GET']) -def accept_comment(): +def accept_comment(request): try: id = request.args.get('comment', '') @@ -128,19 +124,19 @@ def accept_comment(): if secret != config.SECRET: logger.warn('Unauthorized request') - abort(401) + return response.text('UNAUTHORIZED', status=401) processor.enqueue({'request': 'late_accept', 'data': id}) except: logger.exception("accept failure") - abort(500) + return response.text('', status=500) - return "PUBLISHED" + return response.text('PUBLISHED') @app.route("/reject", methods=['GET']) -def reject_comment(): +def reject_comment(request): try: id = request.args.get('comment', '') @@ -148,12 +144,12 @@ def reject_comment(): if secret != config.SECRET: logger.warn('Unauthorized request') - abort(401) + return response.text('UNAUTHORIZED', status=401) processor.enqueue({'request': 'late_reject', 'data': id}) except: logger.exception("reject failure") - abort(500) + return response.text('ERROR', status=500) - return "REJECTED" + return response.text('REJECTED') diff --git a/app/controllers/mail.py b/app/controllers/mail.py index 7ade3fc..43d4d9c 100644 --- a/app/controllers/mail.py +++ b/app/controllers/mail.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import logging -from flask import request, abort +from sanic import response from app import app from app.services import processor @@ -10,10 +10,10 @@ logger = logging.getLogger(__name__) @app.route("/inbox", methods=['POST']) -def new_mail(): +def new_mail(request): try: - data = request.get_json() + data = request.json logger.debug(data) processor.enqueue({'request': 'new_mail', 'data': data}) diff --git a/app/controllers/reader.py b/app/controllers/reader.py index 2673105..0631861 100644 --- a/app/controllers/reader.py +++ b/app/controllers/reader.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import logging -from flask import request, abort +from sanic import response from app import app from app.services import processor @@ -10,7 +10,7 @@ logger = logging.getLogger(__name__) @app.route("/unsubscribe", methods=['GET']) -def unsubscribe(): +def unsubscribe(request): try: data = { @@ -24,6 +24,6 @@ def unsubscribe(): except: logger.exception("unsubscribe failure") - abort(400) + return response.text('BAD_REQUEST', status=400) - return "OK" + return response.text('OK') diff --git a/app/run.py b/app/run.py index fc8bd1a..05c3f43 100644 --- a/app/run.py +++ b/app/run.py @@ -4,8 +4,6 @@ import os import sys import logging -from werkzeug.contrib.fixers import ProxyFix -from flask.ext.cors import CORS # add current path and parent path to syspath current_path = os.path.dirname(__file__) @@ -59,17 +57,15 @@ processor.start(template_path) logger.info("Start Stacosys application") # enable CORS -cors = CORS(app, resources={r"/comments/*": {"origins": "*"}}) +#cors = CORS(app, resources={r"/comments/*": {"origins": "*"}}) # tune logging level if not config.DEBUG: logging.getLogger('app.cors').level = logging.WARNING logging.getLogger('werkzeug').level = logging.WARNING -app.wsgi_app = ProxyFix(app.wsgi_app) - if __name__ == '__main__': app.run(host=config.HTTP_ADDRESS, port=config.HTTP_PORT, - debug=config.DEBUG, use_reloader=False) + debug=config.DEBUG) diff --git a/requirements.txt b/requirements.txt index 02673a5..ab6a057 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,6 @@ +aiofiles==0.3.1 clize==2.4 -Flask==0.10.1 -Flask-Cache==0.13.1 -Flask-Cors==2.0.1 -itsdangerous==0.24 +httptools==0.0.9 Jinja2==2.7.3 Markdown==2.6.2 MarkupSafe==0.23 @@ -10,5 +8,8 @@ peewee==2.6.0 PyMySQL==0.6.6 PyRSS2Gen==1.1 requests==2.7.0 +sanic==0.5.4 six==1.9.0 -Werkzeug==0.10.4 +ujson==1.35 +uvloop==0.8.0 +websockets==3.3