1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
from paste.translogger import TransLogger
from waitress import serve
from pathlib import Path
import datetime
import database
import urllib
import parser
import flask
import sys
import os
app = flask.Flask(__name__)
THIS_FOLDER = Path(__file__).parent.resolve()
def get_correct_article_headers(db:database.Database, title):
db_headers = list(db.get_header_links())
if title in [i[0] for i in db_headers]:
out = []
for i in db_headers:
if i[0] != title:
out.append(i)
return out + [("index", "/~")]
else:
return db_headers + [("index", "/~")]
def get_template_items(title, db):
return {
"links": db.get_header_links(),
"title": title,
"articles": get_correct_article_headers(db, title)
}
@app.route("/")
@app.route("/~")
def index():
with database.Database() as db:
with open(os.path.join(THIS_FOLDER, "static", "index.md"), "r") as f:
return flask.render_template(
"index.html.j2",
**get_template_items("eva's site", db),
markdown = parser.parse_text(f.read())[0]
)
@app.route("/robots.txt")
def robots():
return flask.send_from_directory(THIS_FOLDER, "static", "robots.txt")
@app.route("/thoughts")
def get_thoughts():
with database.Database() as db:
all_ = db.get_all_thoughts()
tree = {}
for id_, title, datetime, category in all_:
if category not in tree.keys():
tree[category] = [(id_, title, datetime)]
else:
tree[category].append((id_, title, str(datetime)))
return flask.render_template(
"thoughts.html.j2",
**get_template_items("thoughts", db),
tree = tree
)
@app.route("/thought")
def get_thought():
thought_id = flask.request.args.get("id", type=int)
with database.Database() as db:
try:
title, datetime, redirect, category_name, parsed, headers = parser.get_thought_from_id(db, thought_id)
except TypeError:
flask.abort(404)
return
if redirect is not None:
return flask.redirect(redirect, code = 301)
return flask.render_template(
"thought.html.j2",
**get_template_items(title, db),
md_html = parsed,
contents_html = headers,
datetime = "published: " + str(datetime),
category = category_name
)
def main():
try:
if sys.argv[1] == "--production":
serve(TransLogger(app), host='0.0.0.0', port = 5173)
else:
app.run(host = "0.0.0.0", port = 5001, debug = True)
except IndexError:
app.run(host = "0.0.0.0", port = 5001, debug = True)
if __name__ == "__main__":
main()
|