replace flask with sanic

pull/6/head
Yax 7 years ago
parent 19655b24df
commit 47008dc23a

@ -1,5 +1,4 @@
from flask import Flask from sanic import Sanic
from flask.ext.cache import Cache
app = Flask(__name__) app = Sanic()
cache = Cache(app, config={'CACHE_TYPE': 'simple'}) cache = {}

@ -3,7 +3,7 @@
import logging import logging
import config import config
from flask import request, jsonify, abort from sanic import response
from app import app from app import app
from app import cache from app import cache
from app.models.site import Site from app.models.site import Site
@ -15,7 +15,7 @@ logger = logging.getLogger(__name__)
@app.route("/comments", methods=['GET']) @app.route("/comments", methods=['GET'])
def query_comments(): def query_comments(request):
comments = [] comments = []
try: try:
@ -37,18 +37,16 @@ def query_comments():
d['date'] = comment.published.strftime("%Y-%m-%d %H:%M:%S") d['date'] = comment.published.strftime("%Y-%m-%d %H:%M:%S")
logger.debug(d) logger.debug(d)
comments.append(d) comments.append(d)
r = jsonify({'data': comments}) r = response.json({'data': comments})
r.status_code = 200
except: except:
logger.warn('bad request') logger.warn('bad request')
r = jsonify({'data': []}) r = response.json({'data': []}, status=400)
r.status_code = 400
return r return r
@cache.cached(timeout=300) #@cache.cached(timeout=300)
@app.route("/comments/count", methods=['GET']) @app.route("/comments/count", methods=['GET'])
def get_comments_count(): def get_comments_count(request):
try: try:
token = request.args.get('token', '') token = request.args.get('token', '')
url = request.args.get('url', '') url = request.args.get('url', '')
@ -56,16 +54,14 @@ def get_comments_count():
(Comment.url == url) & (Comment.url == url) &
(Comment.published.is_null(False)) & (Comment.published.is_null(False)) &
(Site.token == token)).count() (Site.token == token)).count()
r = jsonify({'count': count}) r = response.json({'count': count})
r.status_code = 200
except: except:
r = jsonify({'count': 0}) r = response.json({'count': 0})
r.status_code = 200
return r return r
@app.route("/comments", methods=['POST']) @app.route("/comments", methods=['POST'])
def new_comment(): def new_comment(request):
try: try:
data = request.get_json() data = request.get_json()
@ -76,25 +72,25 @@ def new_comment():
site = Site.select().where(Site.token == token).get() site = Site.select().where(Site.token == token).get()
if site is None: if site is None:
logger.warn('Unknown site %s' % token) logger.warn('Unknown site %s' % token)
abort(400) return response.text('BAD_REQUEST', status=400)
# honeypot for spammers # honeypot for spammers
captcha = data.get('captcha', '') captcha = data.get('captcha', '')
if captcha: if captcha:
logger.warn('discard spam: data %s' % data) logger.warn('discard spam: data %s' % data)
abort(400) return response.text('BAD_REQUEST', status=400)
processor.enqueue({'request': 'new_comment', 'data': data}) processor.enqueue({'request': 'new_comment', 'data': data})
except: except:
logger.exception("new comment failure") 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']) @app.route("/report", methods=['GET'])
def report(): def report(request):
try: try:
token = request.args.get('token', '') token = request.args.get('token', '')
@ -102,25 +98,25 @@ def report():
if secret != config.SECRET: if secret != config.SECRET:
logger.warn('Unauthorized request') logger.warn('Unauthorized request')
abort(401) return response.text('UNAUTHORIZED', status=401)
site = Site.select().where(Site.token == token).get() site = Site.select().where(Site.token == token).get()
if site is None: if site is None:
logger.warn('Unknown site %s' % token) logger.warn('Unknown site %s' % token)
abort(404) return response.text('', status=404)
processor.enqueue({'request': 'report', 'data': token}) processor.enqueue({'request': 'report', 'data': token})
except: except:
logger.exception("report failure") logger.exception("report failure")
abort(500) return response.text('ERROR', status=500)
return "OK" return response.text('OK')
@app.route("/accept", methods=['GET']) @app.route("/accept", methods=['GET'])
def accept_comment(): def accept_comment(request):
try: try:
id = request.args.get('comment', '') id = request.args.get('comment', '')
@ -128,19 +124,19 @@ def accept_comment():
if secret != config.SECRET: if secret != config.SECRET:
logger.warn('Unauthorized request') logger.warn('Unauthorized request')
abort(401) return response.text('UNAUTHORIZED', status=401)
processor.enqueue({'request': 'late_accept', 'data': id}) processor.enqueue({'request': 'late_accept', 'data': id})
except: except:
logger.exception("accept failure") logger.exception("accept failure")
abort(500) return response.text('', status=500)
return "PUBLISHED" return response.text('PUBLISHED')
@app.route("/reject", methods=['GET']) @app.route("/reject", methods=['GET'])
def reject_comment(): def reject_comment(request):
try: try:
id = request.args.get('comment', '') id = request.args.get('comment', '')
@ -148,12 +144,12 @@ def reject_comment():
if secret != config.SECRET: if secret != config.SECRET:
logger.warn('Unauthorized request') logger.warn('Unauthorized request')
abort(401) return response.text('UNAUTHORIZED', status=401)
processor.enqueue({'request': 'late_reject', 'data': id}) processor.enqueue({'request': 'late_reject', 'data': id})
except: except:
logger.exception("reject failure") logger.exception("reject failure")
abort(500) return response.text('ERROR', status=500)
return "REJECTED" return response.text('REJECTED')

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import logging import logging
from flask import request, abort from sanic import response
from app import app from app import app
from app.services import processor from app.services import processor
@ -10,10 +10,10 @@ logger = logging.getLogger(__name__)
@app.route("/inbox", methods=['POST']) @app.route("/inbox", methods=['POST'])
def new_mail(): def new_mail(request):
try: try:
data = request.get_json() data = request.json
logger.debug(data) logger.debug(data)
processor.enqueue({'request': 'new_mail', 'data': data}) processor.enqueue({'request': 'new_mail', 'data': data})

@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import logging import logging
from flask import request, abort from sanic import response
from app import app from app import app
from app.services import processor from app.services import processor
@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
@app.route("/unsubscribe", methods=['GET']) @app.route("/unsubscribe", methods=['GET'])
def unsubscribe(): def unsubscribe(request):
try: try:
data = { data = {
@ -24,6 +24,6 @@ def unsubscribe():
except: except:
logger.exception("unsubscribe failure") logger.exception("unsubscribe failure")
abort(400) return response.text('BAD_REQUEST', status=400)
return "OK" return response.text('OK')

@ -4,8 +4,6 @@
import os import os
import sys import sys
import logging import logging
from werkzeug.contrib.fixers import ProxyFix
from flask.ext.cors import CORS
# add current path and parent path to syspath # add current path and parent path to syspath
current_path = os.path.dirname(__file__) current_path = os.path.dirname(__file__)
@ -59,17 +57,15 @@ processor.start(template_path)
logger.info("Start Stacosys application") logger.info("Start Stacosys application")
# enable CORS # enable CORS
cors = CORS(app, resources={r"/comments/*": {"origins": "*"}}) #cors = CORS(app, resources={r"/comments/*": {"origins": "*"}})
# tune logging level # tune logging level
if not config.DEBUG: if not config.DEBUG:
logging.getLogger('app.cors').level = logging.WARNING logging.getLogger('app.cors').level = logging.WARNING
logging.getLogger('werkzeug').level = logging.WARNING logging.getLogger('werkzeug').level = logging.WARNING
app.wsgi_app = ProxyFix(app.wsgi_app)
if __name__ == '__main__': if __name__ == '__main__':
app.run(host=config.HTTP_ADDRESS, app.run(host=config.HTTP_ADDRESS,
port=config.HTTP_PORT, port=config.HTTP_PORT,
debug=config.DEBUG, use_reloader=False) debug=config.DEBUG)

@ -1,8 +1,6 @@
aiofiles==0.3.1
clize==2.4 clize==2.4
Flask==0.10.1 httptools==0.0.9
Flask-Cache==0.13.1
Flask-Cors==2.0.1
itsdangerous==0.24
Jinja2==2.7.3 Jinja2==2.7.3
Markdown==2.6.2 Markdown==2.6.2
MarkupSafe==0.23 MarkupSafe==0.23
@ -10,5 +8,8 @@ peewee==2.6.0
PyMySQL==0.6.6 PyMySQL==0.6.6
PyRSS2Gen==1.1 PyRSS2Gen==1.1
requests==2.7.0 requests==2.7.0
sanic==0.5.4
six==1.9.0 six==1.9.0
Werkzeug==0.10.4 ujson==1.35
uvloop==0.8.0
websockets==3.3

Loading…
Cancel
Save