From 70767ca8bae9df1519fec6fae0ba7890eb3c0cd5 Mon Sep 17 00:00:00 2001 From: Sam Bull Date: Mon, 13 Apr 2026 10:11:12 +0100 Subject: [PATCH] fix: Don't log feed warning if `FEED_DOMAIN` is set --- pelican/settings.py | 5 +++-- pelican/tests/test_settings.py | 37 +++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/pelican/settings.py b/pelican/settings.py index 98b1357e..dbe903f1 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -673,9 +673,10 @@ def configure_settings(settings: Settings) -> Settings: ] if any(settings.get(k) for k in feed_keys): - if not settings.get("SITEURL"): + if not (settings.get("SITEURL") or settings.get("FEED_DOMAIN")): logger.warning( - "Feeds generated without SITEURL set properly may not be valid" + "Feeds generated without SITEURL or FEED_DOMAIN set properly" + " may not be valid" ) if "TIMEZONE" not in settings: diff --git a/pelican/tests/test_settings.py b/pelican/tests/test_settings.py index 84f7a5c9..59eebd53 100644 --- a/pelican/tests/test_settings.py +++ b/pelican/tests/test_settings.py @@ -1,8 +1,10 @@ import copy import locale +import logging import os from os.path import abspath, dirname, join +from pelican import log from pelican.settings import ( DEFAULT_CONFIG, DEFAULT_THEME, @@ -11,7 +13,7 @@ from pelican.settings import ( handle_deprecated_settings, read_settings, ) -from pelican.tests.support import unittest +from pelican.tests.support import LogCountHandler, unittest class TestSettingsConfiguration(unittest.TestCase): @@ -108,6 +110,39 @@ class TestSettingsConfiguration(unittest.TestCase): configure_settings(settings) self.assertEqual(settings["FEED_DOMAIN"], "http://feeds.example.com") + def _feeds_warning_settings(self, **overrides): + base = { + "LOCALE": "", + "PATH": os.curdir, + "THEME": DEFAULT_THEME, + "FEED_RSS": "feeds/all.rss.xml", + } + base.update(overrides) + handler = LogCountHandler() + logger = logging.getLogger() + logger.addHandler(handler) + saved = log.LimitFilter._raised_messages.copy() + log.LimitFilter._raised_messages = set() + try: + configure_settings(base) + return handler.count_logs( + "Feeds generated without SITEURL", logging.WARNING + ) + finally: + log.LimitFilter._raised_messages = saved + logger.removeHandler(handler) + + def test_feeds_warning_with_siteurl(self): + self.assertEqual(self._feeds_warning_settings(SITEURL="http://example.com"), 0) + + def test_feeds_warning_with_feed_domain(self): + self.assertEqual( + self._feeds_warning_settings(FEED_DOMAIN="http://feeds.example.com"), 0 + ) + + def test_feeds_warning_without_siteurl_or_feed_domain(self): + self.assertEqual(self._feeds_warning_settings(), 1) + def test_theme_settings_exceptions(self): settings = self.settings