X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fsam.git;a=blobdiff_plain;f=rate-my-litreview.py;fp=rate-my-litreview.py;h=251ad6aee20e8608bccd72b12151427f1f051f3e;hp=0000000000000000000000000000000000000000;hb=a7d21e530f640a6e0f8493cfa9fded2c71b7c42d;hpb=0101621ac53853f3c9d0f0ad2873f2b65c2b6130 diff --git a/rate-my-litreview.py b/rate-my-litreview.py new file mode 100755 index 0000000..251ad6a --- /dev/null +++ b/rate-my-litreview.py @@ -0,0 +1,171 @@ +#!/usr/bin/python + +import sys +import os +import sqlite3 +import cgi +import smtplib +from email.mime.text import MIMEText +import datetime +import subprocess +import random + +# Setup a sqlite3 database before deploying: +# sqlite3 ratings.db +# sqlite> CREATE TABLE ratings(formalness, citeyness, reviewyness, accurateness, boringness, pointyness, overallness, version, time, message, page); +# Get rid of database by DROP TABLE or deleting the file + +target_email = "matches@ucc.asn.au" +secret_answers = ["No", "no"] +dbfile = "ratings.db" + +def print_form(name): + """ Print the form """ + f = open(name,"r") + for line in f.readlines(): + print(line) + f.close() + +def git_stamp(): + # Python is nice but sometimes you just need to bash it over the head + p = subprocess.Popen("git show | head --lines=1 | awk '{print $NF}'", stdout=subprocess.PIPE, shell=True) + return p.stdout.readline().strip(" \r\n") + +def main(argv): + """ Do the shit """ + con = sqlite3.connect(dbfile) + c = con.cursor() + + # Values we expect + values = { + "formalness" : "", + "citeyness" : "", + "reviewyness" : "", + "accurateness" : "", + "boringness" : "", + "pointyness" : "", + "overallness" : "", + "page" : 0, + "secret" : "No" + } + + sanity = True + + # Max pages + p = subprocess.Popen("pdfinfo thesis.pdf | grep Pages | sed 's/[^0-9]*//'", stdout=subprocess.PIPE, shell=True) + max_pages = int(p.stdout.read().strip(" \r\bn")) + + + + form = cgi.FieldStorage() + + # Check we have all the values + for k in values.keys(): + if k in form: + values[k] = form[k].value + + + # No values? Print the form + if len(form.keys()) <= 0 or "page" not in form: + values["page"] = random.randint(1, max_pages) + + print("Content-type: text/html\n") + print("") + print("") + print("Rate My LitReview(TM) (Patent Pending)") + print("") + print("") + print("") + + # Check page number + try: + values["page"] = int(values["page"]) + except: + print("

Invalid Page %s!

" % values["page"]) + values["page"] = random.randint(1, max_pages) + sanity = False + + print("
") + + + print("

Rate My Lit Review

") + print("

Read a page, then rate it with the hammer of judgement!

") + print("

Page: of %d" % (values["page"], max_pages)) + if values["page"] > 1: + print("Prev" % (values["page"]-1)) + if values["page"] < max_pages: + print("Next" % (values["page"]+1)) + print("

") + + + + + + # Check secret question + if values["secret"] not in secret_answers: + print("

You failed the turing test! Hint: The answer is \"No\"

") + sanity = False + del values["secret"] + + + print("
") + print("" % values["page"]) + print("
") + + + print("
") + print_form("rate-my-litreview.html") + print("
") + + + if not sanity: + return 1 + + if len(form.keys()) <= 1: + print("") + return 0 + + # Sanity checks complete; set other values + values.update({"time" : int(datetime.datetime.now().strftime("%s"))}) + values.update({"version" : git_stamp()}) + + # Produce emails + + # Send emails + emails = ["matches@ucc.asn.au"] + userMsg = "Someone Rated Your LitReview!\n" + userMsg += "Your ratings\n-----------------\n" + for k in values: + userMsg += str(k) + ":\t" + str(values[k]) + + userMsg += "Happy LitReviewing!\n" + userMsg += "\n\nNOTE: This Message Automatically Sent By Rate My LitReview(TM) (Patent Pending)\n" + userMsg = MIMEText(userMsg) + for i,msg in enumerate([userMsg]): + msg["Subject"] = "Rate My LitReview" + msg["From"] = "matches@ucc.asn.au" + msg["To"] = emails[i] + s = smtplib.SMTP("localhost") + s.sendmail(msg["From"], [msg["To"]], msg.as_string()) + s.quit() + + # Tell them what happened. + # Do the thing + c.execute("INSERT INTO ratings("+",".join(values.keys())+") VALUES("+",".join(["?" for _ in xrange(len(values.keys()))])+")", [values[k] for k in values.keys()]) + con.commit() + con.close() + + print("" % (values["page"], values["page"])) + print("") + return 0 + + +if __name__ == "__main__": + #try: + sys.exit(main(sys.argv)) + #except: + # print "Content-type: text/plain\r\n\r\n" + # print "Something went wrong! You were unable to Rate Sam's LitReview(TM)!\nPlease send him an abusive email instead \n" +