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