From 1f420eab301566129417dc5a41420869eeec5d2f Mon Sep 17 00:00:00 2001 From: "Brian S. Stephan" Date: Sat, 7 Mar 2020 11:54:26 -0600 Subject: [PATCH] journal: render markdown content + title metadata this has a really basic template and whatnot at the moment, so styling/etc isn't done, but this is maybe the last major piece before I could actually see pushing this onto the site --- incorporealcms/journal.py | 12 ++++++++---- incorporealcms/templates/base.html | 5 +++++ requirements/requirements-dev.txt | 4 ++++ requirements/requirements.in | 1 + requirements/requirements.txt | 4 ++++ tests/instance/journal/index.md | 2 ++ tests/instance/journal/no-title.md | 1 + tests/test_journal.py | 14 ++++++++++++++ 8 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 incorporealcms/templates/base.html create mode 100644 tests/instance/journal/no-title.md diff --git a/incorporealcms/journal.py b/incorporealcms/journal.py index 1ebb2c9..59c1195 100644 --- a/incorporealcms/journal.py +++ b/incorporealcms/journal.py @@ -1,11 +1,13 @@ """Journal functionality.""" import logging -from flask import Blueprint, abort, current_app as app +import markdown +from flask import Blueprint, Markup, abort, current_app as app, render_template logger = logging.getLogger(__name__) bp = Blueprint('journal', __name__, url_prefix='/') +md = markdown.Markdown(extensions=['meta']) @bp.route('/', defaults={'path': 'index'}) @@ -17,13 +19,15 @@ def display_journal_entry(path): try: with app.open_instance_resource(resolved_path, 'r') as entry_file: logger.debug("file '%s' found", resolved_path) + entry = entry_file.read() except FileNotFoundError: logger.warning("requested path '%s' (resolved path '%s') not found!", path, resolved_path) abort(404) else: - return "OK" - - return resolved_path + content = Markup(md.convert(entry)) + logger.debug("file metadata: %s", md.Meta) + title = " ".join(md.Meta.get('title')) if md.Meta.get('title') else "" + return render_template('base.html', title=title, content=content) def journal_file_resolver(path): diff --git a/incorporealcms/templates/base.html b/incorporealcms/templates/base.html new file mode 100644 index 0000000..a1ea790 --- /dev/null +++ b/incorporealcms/templates/base.html @@ -0,0 +1,5 @@ + +{{ title }}{% if title %} - {% endif %}incorporeal.org +
+{{ content }} +
diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index 9b4ed08..3944654 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -12,6 +12,7 @@ flask==1.1.1 # via -r requirements/requirements.in importlib-metadata==1.5.0 # via pluggy, pytest itsdangerous==1.1.0 # via flask jinja2==2.11.1 # via flask +markdown==3.2.1 # via -r requirements/requirements.in markupsafe==1.1.1 # via jinja2 mccabe==0.6.1 # via flake8 more-itertools==8.2.0 # via pytest @@ -28,3 +29,6 @@ versioneer==0.18 # via -r requirements/requirements-dev.in wcwidth==0.1.8 # via pytest werkzeug==1.0.0 # via flask zipp==3.1.0 # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/requirements/requirements.in b/requirements/requirements.in index 17b9d2e..62ad2c6 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -1 +1,2 @@ Flask # general purpose web service and web server stuff +Markdown # markdown rendering in templates diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 1295a0c..f479d9f 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -8,5 +8,9 @@ click==7.0 # via flask flask==1.1.1 # via -r requirements/requirements.in itsdangerous==1.1.0 # via flask jinja2==2.11.1 # via flask +markdown==3.2.1 # via -r requirements/requirements.in markupsafe==1.1.1 # via jinja2 werkzeug==1.0.0 # via flask + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/tests/instance/journal/index.md b/tests/instance/journal/index.md index f02eb3f..0c436fa 100644 --- a/tests/instance/journal/index.md +++ b/tests/instance/journal/index.md @@ -1,3 +1,5 @@ +Title: Index + # test index this is some test content diff --git a/tests/instance/journal/no-title.md b/tests/instance/journal/no-title.md new file mode 100644 index 0000000..1718bb6 --- /dev/null +++ b/tests/instance/journal/no-title.md @@ -0,0 +1 @@ +# this page doesn't have a title! diff --git a/tests/test_journal.py b/tests/test_journal.py index a261802..28bb5ff 100644 --- a/tests/test_journal.py +++ b/tests/test_journal.py @@ -17,8 +17,22 @@ def test_journal_file_resolver_other_requests_fine(): def test_journal_file_that_exists(client): response = client.get('/') assert response.status_code == 200 + assert b'

test index

' in response.data def test_journal_file_that_doesnt_exist(client): response = client.get('/ohuesthaoeusth') assert response.status_code == 404 + + +def test_journal_file_with_title_metadata(client): + response = client.get('/') + assert response.status_code == 200 + assert b'Index - incorporeal.org' in response.data + + +def test_journal_file_without_title_metadata(client): + response = client.get('/no-title') + assert response.status_code == 200 + assert b'incorporeal.org' in response.data + assert b'

this page doesn\'t have a title!

' in response.data