Use custom exception for (failing to) overwrite files

This commit is contained in:
MinchinWeb 2026-03-31 19:24:32 -06:00
commit 3de99f293a
2 changed files with 12 additions and 5 deletions

View file

@ -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...',

View file

@ -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)