summaryrefslogtreecommitdiff
path: root/app.py
blob: 7122b06e93792d2b8beba2ec394aa7bcee0036fa (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
from paste.translogger import TransLogger
from waitress import serve

import datetime
import database
import urllib
import parser
import flask
import sys
import os

app = flask.Flask(__name__)

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 != 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("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("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
        )

if __name__ == "__main__":
    try:
        if sys.argv[1] == "--production":
            serve(TransLogger(app), host='0.0.0.0', port = 6969)
        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)