mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Add support for themes to define their own defaults
This commit is contained in:
parent
bf85991ee6
commit
9b31eda7f3
3 changed files with 31 additions and 2 deletions
|
|
@ -524,6 +524,22 @@ def configure_settings(settings):
|
||||||
raise Exception("Could not find the theme %s"
|
raise Exception("Could not find the theme %s"
|
||||||
% settings['THEME'])
|
% settings['THEME'])
|
||||||
|
|
||||||
|
theme_config = os.path.join(settings['THEME'], 'pelicanconf.py')
|
||||||
|
if os.path.isfile(theme_config):
|
||||||
|
preserved = {}
|
||||||
|
logger.debug('Theme provides a config `%s`', theme_config)
|
||||||
|
# preserve variables that are dynamically calculated in read_settings()
|
||||||
|
for p in ['PATH', 'OUTPUT_PATH', 'THEME', 'CACHE_PATH', 'PLUGIN_PATHS']:
|
||||||
|
if settings.get(p) is not None:
|
||||||
|
preserved[p] = settings.get(p)
|
||||||
|
settings.pop('THEME') # avoid recursion
|
||||||
|
settings = read_settings(theme_config, settings)
|
||||||
|
# restore them back to look like we did not calculate them again
|
||||||
|
for p in ['PATH', 'OUTPUT_PATH', 'THEME', 'CACHE_PATH', 'PLUGIN_PATHS']:
|
||||||
|
if preserved.get(p) is not None:
|
||||||
|
settings[p] = preserved.pop(p)
|
||||||
|
|
||||||
|
|
||||||
# make paths selected for writing absolute if necessary
|
# make paths selected for writing absolute if necessary
|
||||||
settings['WRITE_SELECTED'] = [
|
settings['WRITE_SELECTED'] = [
|
||||||
os.path.abspath(path) for path in
|
os.path.abspath(path) for path in
|
||||||
|
|
|
||||||
|
|
@ -6,14 +6,12 @@ import os
|
||||||
from os.path import abspath, dirname, join
|
from os.path import abspath, dirname, join
|
||||||
from sys import platform
|
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,
|
_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
|
||||||
|
|
||||||
|
|
||||||
class TestSettingsConfiguration(unittest.TestCase):
|
class TestSettingsConfiguration(unittest.TestCase):
|
||||||
"""Provided a file, it should read it, replace the default values,
|
"""Provided a file, it should read it, replace the default values,
|
||||||
append new values to the settings (if any), and apply basic settings
|
append new values to the settings (if any), and apply basic settings
|
||||||
|
|
@ -66,6 +64,18 @@ class TestSettingsConfiguration(unittest.TestCase):
|
||||||
new_settings = read_settings(default_conf)
|
new_settings = read_settings(default_conf)
|
||||||
self.assertNotEqual(new_settings['SITEURL'], settings['SITEURL'])
|
self.assertNotEqual(new_settings['SITEURL'], settings['SITEURL'])
|
||||||
|
|
||||||
|
def test_theme_settings_applied(self):
|
||||||
|
# Make sure that the results from loading theme's config do not
|
||||||
|
# affect the previously defined system configuration
|
||||||
|
self.PATH = abspath(dirname(__file__))
|
||||||
|
default_conf = join(self.PATH, 'default_conf.py')
|
||||||
|
expected = copy.deepcopy(self.settings)
|
||||||
|
expected['THEME'] = os.path.join(self.PATH, 'themes/custom')
|
||||||
|
expected['CUSTOM_THEME_SETTING'] = 'test'
|
||||||
|
settings = read_settings(default_conf, { 'THEME': 'themes/custom' } )
|
||||||
|
self.maxDiff = None
|
||||||
|
self.assertDictEqual(settings, expected)
|
||||||
|
|
||||||
def test_defaults_not_overwritten(self):
|
def test_defaults_not_overwritten(self):
|
||||||
# This assumes 'SITENAME': 'A Pelican Blog'
|
# This assumes 'SITENAME': 'A Pelican Blog'
|
||||||
settings = read_settings(None)
|
settings = read_settings(None)
|
||||||
|
|
|
||||||
3
pelican/tests/themes/custom/pelicanconf.py
Normal file
3
pelican/tests/themes/custom/pelicanconf.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
CUSTOM_THEME_SETTING = 'test'
|
||||||
|
PATH = 'a path'
|
||||||
|
AUTHOR = 'Test Suite'
|
||||||
Loading…
Add table
Add a link
Reference in a new issue