1
0
Fork 0
forked from github/pelican

Add Multi-theme support

Adds multi-theme support using the new THEMES setting.
You can specify all the themes that you will be using in python
dicionary form. You can then inherit from the themes specified
in THEMES using the corresponding key in the dictionary.
This commit is contained in:
th3aftermath 2014-04-23 23:39:12 -04:00 committed by Ondrej Grover
commit b00d9ef6d1
8 changed files with 119 additions and 41 deletions

View file

@ -28,7 +28,7 @@ class TestGenerator(unittest.TestCase):
self.settings = get_settings()
self.settings['READERS'] = {'asc': None}
self.generator = Generator(self.settings.copy(), self.settings,
CUR_DIR, self.settings['THEME'], None)
CUR_DIR, self.settings['THEME'], self.settings['THEMES'], None)
def tearDown(self):
locale.setlocale(locale.LC_ALL, self.old_locale)
@ -48,7 +48,8 @@ class TestGenerator(unittest.TestCase):
generator = Generator(context=self.settings.copy(),
settings=self.settings,
path=os.path.join(CUR_DIR, 'nested_content'),
theme=self.settings['THEME'], output_path=None)
theme=self.settings['THEME'], themes=self.settings['THEMES'],
output_path=None)
filepaths = generator.get_files(paths=['maindir'])
found_files = {os.path.basename(f) for f in filepaths}
@ -86,7 +87,7 @@ class TestArticlesGenerator(unittest.TestCase):
cls.generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
cls.generator.generate_context()
cls.articles = cls.distill_articles(cls.generator.articles)
@ -106,7 +107,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['CACHE_PATH'] = self.temp_cache
generator = ArticlesGenerator(
context=settings, settings=settings,
path=None, theme=settings['THEME'], output_path=None)
path=None, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
writer = MagicMock()
generator.generate_feeds(writer)
writer.write_feed.assert_called_with([], settings,
@ -114,7 +115,7 @@ class TestArticlesGenerator(unittest.TestCase):
generator = ArticlesGenerator(
context=settings, settings=get_settings(FEED_ALL_ATOM=None),
path=None, theme=settings['THEME'], output_path=None)
path=None, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
writer = MagicMock()
generator.generate_feeds(writer)
self.assertFalse(writer.write_feed.called)
@ -187,7 +188,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['filenames'] = {}
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
# test for name
# categories are grouped by slug; if two categories have the same slug
@ -210,7 +211,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['CACHE_PATH'] = self.temp_cache
generator = ArticlesGenerator(
context=settings, settings=settings,
path=None, theme=settings['THEME'], output_path=None)
path=None, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
write = MagicMock()
generator.generate_direct_templates(write)
write.assert_called_with("archives.html",
@ -225,7 +226,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['CACHE_PATH'] = self.temp_cache
generator = ArticlesGenerator(
context=settings, settings=settings,
path=None, theme=settings['THEME'], output_path=None)
path=None, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
write = MagicMock()
generator.generate_direct_templates(write)
write.assert_called_with("archives/index.html",
@ -241,7 +242,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['CACHE_PATH'] = self.temp_cache
generator = ArticlesGenerator(
context=settings, settings=settings,
path=None, theme=settings['THEME'], output_path=None)
path=None, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
write = MagicMock()
generator.generate_direct_templates(write)
self.assertEqual(write.call_count, 0)
@ -268,7 +269,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['CACHE_PATH'] = self.temp_cache
generator = ArticlesGenerator(
context=settings, settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
write = MagicMock()
generator.generate_period_archives(write)
@ -285,7 +286,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['MONTH_ARCHIVE_SAVE_AS'] = 'posts/{date:%Y}/{date:%b}/index.html'
generator = ArticlesGenerator(
context=settings, settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
write = MagicMock()
generator.generate_period_archives(write)
@ -303,7 +304,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['DAY_ARCHIVE_SAVE_AS'] = 'posts/{date:%Y}/{date:%b}/{date:%d}/index.html'
generator = ArticlesGenerator(
context=settings, settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
write = MagicMock()
generator.generate_period_archives(write)
@ -337,13 +338,13 @@ class TestArticlesGenerator(unittest.TestCase):
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
self.assertTrue(hasattr(generator, '_cache'))
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.readers.read_file = MagicMock()
generator.generate_context()
generator.readers.read_file.assert_called_count == 0
@ -356,13 +357,13 @@ class TestArticlesGenerator(unittest.TestCase):
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
self.assertTrue(hasattr(generator.readers, '_cache'))
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
readers = generator.readers.readers
for reader in readers.values():
reader.read = MagicMock()
@ -380,7 +381,7 @@ class TestArticlesGenerator(unittest.TestCase):
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.readers.read_file = MagicMock()
generator.generate_context()
self.assertTrue(hasattr(generator, '_cache_open'))
@ -389,7 +390,7 @@ class TestArticlesGenerator(unittest.TestCase):
settings['LOAD_CONTENT_CACHE'] = False
generator = ArticlesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.readers.read_file = MagicMock()
generator.generate_context()
generator.readers.read_file.assert_called_count == orig_call_count
@ -418,7 +419,7 @@ class TestPageGenerator(unittest.TestCase):
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CUR_DIR, theme=settings['THEME'], output_path=None)
path=CUR_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
pages = self.distill_pages(generator.pages)
hidden_pages = self.distill_pages(generator.hidden_pages)
@ -449,13 +450,13 @@ class TestPageGenerator(unittest.TestCase):
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
self.assertTrue(hasattr(generator, '_cache'))
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.readers.read_file = MagicMock()
generator.generate_context()
generator.readers.read_file.assert_called_count == 0
@ -468,13 +469,13 @@ class TestPageGenerator(unittest.TestCase):
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.generate_context()
self.assertTrue(hasattr(generator.readers, '_cache'))
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
readers = generator.readers.readers
for reader in readers.values():
reader.read = MagicMock()
@ -492,7 +493,7 @@ class TestPageGenerator(unittest.TestCase):
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.readers.read_file = MagicMock()
generator.generate_context()
self.assertTrue(hasattr(generator, '_cache_open'))
@ -501,7 +502,7 @@ class TestPageGenerator(unittest.TestCase):
settings['LOAD_CONTENT_CACHE'] = False
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'], output_path=None)
path=CONTENT_DIR, theme=settings['THEME'], themes=settings['THEMES'], output_path=None)
generator.readers.read_file = MagicMock()
generator.generate_context()
generator.readers.read_file.assert_called_count == orig_call_count
@ -522,7 +523,8 @@ class TestPageGenerator(unittest.TestCase):
]
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CUR_DIR, theme=settings['THEME'], output_path=None)
path=CUR_DIR, theme=settings['THEME'], themes=settings['THEMES'],
output_path=None)
generator.generate_context()
pages = self.distill_pages(generator.pages)
self.assertEqual(pages_expected_sorted_by_filename, pages)
@ -538,7 +540,8 @@ class TestPageGenerator(unittest.TestCase):
settings['PAGE_ORDER_BY'] = 'title'
generator = PagesGenerator(
context=settings.copy(), settings=settings,
path=CUR_DIR, theme=settings['THEME'], output_path=None)
path=CUR_DIR, theme=settings['THEME'], themes=settings['THEMES'],
output_path=None)
generator.generate_context()
pages = self.distill_pages(generator.pages)
self.assertEqual(pages_expected_sorted_by_title, pages)
@ -570,7 +573,7 @@ class TestTemplatePagesGenerator(unittest.TestCase):
generator = TemplatePagesGenerator(
context={'foo': 'bar'}, settings=settings,
path=self.temp_content, theme='', output_path=self.temp_output)
path=self.temp_content, theme='', themes=settings['THEMES'], output_path=self.temp_output)
# create a dummy template file
template_dir = os.path.join(self.temp_content, 'template')
@ -607,6 +610,7 @@ class TestStaticGenerator(unittest.TestCase):
StaticGenerator(context=context, settings=settings,
path=settings['PATH'], output_path=None,
themes=settings['THEMES'],
theme=settings['THEME']).generate_context()
staticnames = [os.path.basename(c.source_path)
@ -631,6 +635,7 @@ class TestStaticGenerator(unittest.TestCase):
for generator_class in (PagesGenerator, StaticGenerator):
generator_class(context=context, settings=settings,
path=settings['PATH'], output_path=None,
themes=settings['THEMES'],
theme=settings['THEME']).generate_context()
staticnames = [os.path.basename(c.source_path)
@ -648,6 +653,7 @@ class TestStaticGenerator(unittest.TestCase):
for generator_class in (PagesGenerator, StaticGenerator):
generator_class(context=context, settings=settings,
path=settings['PATH'], output_path=None,
themes=settings['THEMES'],
theme=settings['THEME']).generate_context()
staticnames = [os.path.basename(c.source_path)

View file

@ -73,6 +73,7 @@ class TestSettingsConfiguration(unittest.TestCase):
# These 4 settings are required to run configure_settings
'PATH': '.',
'THEME': DEFAULT_THEME,
'THEMES': {'!simple': 'simple'},
'SITEURL': 'http://blog.notmyidea.org/',
'LOCALE': '',
}
@ -90,6 +91,7 @@ class TestSettingsConfiguration(unittest.TestCase):
'LOCALE': '',
'PATH': os.curdir,
'THEME': DEFAULT_THEME,
'THEMES': {'!simple': 'simple'},
}
configure_settings(settings)
# SITEURL should not have a trailing slash

View file

@ -497,7 +497,7 @@ class TestDateFormatter(unittest.TestCase):
generator = TemplatePagesGenerator(
{'date': self.date}, settings,
self.temp_content, '', self.temp_output)
self.temp_content, '', '', self.temp_output)
generator.env.filters.update({'strftime': utils.DateFormatter()})
writer = Writer(self.temp_output, settings=settings)
@ -526,7 +526,7 @@ class TestDateFormatter(unittest.TestCase):
generator = TemplatePagesGenerator(
{'date': self.date}, settings,
self.temp_content, '', self.temp_output)
self.temp_content, '', '', self.temp_output)
generator.env.filters.update({'strftime': utils.DateFormatter()})
writer = Writer(self.temp_output, settings=settings)