diff --git a/.gitignore b/.gitignore index 7de88e3..2809cb8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ __pycache__/ *.db3 *.sqlite *.sqlite3 +.idea/ +*/.idea/ diff --git a/squawker/schema.sql b/squawker/schema.sql index 5e67ffb..5f7c315 100644 --- a/squawker/schema.sql +++ b/squawker/schema.sql @@ -1,3 +1,5 @@ --- TODO change this -DROP TABLE IF EXISTS mytable; -CREATE TABLE mytable (id integer); +-- TODO CHANGE THIS +DROP TABLE IF EXISTS squawker; +CREATE TABLE squawker (id INTEGER PRIMARY KEY AUTOINCREMENT, + post VARCHAR(150), + ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP); diff --git a/squawker/server.py b/squawker/server.py index 6ff24ba..64d69f7 100644 --- a/squawker/server.py +++ b/squawker/server.py @@ -1,9 +1,12 @@ -from flask import Flask, g +from flask import Flask, g, render_template, request, redirect, url_for, abort import sqlite3 - +from datetime import datetime, timezone +import math # -- leave these lines intact -- app = Flask(__name__) +FORMAT = "%Y-%m-%d %H:%M:%S" +PER_PAGE = 20 def get_db(): @@ -34,14 +37,63 @@ def close_connection(exception): db = getattr(g, 'sqlite_db', None) if db is not None: db.close() + + # ------------------------------ @app.route('/') -def root(): +@app.route('/') +def root(cur_page=None): + if cur_page is None: + cur_page = 1 + + conn = get_db() + cur = conn.cursor() + cur.execute("SELECT count(*) FROM squawker ORDER BY ts DESC;") + page_count = math.ceil(cur.fetchone()[0] / 20) + print(page_count) + + items = _get_one_page(cur_page) + + return render_template('base.html', items=items, page=cur_page, page_count=page_count) + + +def _get_one_page(page): conn = get_db() - # TODO change this - return "Hello World!" + cur = conn.cursor() + cur.execute("SELECT post, ts FROM squawker ORDER BY ts DESC LIMIT %d OFFSET %d;" % ( + PER_PAGE, (int(page) - 1) * PER_PAGE)) + items = cur.fetchall() + _ = map(lambda r: (r[0], _convert_time(r[1])), items) + return _ + + +def _convert_time(ts): + dt = datetime.strptime(ts, FORMAT) + _ = dt.replace(tzinfo=timezone.utc).astimezone(tz=None) + return _.strftime(FORMAT) + + +@app.route('/post', methods=["POST"]) +def do_post(): + text = request.form['input-post'] + print(text) + + if is_valid(text): + conn = get_db() + cur = conn.cursor() + stmt = 'INSERT INTO squawker (post) VALUES ("{0}");'.format(text) + cur.execute(stmt) + conn.commit() + + return redirect(url_for("root")) + else: + abort(400) + + +def is_valid(text): + return 0 < len(text.rstrip()) <= 140 if __name__ == '__main__': diff --git a/squawker/templates/base.html b/squawker/templates/base.html new file mode 100644 index 0000000..8ac43ec --- /dev/null +++ b/squawker/templates/base.html @@ -0,0 +1,82 @@ + + + + + Squawker + + +
+
+ +
+ +
+
+
+
+{% if items %} +
+ + + + + + {% for item, ts in items %} + + + + + {% endfor %} +
ContentTime
+

{{ item }}

+
+
{{ ts }}
+
+ +{% else %} +

No posts yet.

+{% endif %} + + + + \ No newline at end of file