From 041d920cd79641713a309ca5cc15c49445ffc326 Mon Sep 17 00:00:00 2001 From: Siyadong Xiong Date: Mon, 24 Oct 2016 18:05:51 -0400 Subject: [PATCH 1/3] init --- .gitignore | 1 + squawker/.idea/vcs.xml | 6 +++ squawker/schema.sql | 11 +++-- squawker/server.py | 34 ++++++++++++++-- squawker/templates/base.html | 79 ++++++++++++++++++++++++++++++++++++ 5 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 squawker/.idea/vcs.xml create mode 100644 squawker/templates/base.html diff --git a/.gitignore b/.gitignore index 7de88e3..dfe943b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ __pycache__/ *.db3 *.sqlite *.sqlite3 +.idea/ diff --git a/squawker/.idea/vcs.xml b/squawker/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/squawker/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/squawker/schema.sql b/squawker/schema.sql index 5e67ffb..0543f2b 100644 --- a/squawker/schema.sql +++ b/squawker/schema.sql @@ -1,3 +1,8 @@ --- 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); + +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); diff --git a/squawker/server.py b/squawker/server.py index 6ff24ba..56546cc 100644 --- a/squawker/server.py +++ b/squawker/server.py @@ -1,9 +1,10 @@ -from flask import Flask, g +from flask import Flask, g, render_template import sqlite3 - +from datetime import datetime, timezone # -- leave these lines intact -- app = Flask(__name__) +FORMAT = "%Y-%m-%d %H:%M:%S" def get_db(): @@ -34,14 +35,39 @@ def close_connection(exception): db = getattr(g, 'sqlite_db', None) if db is not None: db.close() + + # ------------------------------ @app.route('/') def root(): + # conn = get_db() + # TODO + + items = _get_all_post() + + return render_template('base.html', items=items, page=1) + + +def _get_all_post(): conn = get_db() - # TODO change this - return "Hello World!" + cur = conn.cursor() + cur.execute("SELECT post, ts FROM squawker ORDER BY ts;") + items = cur.fetchall() + map(lambda r: (r[0], _convert_time(r[1])), items) + return items + + +def _convert_time(ts): + dt = datetime.strptime(ts, FORMAT) + _ = dt.replace(tzinfo=timezone.utc).astimezone(tz=None) + return _.strftime(FORMAT) + + +@app.route('/post') +def do_post(): + pass if __name__ == '__main__': diff --git a/squawker/templates/base.html b/squawker/templates/base.html new file mode 100644 index 0000000..0bb466c --- /dev/null +++ b/squawker/templates/base.html @@ -0,0 +1,79 @@ + + + + + Squawker + + +
+
+ +
+ +
+
+
+
+{% if items %} +
+ + + + + + {% for item, ts in items %} + + + + + {% endfor %} +
ContentTime
+

{{ item }}

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

No posts yet.

+{% endif %} + + + + \ No newline at end of file From a84030645aa4695c0b1821b2a97057806de4ced7 Mon Sep 17 00:00:00 2001 From: Siyadong Xiong Date: Mon, 24 Oct 2016 18:58:33 -0400 Subject: [PATCH 2/3] finish required part --- .gitignore | 1 + squawker/.idea/vcs.xml | 6 ----- squawker/schema.sql | 20 +++++++++++++++ squawker/server.py | 50 +++++++++++++++++++++++++++--------- squawker/templates/base.html | 7 +++-- 5 files changed, 64 insertions(+), 20 deletions(-) delete mode 100644 squawker/.idea/vcs.xml diff --git a/.gitignore b/.gitignore index dfe943b..2809cb8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ __pycache__/ *.sqlite *.sqlite3 .idea/ +*/.idea/ diff --git a/squawker/.idea/vcs.xml b/squawker/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/squawker/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/squawker/schema.sql b/squawker/schema.sql index 0543f2b..f8737a5 100644 --- a/squawker/schema.sql +++ b/squawker/schema.sql @@ -6,3 +6,23 @@ CREATE TABLE squawker (id INTEGER PRIMARY KEY AUTOINCREMENT, INSERT INTO squawker (post) VALUES ("Hello, I'm test."); INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); +INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); diff --git a/squawker/server.py b/squawker/server.py index 56546cc..f9bfb44 100644 --- a/squawker/server.py +++ b/squawker/server.py @@ -1,10 +1,12 @@ -from flask import Flask, g, render_template +from flask import Flask, g, render_template, request, redirect, url_for 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(): @@ -41,22 +43,30 @@ def close_connection(exception): @app.route('/') -def root(): - # conn = get_db() - # TODO +@app.route('/') +def root(cur_page=None): + if cur_page is None: + cur_page = 1 - items = _get_all_post() + 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) - return render_template('base.html', items=items, page=1) + items = _get_one_page(cur_page) + return render_template('base.html', items=items, page=cur_page, page_count=page_count) -def _get_all_post(): + +def _get_one_page(page): conn = get_db() cur = conn.cursor() - cur.execute("SELECT post, ts FROM squawker ORDER BY ts;") + 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 items + _ = map(lambda r: (r[0], _convert_time(r[1])), items) + return _ def _convert_time(ts): @@ -65,9 +75,25 @@ def _convert_time(ts): return _.strftime(FORMAT) -@app.route('/post') +@app.route('/post', methods=["POST"]) def do_post(): - pass + 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: + pass + + +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 index 0bb466c..8ac43ec 100644 --- a/squawker/templates/base.html +++ b/squawker/templates/base.html @@ -7,9 +7,10 @@
-
@@ -37,7 +38,9 @@
{% else %} From b8ab0cea0bd64ab9a4d4a608395fb46efe884021 Mon Sep 17 00:00:00 2001 From: Siyadong Xiong Date: Mon, 24 Oct 2016 19:09:59 -0400 Subject: [PATCH 3/3] add abort400 --- squawker/schema.sql | 23 ----------------------- squawker/server.py | 4 ++-- 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/squawker/schema.sql b/squawker/schema.sql index f8737a5..5f7c315 100644 --- a/squawker/schema.sql +++ b/squawker/schema.sql @@ -3,26 +3,3 @@ DROP TABLE IF EXISTS squawker; CREATE TABLE squawker (id INTEGER PRIMARY KEY AUTOINCREMENT, post VARCHAR(150), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP); - -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); -INSERT INTO squawker (post) VALUES ("Hello, I'm 2nd test."); diff --git a/squawker/server.py b/squawker/server.py index f9bfb44..64d69f7 100644 --- a/squawker/server.py +++ b/squawker/server.py @@ -1,4 +1,4 @@ -from flask import Flask, g, render_template, request, redirect, url_for +from flask import Flask, g, render_template, request, redirect, url_for, abort import sqlite3 from datetime import datetime, timezone import math @@ -89,7 +89,7 @@ def do_post(): return redirect(url_for("root")) else: - pass + abort(400) def is_valid(text):