back to flask :-)

This commit is contained in:
Yax 2017-07-16 17:35:38 +02:00
parent 7cbcb0b5cb
commit 7deccf7425
10 changed files with 69 additions and 95 deletions

View file

@ -1,10 +1,9 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import logging
import config
from sanic import response
from flask import request, jsonify, abort
from app import app
from app.models.site import Site
from app.models.comment import Comment
@ -12,25 +11,10 @@ from app.helpers.hashing import md5
from app.services import processor
logger = logging.getLogger(__name__)
cache = {}
cache_time = 0
def get_cached(key):
global cache
global cache_time
value = cache.get(key,None)
if (time.time() - cache_time) > 120:
cache = {}
cache_time = time.time()
return value
def set_cached(key, value):
global cache
cache[key] = value
@app.route("/comments", methods=['GET'])
def query_comments(request):
def query_comments():
comments = []
try:
@ -52,47 +36,37 @@ def query_comments(request):
d['date'] = comment.published.strftime("%Y-%m-%d %H:%M:%S")
logger.debug(d)
comments.append(d)
r = response.json({'data': comments})
r = jsonify({'data': comments})
r.status_code = 200
except:
logger.warn('bad request')
r = response.json({'data': []}, status=400)
return r
async def get_cached_comments_count(request):
try:
token = request.args.get('token', '')
url = request.args.get('url', '')
key = '%s:%s' % (token, url)
count = get_cached(key)
if count is None:
count = Comment.select(Comment).join(Site).where(
(Comment.url == url) &
(Comment.published.is_null(False)) &
(Site.token == token)).count()
set_cached(key, count)
r = {'count': count}
except:
logger.exception("cache exception")
r = {'count': 0}
r = jsonify({'data': []})
r.status_code = 400
return r
@app.route("/comments/count", methods=['GET'])
async def get_comments_count(request):
return response.json(await get_cached_comments_count(request))
@app.route("/comments", methods=['OPTIONS'])
def option_comments(request):
return response.text('OK')
def get_comments_count():
try:
token = request.args.get('token', '')
url = request.args.get('url', '')
count = Comment.select(Comment).join(Site).where(
(Comment.url == url) &
(Comment.published.is_null(False)) &
(Site.token == token)).count()
r = jsonify({'count': count})
r.status_code = 200
except:
r = jsonify({'count': 0})
r.status_code = 200
return r
@app.route("/comments", methods=['POST'])
def new_comment(request):
def new_comment():
try:
data = request.json
data = request.get_json()
logger.info(data)
# validate token: retrieve site entity
@ -100,25 +74,25 @@ def new_comment(request):
site = Site.select().where(Site.token == token).get()
if site is None:
logger.warn('Unknown site %s' % token)
return response.text('BAD_REQUEST', status=400)
abort(400)
# honeypot for spammers
captcha = data.get('captcha', '')
if captcha:
logger.warn('discard spam: data %s' % data)
return response.text('BAD_REQUEST', status=400)
abort(400)
processor.enqueue({'request': 'new_comment', 'data': data})
except:
logger.exception("new comment failure")
return response.text('BAD_REQUEST', status=400)
abort(400)
return response.text('OK')
return "OK"
@app.route("/report", methods=['GET'])
def report(request):
def report():
try:
token = request.args.get('token', '')
@ -126,25 +100,25 @@ def report(request):
if secret != config.SECRET:
logger.warn('Unauthorized request')
return response.text('UNAUTHORIZED', status=401)
abort(401)
site = Site.select().where(Site.token == token).get()
if site is None:
logger.warn('Unknown site %s' % token)
return response.text('', status=404)
abort(404)
processor.enqueue({'request': 'report', 'data': token})
except:
logger.exception("report failure")
return response.text('ERROR', status=500)
abort(500)
return response.text('OK')
return "OK"
@app.route("/accept", methods=['GET'])
def accept_comment(request):
def accept_comment():
try:
id = request.args.get('comment', '')
@ -152,19 +126,19 @@ def accept_comment(request):
if secret != config.SECRET:
logger.warn('Unauthorized request')
return response.text('UNAUTHORIZED', status=401)
abort(401)
processor.enqueue({'request': 'late_accept', 'data': id})
except:
logger.exception("accept failure")
return response.text('', status=500)
abort(500)
return response.text('PUBLISHED')
return "PUBLISHED"
@app.route("/reject", methods=['GET'])
def reject_comment(request):
def reject_comment():
try:
id = request.args.get('comment', '')
@ -172,12 +146,12 @@ def reject_comment(request):
if secret != config.SECRET:
logger.warn('Unauthorized request')
return response.text('UNAUTHORIZED', status=401)
abort(401)
processor.enqueue({'request': 'late_reject', 'data': id})
except:
logger.exception("reject failure")
return response.text('ERROR', status=500)
abort(500)
return response.text('REJECTED')
return "REJECTED"

View file

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

View file

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