BlogPlugin: handling of generated blog posts

This commit is contained in:
Konstantin Nosov 2024-10-04 12:56:08 +03:00
parent ffcabcaa15
commit fe49397c21
2 changed files with 70 additions and 60 deletions

View File

@ -52,13 +52,18 @@ class Post(Page):
def __init__(self, file: File, config: MkDocsConfig): def __init__(self, file: File, config: MkDocsConfig):
super().__init__(None, file, config) super().__init__(None, file, config)
if file.generated_by is None:
# Resolve path relative to docs directory # Resolve path relative to docs directory
docs = os.path.relpath(config.docs_dir) docs = os.path.relpath(config.docs_dir)
path = os.path.relpath(file.abs_src_path, docs) path = os.path.relpath(file.abs_src_path, docs)
file_origin = f" in '{docs}'"
else:
# Path for generated posts
path = file.src_path
file_origin = f" generated by '{file.generated_by}'"
# Read contents and metadata immediately # Read contents and metadata immediately
with open(file.abs_src_path, encoding = "utf-8-sig") as f: self.markdown = file.content_string
self.markdown = f.read()
# Sadly, MkDocs swallows any exceptions that occur during parsing. # Sadly, MkDocs swallows any exceptions that occur during parsing.
# Since we want to provide the best possible user experience, we # Since we want to provide the best possible user experience, we
@ -70,7 +75,7 @@ class Post(Page):
match: Match = YAML_RE.match(self.markdown) match: Match = YAML_RE.match(self.markdown)
if not match: if not match:
raise PluginError( raise PluginError(
f"Error reading metadata of post '{path}' in '{docs}':\n" f"Error reading metadata of post '{path}' {file_origin}:\n"
f"Expected metadata to be defined but found nothing" f"Expected metadata to be defined but found nothing"
) )
@ -83,7 +88,7 @@ class Post(Page):
# which we display to the author with a nice error message # which we display to the author with a nice error message
except Exception as e: except Exception as e:
raise PluginError( raise PluginError(
f"Error reading metadata of post '{path}' in '{docs}':\n" f"Error reading metadata of post '{path}' {file_origin}:\n"
f"{e}" f"{e}"
) )
@ -103,7 +108,7 @@ class Post(Page):
log.warning(w) log.warning(w)
for k, e in errors: for k, e in errors:
raise PluginError( raise PluginError(
f"Error reading metadata '{k}' of post '{path}' in '{docs}':\n" f"Error reading metadata '{k}' of post '{path}' {file_origin}:\n"
f"{e}" f"{e}"
) )

View File

@ -52,13 +52,18 @@ class Post(Page):
def __init__(self, file: File, config: MkDocsConfig): def __init__(self, file: File, config: MkDocsConfig):
super().__init__(None, file, config) super().__init__(None, file, config)
if file.generated_by is None:
# Resolve path relative to docs directory # Resolve path relative to docs directory
docs = os.path.relpath(config.docs_dir) docs = os.path.relpath(config.docs_dir)
path = os.path.relpath(file.abs_src_path, docs) path = os.path.relpath(file.abs_src_path, docs)
file_origin = f" in '{docs}'"
else:
# Path for generated posts
path = file.src_path
file_origin = f" generated by '{file.generated_by}'"
# Read contents and metadata immediately # Read contents and metadata immediately
with open(file.abs_src_path, encoding = "utf-8-sig") as f: self.markdown = file.content_string
self.markdown = f.read()
# Sadly, MkDocs swallows any exceptions that occur during parsing. # Sadly, MkDocs swallows any exceptions that occur during parsing.
# Since we want to provide the best possible user experience, we # Since we want to provide the best possible user experience, we
@ -70,7 +75,7 @@ class Post(Page):
match: Match = YAML_RE.match(self.markdown) match: Match = YAML_RE.match(self.markdown)
if not match: if not match:
raise PluginError( raise PluginError(
f"Error reading metadata of post '{path}' in '{docs}':\n" f"Error reading metadata of post '{path}' {file_origin}:\n"
f"Expected metadata to be defined but found nothing" f"Expected metadata to be defined but found nothing"
) )
@ -83,7 +88,7 @@ class Post(Page):
# which we display to the author with a nice error message # which we display to the author with a nice error message
except Exception as e: except Exception as e:
raise PluginError( raise PluginError(
f"Error reading metadata of post '{path}' in '{docs}':\n" f"Error reading metadata of post '{path}' {file_origin}:\n"
f"{e}" f"{e}"
) )
@ -103,7 +108,7 @@ class Post(Page):
log.warning(w) log.warning(w)
for k, e in errors: for k, e in errors:
raise PluginError( raise PluginError(
f"Error reading metadata '{k}' of post '{path}' in '{docs}':\n" f"Error reading metadata '{k}' of post '{path}' {file_origin}:\n"
f"{e}" f"{e}"
) )