rewrite generate_parent_navs to work on resource paths
the old code was kind of impossible to understand by reading it, so this is hopefully considerably clearer
This commit is contained in:
@@ -32,17 +32,18 @@ def display_page(path):
|
||||
|
||||
try:
|
||||
with app.open_instance_resource(resolved_path, 'r') as entry_file:
|
||||
parent_navs = generate_parent_navs(path)
|
||||
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(entry_file.name), get_localzone())
|
||||
entry = entry_file.read()
|
||||
except FileNotFoundError:
|
||||
logger.warning("requested path '%s' (resolved path '%s') not found!", path, resolved_path)
|
||||
abort(404)
|
||||
except OSError:
|
||||
logger.error("resolved path '%s' could not be opened!", resolved_path)
|
||||
abort(500)
|
||||
else:
|
||||
md = init_md()
|
||||
content = Markup(md.convert(entry))
|
||||
logger.debug("file metadata: %s", md.Meta)
|
||||
|
||||
parent_navs = generate_parent_navs(resolved_path)
|
||||
|
||||
return render('base.html', title=get_meta_str(md, 'title'), description=get_meta_str(md, 'description'),
|
||||
image=get_meta_str(md, 'image'), base_url=request.base_url, content=content, navs=parent_navs,
|
||||
mtime=mtime.strftime('%Y-%m-%d %H:%M:%S %Z'))
|
||||
@@ -135,22 +136,32 @@ def resolve_page_file(path):
|
||||
|
||||
|
||||
def generate_parent_navs(path):
|
||||
"""Create a series of paths/links to navigate up from the given path."""
|
||||
# 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', '/'):
|
||||
"""Create a series of paths/links to navigate up from the given resource path."""
|
||||
if path == 'pages/index.md':
|
||||
# bail and return the title suffix (generally the domain name) as a terminal case
|
||||
return [(app.config['TITLE_SUFFIX'], '/')]
|
||||
else:
|
||||
with app.open_instance_resource(resolved_path, 'r') as entry_file:
|
||||
entry = entry_file.read()
|
||||
if path.endswith('index.md'):
|
||||
# index case: one dirname for foo/bar/index.md -> foo/bar, one for foo/bar -> foo
|
||||
parent_resource_dir = os.path.dirname(os.path.dirname(path))
|
||||
else:
|
||||
# usual case: foo/buh.md -> foo
|
||||
parent_resource_dir = os.path.dirname(path)
|
||||
|
||||
# generate the request path (i.e. what the link will be) for this path, and
|
||||
# also the resource path of this parent (which is always a dir, so always index.md)
|
||||
request_path = f'/{instance_resource_path_to_request_path(path)}'
|
||||
parent_resource_path = os.path.join(parent_resource_dir, 'index.md')
|
||||
|
||||
logger.debug("resource path: '%s'; request path: '%s'; parent resource path: '%s'", path,
|
||||
request_path, parent_resource_path)
|
||||
|
||||
# for issues regarding parser reuse (see lib.init_md) we reinitialize the parser here
|
||||
md = init_md()
|
||||
|
||||
# read the resource
|
||||
with app.open_instance_resource(path, 'r') as entry_file:
|
||||
entry = entry_file.read()
|
||||
_ = Markup(md.convert(entry))
|
||||
page_name = " ".join(md.Meta.get('title')) if md.Meta.get('title') else f'/{path}'
|
||||
return generate_parent_navs(parent_path) + [(page_name, f'/{path}')]
|
||||
page_name = " ".join(md.Meta.get('title')) if md.Meta.get('title') else request_path
|
||||
return generate_parent_navs(parent_resource_path) + [(page_name, request_path)]
|
||||
|
||||
Reference in New Issue
Block a user