From 3de99f293a15f6003d09c46b7380f39d2b1a7c87 Mon Sep 17 00:00:00 2001 From: MinchinWeb Date: Tue, 31 Mar 2026 19:24:32 -0600 Subject: [PATCH] Use custom exception for (failing to) overwrite files --- pelican/generators.py | 7 ++++--- pelican/writers.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pelican/generators.py b/pelican/generators.py index 65fcb9c3..b7eef104 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -30,6 +30,7 @@ from pelican.utils import ( posixize_path, process_translations, ) +from pelican.writers import FileOverwriteFailedError logger = logging.getLogger(__name__) @@ -584,7 +585,7 @@ class ArticlesGenerator(CachingGenerator): page_name=tag.page_name, all_articles=self.articles, ) - except RuntimeError: + except FileOverwriteFailedError: if not tag.slug: logger.info( 'Tag "%s" has an invalid slug; skipping writing tag page...', @@ -615,7 +616,7 @@ class ArticlesGenerator(CachingGenerator): page_name=cat.page_name, all_articles=self.articles, ) - except RuntimeError: + except FileOverwriteFailedError: if not cat.slug: logger.info( 'Category "%s" has an invalid slug; skipping writing category page...', @@ -646,7 +647,7 @@ class ArticlesGenerator(CachingGenerator): page_name=aut.page_name, all_articles=self.articles, ) - except RuntimeError: + except FileOverwriteFailedError: if not aut.slug: logger.info( 'Author "%s" has an invalid slug; skipping writing author page...', diff --git a/pelican/writers.py b/pelican/writers.py index 009d761a..07aa6d42 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -18,6 +18,10 @@ from pelican.utils import ( logger = logging.getLogger(__name__) +class FileOverwriteFailedError(RuntimeError): + """Failed to overwrite an existing file.""" + + class Writer: def __init__(self, output_path, settings=None): self.output_path = output_path @@ -107,14 +111,16 @@ class Writer: """ if filename in self._overridden_files: if override: - raise RuntimeError(f"File {filename} is set to be overridden twice") + raise FileOverwriteFailedError( + f"File {filename} is set to be overridden twice" + ) logger.info("Skipping %s", filename) filename = os.devnull elif filename in self._written_files: if override: logger.info("Overwriting %s", filename) else: - raise RuntimeError(f"File {filename} is to be overwritten") + raise FileOverwriteFailedError(f"File {filename} is to be overwritten") if override: self._overridden_files.add(filename) self._written_files.add(filename)