Draft reporting
This commit is contained in:
parent
7f255eb48a
commit
efc620aee8
5 changed files with 89 additions and 1 deletions
|
@ -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
22
app/models/report.py
Normal 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()
|
|
@ -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…
Add table
Reference in a new issue