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
+
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