replace flask with sanic
This commit is contained in:
parent
17c302f999
commit
f00db85541
6 changed files with 44 additions and 52 deletions
|
@ -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…
Add table
Reference in a new issue