summaryrefslogtreecommitdiff
path: root/app.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2016-05-27 22:00:58 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2016-05-27 22:00:58 +0200
commit16ec509d268d55023f735a10d4336b067d992a28 (patch)
treefaced7190151a891d0853a7befcb3e19f3f2c0f4 /app.py
parent4ab8f23864326e2365510b4c7c01899f9a364e19 (diff)
downloadjokevote-16ec509d268d55023f735a10d4336b067d992a28.tar.gz
jokevote-16ec509d268d55023f735a10d4336b067d992a28.zip
use sqlite, skeletonCSS
Diffstat (limited to 'app.py')
-rw-r--r--app.py71
1 files changed, 57 insertions, 14 deletions
diff --git a/app.py b/app.py
index bcc1346..d4d850d 100644
--- a/app.py
+++ b/app.py
@@ -1,43 +1,86 @@
+#!/usr/bin/python3
+import markdown
from flask import (
Flask,
render_template,
- request
+ Markup,
+ request,
+ g,
+ send_from_directory,
+ redirect
)
-import pymongo
+import sqlite3
class dbProxy(object):
- def __init__(self, mongouri):
- self.client = pymongo.MongoClient(mongouri)
- self.db = self.client['jokevotedb']
+ def __init__(self, db):
+ self.conn = sqlite3.connect(db)
+ self.c = self.conn.cursor()
+
+ def create(self):
+ self.c.execute("CREATE TABLE IF NOT EXISTS jokes(id INTEGER PRIMARY KEY NOT NULL, text TEXT, upvotes INTEGER, downvotes INTEGER)")
+
+ def close(self):
+ self.conn.close()
def getJokes(self):
- jokes = []
- for joke in self.db.jokes.find():
- jokes.append(joke)
+ jokes = self.c.execute("SELECT * FROM jokes").fetchall()
+ jokes = [{"id": id, "text": text, "upvotes": upvotes, "downvotes": downvotes} for id, text, upvotes, downvotes in jokes]
return jokes
def addJoke(self, text):
- self.db.jokes.insert_one({'text': text, 'votes': 0})
+ self.c.execute("INSERT INTO jokes(text, upvotes, downvotes) VALUES (?, 0, 0)", (text, ))
+ self.conn.commit()
+
+ def voteJoke(self, objectId, down):
+ if down:
+ self.c.execute("UPDATE jokes SET downvotes=downvotes+1 WHERE id=?", (objectId))
+ else:
+ self.c.execute("UPDATE jokes SET upvotes=upvotes+1 WHERE id=?", (objectId))
+ self.conn.commit()
+def db():
+ db = getattr(g, "_database", None)
+ if db is None:
+ db = g._database = dbProxy("votes.db")
+ db.create()
+ return db
+
app = Flask(__name__)
-db = dbProxy(
- 'mongodb://jokevote:jokevote@127.0.0.1:27017/jokevotedb')
+@app.teardown_appcontext
+def close_db(exception):
+ db = getattr(g, "_database", None)
+ if db is not None:
+ db.close()
+
@app.route('/')
def root():
- jokes = db.getJokes()
+ jokes = db().getJokes()
+ for joke in jokes:
+ joke['text'] = Markup(markdown.markdown(joke['text'], extensions=['markdown.extensions.nl2br'], output_format="html5", safe_mode="remove")) # TODO cache TODO safe_mode deprecated
return render_template('index.html', jokes=jokes)
@app.route('/submit', methods=['POST'])
def submit():
text = request.form['text']
- db.addJoke(text) # TODO secure this
- return root()
+ db().addJoke(text) # TODO auth
+ return redirect('/')
+
+@app.route('/vote', methods=['POST'])
+def vote():
+ objectId = request.form['id']
+ db().voteJoke(objectId, request.form['vote'] == 'downvote')
+ return redirect('/')
+@app.route('/static/<path:path>')
+def get_static(path):
+ return send_from_directory('static', path)
+# TODO sort by votes
+# TODO buttons floating weird
if __name__ == '__main__':
app.run(debug=True)