mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge pull request #2437 from ajorg/gentle-s-deprecation
Replace %s rather than fall back to defaults
This commit is contained in:
commit
71650b408c
2 changed files with 43 additions and 6 deletions
|
|
@ -245,6 +245,22 @@ def get_jinja_environment(settings):
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
|
|
||||||
|
def _printf_s_to_format_field(printf_string, format_field):
|
||||||
|
"""Tries to replace %s with {format_field} in the provided printf_string.
|
||||||
|
Raises ValueError in case of failure.
|
||||||
|
"""
|
||||||
|
TEST_STRING = 'PELICAN_PRINTF_S_DEPRECATION'
|
||||||
|
expected = printf_string % TEST_STRING
|
||||||
|
|
||||||
|
result = printf_string.replace('{', '{{').replace('}', '}}') \
|
||||||
|
% '{{{}}}'.format(format_field)
|
||||||
|
if result.format(**{format_field: TEST_STRING}) != expected:
|
||||||
|
raise ValueError('Failed to safely replace %s with {{{}}}'.format(
|
||||||
|
format_field))
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def handle_deprecated_settings(settings):
|
def handle_deprecated_settings(settings):
|
||||||
"""Converts deprecated settings and issues warnings. Issues an exception
|
"""Converts deprecated settings and issues warnings. Issues an exception
|
||||||
if both old and new setting is specified.
|
if both old and new setting is specified.
|
||||||
|
|
@ -394,10 +410,16 @@ def handle_deprecated_settings(settings):
|
||||||
for key in ['TRANSLATION_FEED_ATOM',
|
for key in ['TRANSLATION_FEED_ATOM',
|
||||||
'TRANSLATION_FEED_RSS'
|
'TRANSLATION_FEED_RSS'
|
||||||
]:
|
]:
|
||||||
if key in settings and '%s' in settings[key]:
|
if settings.get(key) and '%s' in settings[key]:
|
||||||
logger.warning('%%s usage in %s is deprecated, use {lang} '
|
logger.warning('%%s usage in %s is deprecated, use {lang} '
|
||||||
'instead. Falling back to default.', key)
|
'instead.', key)
|
||||||
settings[key] = DEFAULT_CONFIG[key]
|
try:
|
||||||
|
settings[key] = _printf_s_to_format_field(
|
||||||
|
settings[key], 'lang')
|
||||||
|
except ValueError:
|
||||||
|
logger.warning('Failed to convert %%s to {lang} for %s. '
|
||||||
|
'Falling back to default.', key)
|
||||||
|
settings[key] = DEFAULT_CONFIG[key]
|
||||||
for key in ['AUTHOR_FEED_ATOM',
|
for key in ['AUTHOR_FEED_ATOM',
|
||||||
'AUTHOR_FEED_RSS',
|
'AUTHOR_FEED_RSS',
|
||||||
'CATEGORY_FEED_ATOM',
|
'CATEGORY_FEED_ATOM',
|
||||||
|
|
@ -405,10 +427,16 @@ def handle_deprecated_settings(settings):
|
||||||
'TAG_FEED_ATOM',
|
'TAG_FEED_ATOM',
|
||||||
'TAG_FEED_RSS',
|
'TAG_FEED_RSS',
|
||||||
]:
|
]:
|
||||||
if key in settings and '%s' in settings[key]:
|
if settings.get(key) and '%s' in settings[key]:
|
||||||
logger.warning('%%s usage in %s is deprecated, use {slug} '
|
logger.warning('%%s usage in %s is deprecated, use {slug} '
|
||||||
'instead. Falling back to default.', key)
|
'instead.', key)
|
||||||
settings[key] = DEFAULT_CONFIG[key]
|
try:
|
||||||
|
settings[key] = _printf_s_to_format_field(
|
||||||
|
settings[key], 'slug')
|
||||||
|
except ValueError:
|
||||||
|
logger.warning('Failed to convert %%s to {slug} for %s. '
|
||||||
|
'Falling back to default.', key)
|
||||||
|
settings[key] = DEFAULT_CONFIG[key]
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ from sys import platform
|
||||||
|
|
||||||
|
|
||||||
from pelican.settings import (DEFAULT_CONFIG, DEFAULT_THEME,
|
from pelican.settings import (DEFAULT_CONFIG, DEFAULT_THEME,
|
||||||
|
_printf_s_to_format_field,
|
||||||
configure_settings, handle_deprecated_settings,
|
configure_settings, handle_deprecated_settings,
|
||||||
read_settings)
|
read_settings)
|
||||||
from pelican.tests.support import unittest
|
from pelican.tests.support import unittest
|
||||||
|
|
@ -168,6 +169,14 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
|
|
||||||
self.assertRaises(Exception, configure_settings, settings)
|
self.assertRaises(Exception, configure_settings, settings)
|
||||||
|
|
||||||
|
def test__printf_s_to_format_field(self):
|
||||||
|
for s in ('%s', '{%s}', '{%s'):
|
||||||
|
option = 'foo/{}/bar.baz'.format(s)
|
||||||
|
result = _printf_s_to_format_field(option, 'slug')
|
||||||
|
expected = option % 'qux'
|
||||||
|
found = result.format(slug='qux')
|
||||||
|
self.assertEqual(expected, found)
|
||||||
|
|
||||||
def test_deprecated_extra_templates_paths(self):
|
def test_deprecated_extra_templates_paths(self):
|
||||||
settings = self.settings
|
settings = self.settings
|
||||||
settings['EXTRA_TEMPLATES_PATHS'] = ['/foo/bar', '/ha']
|
settings['EXTRA_TEMPLATES_PATHS'] = ['/foo/bar', '/ha']
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue