aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app.py4
-rw-r--r--database.py5
-rw-r--r--parser.py155
-rw-r--r--static/style.css2
4 files changed, 104 insertions, 62 deletions
diff --git a/app.py b/app.py
index 5978281..7cc97d9 100644
--- a/app.py
+++ b/app.py
@@ -83,7 +83,7 @@ def get_thought():
flask.abort(404)
return
return flask.render_template_string(
- parsed,
+ '{% extends "template.html" %}\n{% block content %}\n' + parsed + '\n{% endblock %}',
**get_template_items(title, db),
thought = True,
dt = "published: " + str(dt),
@@ -145,7 +145,5 @@ def preview():
else:
flask.abort(404)
-
-
if __name__ == "__main__":
app.run(host = "0.0.0.0", debug = True) \ No newline at end of file
diff --git a/database.py b/database.py
index 6bf3c1f..181effb 100644
--- a/database.py
+++ b/database.py
@@ -84,6 +84,11 @@ class Database:
WHERE thought_id = %s;""", (id_, ))
return cursor.fetchone()
+ def update_thought_markdown(self, id_, markdown):
+ with self.__connection.cursor() as cursor:
+ cursor.execute("UPDATE thoughts SET markdown_text = %s WHERE thought_id = %s;", (markdown, id_))
+ self.__connection.commit()
+
def get_categories_not(self, category_name):
with self.__connection.cursor() as cursor:
cursor.execute("SELECT category_name FROM categories WHERE category_name != %s;", (category_name, ))
diff --git a/parser.py b/parser.py
index cce0cb0..d8dedea 100644
--- a/parser.py
+++ b/parser.py
@@ -1,12 +1,20 @@
-import argparse
from urllib.parse import urlparse
import webbrowser
import database
+import argparse
import getpass
import app
+import sys
import re
import os
+# DISCLAIMER
+# There is almost certainly a python package to
+# do this better. I wanted to do it myself as a challenge.
+
+# TODO:
+# - Add table formatting
+
HEADER_INCREMENTER = 1
IMAGE_TYPES = [".png", ".jpg"]
@@ -28,7 +36,7 @@ def parse_text(unformatted):
formatted = parse_lists(formatted)
formatted = add_linebreaks(formatted)
- return '{% extends "template.html" %}\n{% block content %}\n' + formatted + '\n{% endblock %}'
+ return formatted
def parse_headers(test_str):
regex = r"^#{1,5}\s\w.*$"
@@ -161,65 +169,96 @@ def preview_markdown(path, title, category):
def main():
p = argparse.ArgumentParser()
- p.add_argument(
- "markdown",
- help = "Path to a markdown file",
- type = str
- )
- p.add_argument(
- "-u", "--username",
- help = "Username to use for the database",
- required = True,
- type = str
- )
- p.add_argument(
- "-t", "--title",
- help = "Article title",
- required = True,
- type = str
- )
- p.add_argument(
- "-c", "--category",
- help = "Article category",
- required = True,
- type = str
- )
- g = p.add_mutually_exclusive_group(required = True)
- g.add_argument(
- "-p", "--preview",
- help = "Preview markdown rendering",
- action='store_true'
- )
- g.add_argument(
- "-s", "--save",
- help = "Save markdown to database",
- action='store_true'
- )
- g.add_argument(
- "-e", "--echo",
- help = "Print parsed markdown to stdout",
- action='store_true'
+ subparse = p.add_subparsers(help = "sub-command help")
+ save_parser = subparse.add_parser("save", help = "Add a markdown file to the database")
+ preview_parser = subparse.add_parser("preview", help = "Preview a markdown render")
+ echo_parser = subparse.add_parser("echo", help = "Print markdown render to stdout")
+ update_parser = subparse.add_parser("update", help = "Replace a markdown file")
+ export_parser = subparse.add_parser("export", help = "Export a database markdown file to disk")
+
+ for s in [save_parser, preview_parser, echo_parser, update_parser]:
+ s.add_argument(
+ "-m", "--markdown",
+ help = "Path to a markdown file",
+ type = str,
+ required = True
+ )
+
+ for s in [save_parser, preview_parser]:
+ s.add_argument(
+ "-t", "--title",
+ help = "Article title",
+ type = str,
+ required = True
+ )
+ s.add_argument(
+ "-c", "--category",
+ help = "Article category",
+ type = str,
+ required = True
+ )
+
+ for s in [save_parser, update_parser, export_parser]:
+ s.add_argument(
+ "-u", "--username",
+ help = "Username to use for the database",
+ type = str,
+ required = True
+ )
+
+ for s in [export_parser, update_parser]:
+ s.add_argument(
+ "-i", "--id",
+ help = "Article's id",
+ type = int,
+ required = True
+ )
+
+ export_parser.add_argument(
+ "-o", "--out",
+ help = "Path to write the markdown file to",
+ type = str,
+ required = True
)
+
args = vars(p.parse_args())
- passwd = getpass.getpass("Enter password for %s@%s: " % (args["username"], app.CONFIG["mysql"]["host"]))
-
- with database.Database(
- safeLogin = False,
- user = args["username"],
- passwd = passwd
- ) as db:
-
- if args["preview"]:
- preview_markdown(args["markdown"], args["title"], args["category"])
- elif args["save"]:
- if db.add_category(args["category"]):
- print("Added category...")
- with open(args["markdown"], "r") as f:
- db.add_thought(args["category"], args["title"], f.read())
- print("Added thought...")
- else:
- print(parse_file(args["markdown"]))
+ if "username" in args.keys():
+ args["password"] = getpass.getpass("Enter password for %s@%s: " % (args["username"], app.CONFIG["mysql"]["host"]))
+
+ try:
+ verb = sys.argv[1]
+ except IndexError:
+ print("No verb specified... Nothing to do... Exiting...")
+ exit()
+
+ if verb in ["save", "export", "update"]:
+ with database.Database(
+ safeLogin = False,
+ user = args["username"],
+ passwd = args["password"]
+ ) as db:
+ if verb == "save":
+ if db.add_category(args["category"]):
+ print("Added category...")
+ with open(args["markdown"], "r") as f:
+ db.add_thought(args["category"], args["title"], f.read())
+ print("Added thought...")
+
+ elif verb == "export":
+ with open(args["out"], "w") as f:
+ f.writelines(db.get_thought(args["id"])[-1])
+ print("Written to %s" % args["out"])
+
+ elif verb == "update":
+ with open(args["markdown"], "r") as f:
+ db.update_thought_markdown(args["id"], f.read())
+
+ if verb == "preview":
+ preview_markdown(args["markdown"], args["title"], args["category"])
+
+ elif verb == "echo":
+ print(parse_file(args["markdown"]))
if __name__ == "__main__":
main() \ No newline at end of file
diff --git a/static/style.css b/static/style.css
index 93ec3ed..1ac4ec3 100644
--- a/static/style.css
+++ b/static/style.css
@@ -53,7 +53,7 @@ header span nav ul li a {
}
header div {
- padding-left: 30px;
+ padding-left: 20px;
padding-bottom: 10px;
}