summaryrefslogtreecommitdiff
path: root/app.py
blob: ce481309ea6d47af952fd3b50994d910488abe31 (plain)
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()