Draft reporting

This commit is contained in:
Yax 2015-09-06 18:58:07 +02:00
parent 890e18e9d5
commit 49c4083882
5 changed files with 89 additions and 1 deletions

View file

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import logging import logging
import config
from flask import request, jsonify, abort from flask import request, jsonify, abort
from app import app from app import app
from app.models.site import Site from app.models.site import Site
@ -88,3 +89,28 @@ def new_comment():
abort(400) abort(400)
return "OK" return "OK"
@app.route("/report", methods=['GET'])
def report():
try:
token = request.args.get('token', '')
secret = request.args.get('secret', '')
if secret != config.SECRET:
logger.warn('Unauthorized request')
abort(401)
site = Site.select().where(Site.token == token).get()
if site is None:
logger.warn('Unknown site %s' % token)
abort(404)
processor.enqueue({'request': 'report', 'data': token})
except:
logger.exception("report failure")
abort(500)
return "OK"

22
app/models/report.py Normal file
View file

@ -0,0 +1,22 @@
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from peewee import Model
from peewee import CharField
from peewee import BooleanField
from peewee import ForeignKeyField
from app.services.database import get_db
from app.models.site import Site
class Report(Model):
name = CharField(unique=True)
email = CharField()
url = CharField()
published = BooleanField()
rejected = BooleanField()
subscribed = BooleanField()
unsubscribed = BooleanField()
site = ForeignKeyField(Site, related_name='report_site')
class Meta:
database = get_db()

View file

@ -24,5 +24,6 @@ def setup(db):
from app.models.site import Site from app.models.site import Site
from app.models.comment import Comment from app.models.comment import Comment
from app.models.reader import Reader from app.models.reader import Reader
from app.models.report import Report
db.create_tables([Site, Comment, Reader], safe=True) db.create_tables([Site, Comment, Reader, Report], safe=True)

View file

@ -39,6 +39,8 @@ class Processor(Thread):
reply_comment_email(msg['data']) reply_comment_email(msg['data'])
elif msg['request'] == 'unsubscribe': elif msg['request'] == 'unsubscribe':
unsubscribe_reader(msg['data']) unsubscribe_reader(msg['data'])
elif msg['request'] == 'report':
report(msg['data'])
else: else:
logger.info("throw unknown request " + str(msg)) logger.info("throw unknown request " + str(msg))
except: except:
@ -123,11 +125,17 @@ def reply_comment_email(data):
# safe logic: no answer or unknown answer is a go for publishing # safe logic: no answer or unknown answer is a go for publishing
if message[:2].upper() == 'NO': if message[:2].upper() == 'NO':
# report event
report_rejected(comment)
logger.info('discard comment: %d' % comment_id) logger.info('discard comment: %d' % comment_id)
comment.delete_instance() comment.delete_instance()
email_body = get_template('drop_comment').render(original=message) email_body = get_template('drop_comment').render(original=message)
mail(from_email, 'Re: ' + subject, email_body) mail(from_email, 'Re: ' + subject, email_body)
else: else:
# report event
report_published(comment)
# update Comment row # update Comment row
comment.published = datetime.now().strftime("%Y-%m-%d %H:%M:%S") comment.published = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
comment.save() comment.save()
@ -169,6 +177,9 @@ def subscribe_reader(email, token, url):
reader = Reader(site=site, email=email, url=url) reader = Reader(site=site, email=email, url=url)
reader.save() reader.save()
# report event
report_subscribed(reader)
def unsubscribe_reader(data): def unsubscribe_reader(data):
token = data.get('token', '') token = data.get('token', '')
@ -178,6 +189,9 @@ def unsubscribe_reader(data):
for reader in Reader.select().join(Site).where(Site.token == token, for reader in Reader.select().join(Site).where(Site.token == token,
Reader.email == email, Reader.email == email,
Reader.url == url): Reader.url == url):
# report event
report_unsubscribed(reader)
reader.delete_instance() reader.delete_instance()
@ -203,6 +217,29 @@ def notify_reader(from_email, to_email, token, url):
mail(to_email, subject, email_body) mail(to_email, subject, email_body)
def report_rejected(comment):
pass
def report_published(comment):
pass
def report_subscribed(comment):
pass
def report_unsubscribed(comment):
pass
def report(token):
print('report requested for {}'.format(token))
standby_count = Comment.select().join(Site).where(
Site.token == token, Comment.published.is_null(True)).count()
print('standby {}'.format(standby_count))
def mail(to_email, subject, message): def mail(to_email, subject, message):
headers = {'Content-Type': 'application/json; charset=utf-8'} headers = {'Content-Type': 'application/json; charset=utf-8'}

View file

@ -14,4 +14,6 @@ HTTP_PORT = 8000
SALT = "BRRJRqXgGpXWrgTidBPcixIThHpDuKc0" SALT = "BRRJRqXgGpXWrgTidBPcixIThHpDuKc0"
SECRET = "Uqca5Kc8xuU6THz9"
UNSUBSCRIBE_URL = 'http://localhost:8000/unsubscribe' UNSUBSCRIBE_URL = 'http://localhost:8000/unsubscribe'