Draft reporting

pull/6/head
Yax 9 years ago
parent 7f255eb48a
commit efc620aee8

@ -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"

@ -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()

@ -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)

@ -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'}

@ -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'

Loading…
Cancel
Save