Merge pull request #2072 from drounin/overrides_ref2021+merge_update

Add THEME_TEMPLATE_OVERRIDES. Refs #2021
This commit is contained in:
Justin Mayer 2018-03-05 07:50:12 -08:00 committed by GitHub
commit 72756a5c0d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 134 additions and 17 deletions

View file

@ -8,7 +8,8 @@ from shutil import copy, rmtree
from tempfile import mkdtemp
from pelican.generators import (ArticlesGenerator, Generator, PagesGenerator,
StaticGenerator, TemplatePagesGenerator)
PelicanTemplateNotFound, StaticGenerator,
TemplatePagesGenerator)
from pelican.tests.support import get_settings, unittest
from pelican.writers import Writer
@ -116,6 +117,62 @@ class TestGenerator(unittest.TestCase):
self.assertEqual(comment_end_string,
generator.env.comment_end_string)
def test_theme_overrides(self):
"""
Test that the THEME_TEMPLATES_OVERRIDES configuration setting is
utilized correctly in the Generator.
"""
override_dirs = (os.path.join(CUR_DIR, 'theme_overrides', 'level1'),
os.path.join(CUR_DIR, 'theme_overrides', 'level2'))
self.settings['THEME_TEMPLATES_OVERRIDES'] = override_dirs
generator = Generator(
context=self.settings.copy(),
settings=self.settings,
path=CUR_DIR,
theme=self.settings['THEME'],
output_path=None)
filename = generator.get_template('article').filename
self.assertEqual(override_dirs[0], os.path.dirname(filename))
self.assertEqual('article.html', os.path.basename(filename))
filename = generator.get_template('authors').filename
self.assertEqual(override_dirs[1], os.path.dirname(filename))
self.assertEqual('authors.html', os.path.basename(filename))
filename = generator.get_template('taglist').filename
self.assertEqual(os.path.join(self.settings['THEME'], 'templates'),
os.path.dirname(filename))
self.assertNotIn(os.path.dirname(filename), override_dirs)
self.assertEqual('taglist.html', os.path.basename(filename))
def test_simple_prefix(self):
"""
Test `!simple` theme prefix.
"""
filename = self.generator.get_template('!simple/authors').filename
expected_path = os.path.join(
os.path.dirname(CUR_DIR), 'themes', 'simple', 'templates')
self.assertEqual(expected_path, os.path.dirname(filename))
self.assertEqual('authors.html', os.path.basename(filename))
def test_theme_prefix(self):
"""
Test `!theme` theme prefix.
"""
filename = self.generator.get_template('!theme/authors').filename
expected_path = os.path.join(
os.path.dirname(CUR_DIR), 'themes', 'notmyidea', 'templates')
self.assertEqual(expected_path, os.path.dirname(filename))
self.assertEqual('authors.html', os.path.basename(filename))
def test_bad_prefix(self):
"""
Test unknown/bad theme prefix throws exception.
"""
self.assertRaises(PelicanTemplateNotFound, self.generator.get_template,
'!UNKNOWN/authors')
class TestArticlesGenerator(unittest.TestCase):

View file

@ -166,3 +166,20 @@ class TestSettingsConfiguration(unittest.TestCase):
settings['THEME'] = 'foo'
self.assertRaises(Exception, configure_settings, settings)
def test_deprecated_extra_templates_paths(self):
settings = self.settings
settings['EXTRA_TEMPLATES_PATHS'] = ['/foo/bar', '/ha']
configure_settings(settings)
self.assertEqual(settings['THEME_TEMPLATES_OVERRIDES'],
['/foo/bar', '/ha'])
self.assertNotIn('EXTRA_TEMPLATES_PATHS', settings)
def test_theme_and_extra_templates_exception(self):
settings = self.settings
settings['EXTRA_TEMPLATES_PATHS'] = ['/ha']
settings['THEME_TEMPLATES_OVERRIDES'] = ['/foo/bar']
self.assertRaises(Exception, configure_settings, settings)

View file

@ -0,0 +1,4 @@
<!--
This file is only here to test the `THEME_TEMPLATES_OVERRIDES` configuration
setting.
-->

View file

@ -0,0 +1,4 @@
<!--
This file is only here to test the `THEME_TEMPLATES_OVERRIDES` configuration
setting.
-->

View file

@ -0,0 +1,4 @@
<!--
This file is only here to test the `THEME_TEMPLATES_OVERRIDES` configuration
setting.
-->