Merge pull request #934 from wking/generator-init-kwargs

Use keyword arguments to initialize Generators
This commit is contained in:
Alexis Metaireau 2013-06-19 00:57:50 -07:00
commit 4f444ee6a8
3 changed files with 47 additions and 31 deletions

View file

@ -157,12 +157,12 @@ class Pelican(object):
context['localsiteurl'] = self.settings['SITEURL'] # share context['localsiteurl'] = self.settings['SITEURL'] # share
generators = [ generators = [
cls( cls(
context, context=context,
self.settings, settings=self.settings,
self.path, path=self.path,
self.theme, theme=self.theme,
self.output_path, output_path=self.output_path,
self.markup, markup=self.markup,
) for cls in self.get_generator_classes() ) for cls in self.get_generator_classes()
] ]

View file

@ -31,10 +31,14 @@ logger = logging.getLogger(__name__)
class Generator(object): class Generator(object):
"""Baseclass generator""" """Baseclass generator"""
def __init__(self, *args, **kwargs): def __init__(self, context, settings, path, theme, output_path, markup,
for idx, item in enumerate(('context', 'settings', 'path', 'theme', **kwargs):
'output_path', 'markup')): self.context = context
setattr(self, item, args[idx]) self.settings = settings
self.path = path
self.theme = theme
self.output_path = output_path
self.markup = markup
for arg, value in kwargs.items(): for arg, value in kwargs.items():
setattr(self, arg, value) setattr(self, arg, value)

View file

@ -33,8 +33,10 @@ class TestArticlesGenerator(unittest.TestCase):
settings = get_settings(filenames={}) settings = get_settings(filenames={})
settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_CATEGORY'] = 'Default'
settings['DEFAULT_DATE'] = (1970, 1, 1) settings['DEFAULT_DATE'] = (1970, 1, 1)
self.generator = ArticlesGenerator(settings.copy(), settings, self.generator = ArticlesGenerator(
CONTENT_DIR, settings['THEME'], None, settings['MARKUP']) context=settings.copy(), settings=settings,
path=CONTENT_DIR, theme=settings['THEME'],
output_path=None, markup=settings['MARKUP'])
self.generator.generate_context() self.generator.generate_context()
return self.generator return self.generator
@ -52,16 +54,19 @@ class TestArticlesGenerator(unittest.TestCase):
def test_generate_feeds(self): def test_generate_feeds(self):
settings = get_settings() settings = get_settings()
generator = ArticlesGenerator(settings, settings, None, generator = ArticlesGenerator(
settings['THEME'], None, settings['MARKUP']) context=settings, settings=settings,
path=None, theme=settings['THEME'],
output_path=None, markup=settings['MARKUP'])
writer = MagicMock() writer = MagicMock()
generator.generate_feeds(writer) generator.generate_feeds(writer)
writer.write_feed.assert_called_with([], settings, writer.write_feed.assert_called_with([], settings,
'feeds/all.atom.xml') 'feeds/all.atom.xml')
generator = ArticlesGenerator( generator = ArticlesGenerator(
settings, get_settings(FEED_ALL_ATOM=None), None, context=settings, settings=get_settings(FEED_ALL_ATOM=None),
settings['THEME'], None, None) path=None, theme=settings['THEME'],
output_path=None, markup=None)
writer = MagicMock() writer = MagicMock()
generator.generate_feeds(writer) generator.generate_feeds(writer)
self.assertFalse(writer.write_feed.called) self.assertFalse(writer.write_feed.called)
@ -122,8 +127,9 @@ class TestArticlesGenerator(unittest.TestCase):
settings['USE_FOLDER_AS_CATEGORY'] = False settings['USE_FOLDER_AS_CATEGORY'] = False
settings['filenames'] = {} settings['filenames'] = {}
generator = ArticlesGenerator( generator = ArticlesGenerator(
settings.copy(), settings, CONTENT_DIR, DEFAULT_CONFIG['THEME'], context=settings.copy(), settings=settings,
None, DEFAULT_CONFIG['MARKUP']) path=CONTENT_DIR, theme=DEFAULT_CONFIG['THEME'],
output_path=None, markup=DEFAULT_CONFIG['MARKUP'])
generator.generate_context() generator.generate_context()
# test for name # test for name
# categories are grouped by slug; if two categories have the same slug # categories are grouped by slug; if two categories have the same slug
@ -143,9 +149,10 @@ class TestArticlesGenerator(unittest.TestCase):
def test_direct_templates_save_as_default(self): def test_direct_templates_save_as_default(self):
settings = get_settings(filenames={}) settings = get_settings(filenames={})
generator = ArticlesGenerator(settings, settings, None, generator = ArticlesGenerator(
settings['THEME'], None, context=settings, settings=settings,
settings['MARKUP']) path=None, theme=settings['THEME'],
output_path=None, markup=settings['MARKUP'])
write = MagicMock() write = MagicMock()
generator.generate_direct_templates(write) generator.generate_direct_templates(write)
write.assert_called_with("archives.html", write.assert_called_with("archives.html",
@ -157,9 +164,10 @@ class TestArticlesGenerator(unittest.TestCase):
settings = get_settings() settings = get_settings()
settings['DIRECT_TEMPLATES'] = ['archives'] settings['DIRECT_TEMPLATES'] = ['archives']
settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' settings['ARCHIVES_SAVE_AS'] = 'archives/index.html'
generator = ArticlesGenerator(settings, settings, None, generator = ArticlesGenerator(
settings['THEME'], None, context=settings, settings=settings,
settings['MARKUP']) path=None, theme=settings['THEME'],
output_path=None, markup=settings['MARKUP'])
write = MagicMock() write = MagicMock()
generator.generate_direct_templates(write) generator.generate_direct_templates(write)
write.assert_called_with("archives/index.html", write.assert_called_with("archives/index.html",
@ -171,9 +179,10 @@ class TestArticlesGenerator(unittest.TestCase):
settings = get_settings() settings = get_settings()
settings['DIRECT_TEMPLATES'] = ['archives'] settings['DIRECT_TEMPLATES'] = ['archives']
settings['ARCHIVES_SAVE_AS'] = 'archives/index.html' settings['ARCHIVES_SAVE_AS'] = 'archives/index.html'
generator = ArticlesGenerator(settings, settings, None, generator = ArticlesGenerator(
settings['THEME'], None, context=settings, settings=settings,
settings['MARKUP']) path=None, theme=settings['THEME'],
output_path=None, markup=settings['MARKUP'])
write = MagicMock() write = MagicMock()
generator.generate_direct_templates(write) generator.generate_direct_templates(write)
write.assert_called_count == 0 write.assert_called_count == 0
@ -215,8 +224,9 @@ class TestPageGenerator(unittest.TestCase):
settings['DEFAULT_DATE'] = (1970, 1, 1) settings['DEFAULT_DATE'] = (1970, 1, 1)
generator = PagesGenerator( generator = PagesGenerator(
settings.copy(), settings, CUR_DIR, settings['THEME'], None, context=settings.copy(), settings=settings,
settings['MARKUP']) path=CUR_DIR, theme=settings['THEME'],
output_path=None, markup=settings['MARKUP'])
generator.generate_context() generator.generate_context()
pages = self.distill_pages(generator.pages) pages = self.distill_pages(generator.pages)
hidden_pages = self.distill_pages(generator.hidden_pages) hidden_pages = self.distill_pages(generator.hidden_pages)
@ -258,8 +268,10 @@ class TestTemplatePagesGenerator(unittest.TestCase):
'template/source.html': 'generated/file.html' 'template/source.html': 'generated/file.html'
} }
generator = TemplatePagesGenerator({'foo': 'bar'}, settings, generator = TemplatePagesGenerator(
self.temp_content, '', self.temp_output, None) context={'foo': 'bar'}, settings=settings,
path=self.temp_content, theme='',
output_path=self.temp_output, markup=None)
# create a dummy template file # create a dummy template file
template_dir = os.path.join(self.temp_content, 'template') template_dir = os.path.join(self.temp_content, 'template')