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(os.path.join("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() return flask.render_template( "thoughts.html.j2", **get_template_items("thoughts", db), ) @app.route("/thought") def get_thought(): thought_id = flask.request.args.get("id", type=int) with database.Database() as db: try: title, datetime, parsed, headers, redirect = 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) ) 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)