rewrite generate_parent_navs

* works on a path now, not a file location
* as such is sliiiiiightly easier to understand
* now also puts the current page in the nav
* fixed failing test where this caused an error (rather than 404) on
  non-existent paths
This commit is contained in:
2020-05-28 12:09:59 -05:00
parent 0993147dea
commit 059108c37b
2 changed files with 25 additions and 16 deletions

View File

@@ -18,11 +18,11 @@ md = markdown.Markdown(extensions=['meta', 'tables'])
def display_page(path):
"""Get the file contents of the requested path and render the file."""
resolved_path = resolve_page_file(path)
parent_navs = generate_parent_navs(resolved_path)
logger.debug("received request for path '%s', resolved to '%s'", path, resolved_path)
try:
with app.open_instance_resource(resolved_path, 'r') as entry_file:
logger.debug("file '%s' found", resolved_path)
parent_navs = generate_parent_navs(path)
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(entry_file.name), get_localzone())
entry = entry_file.read()
except FileNotFoundError:
@@ -52,17 +52,19 @@ def resolve_page_file(path):
def generate_parent_navs(path):
"""Create a series of paths/links to navigate up from the given path."""
parent_dir = os.path.dirname(path)
if parent_dir == 'pages':
# derive additional path/location stuff based on path
resolved_path = resolve_page_file(path)
parent_dir = os.path.dirname(resolved_path)
parent_path = '/'.join(path[:-1].split('/')[:-1]) + '/'
logger.debug("path: '%s'; parent path: '%s'; resolved path: '%s'; parent dir: '%s'",
path, parent_path, resolved_path, parent_dir)
if path in ('index', '/'):
return [(app.config['TITLE_SUFFIX'], '/')]
elif path.endswith('index.md'):
# if we're on an index.md, don't link to ourselves as we're our own parent
return generate_parent_navs(parent_dir)
else:
parent_path = f'{parent_dir}/'.replace('pages/', '/', 1)
resolved_parent_path = resolve_page_file(parent_path)
with app.open_instance_resource(resolved_parent_path, 'r') as entry_file:
with app.open_instance_resource(resolved_path, 'r') as entry_file:
entry = entry_file.read()
_ = Markup(md.convert(entry))
parent_name = " ".join(md.Meta.get('title')) if md.Meta.get('title') else os.path.basename(parent_dir)
return generate_parent_navs(parent_dir) + [(parent_name, parent_path)]
page_name = " ".join(md.Meta.get('title')) if md.Meta.get('title') else os.path.basename(resolved_path)
return generate_parent_navs(parent_path) + [(page_name, path)]