From 8ff34e6c5d5d534223d4059addb83c1e9f5648b0 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sun, 24 Mar 2013 15:45:36 -0400 Subject: [PATCH] Replace settings.get(key) with settings[key] for default settings If a setting exists in DEFAULT_CONFIG, assume it will be there (instead of checking and/or providing a local default). The earlier code was split between the two idioms, which was confusing. --- pelican/__init__.py | 4 ++-- pelican/contents.py | 2 +- pelican/generators.py | 32 +++++++++++++------------------- pelican/readers.py | 8 +++----- pelican/settings.py | 5 +++++ pelican/tests/test_generators.py | 8 ++++---- pelican/tests/test_readers.py | 8 ++++---- pelican/writers.py | 6 +++--- 8 files changed, 35 insertions(+), 38 deletions(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index 6e9e676b..7f406c4f 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -154,7 +154,7 @@ class Pelican(object): context = self.settings.copy() context['filenames'] = {} # share the dict between all the generators - context['localsiteurl'] = self.settings.get('SITEURL') # share + context['localsiteurl'] = self.settings['SITEURL'] # share generators = [ cls( context, @@ -309,7 +309,7 @@ def get_instance(args): settings = read_settings(config_file, override=get_config(args)) - cls = settings.get('PELICAN_CLASS') + cls = settings['PELICAN_CLASS'] if isinstance(cls, six.string_types): module, cls_name = cls.rsplit('.', 1) module = __import__(module) diff --git a/pelican/contents.py b/pelican/contents.py index 135c4866..5f2e66b0 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -51,7 +51,7 @@ class Content(object): self._context = context self.translations = [] - local_metadata = dict(settings.get('DEFAULT_METADATA', ())) + local_metadata = dict(settings['DEFAULT_METADATA']) local_metadata.update(metadata) # set metadata as attributes diff --git a/pelican/generators.py b/pelican/generators.py index f2fa0e33..75b61df2 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -47,7 +47,7 @@ class Generator(object): self._templates_path = [] self._templates_path.append(os.path.expanduser( os.path.join(self.theme, 'templates'))) - self._templates_path += self.settings.get('EXTRA_TEMPLATES_PATHS', []) + self._templates_path += self.settings['EXTRA_TEMPLATES_PATHS'] theme_path = os.path.dirname(os.path.abspath(__file__)) @@ -60,7 +60,7 @@ class Generator(object): simple_loader, # implicit inheritance PrefixLoader({'!simple': simple_loader}) # explicit one ]), - extensions=self.settings.get('JINJA_EXTENSIONS', []), + extensions=self.settings['JINJA_EXTENSIONS'], ) logger.debug('template list: {0}'.format(self.env.list_templates())) @@ -69,7 +69,7 @@ class Generator(object): self.env.filters.update({'strftime': DateFormatter()}) # get custom Jinja filters from user settings - custom_filters = self.settings.get('JINJA_FILTERS', {}) + custom_filters = self.settings['JINJA_FILTERS'] self.env.filters.update(custom_filters) signals.generator_init.send(self) @@ -163,7 +163,7 @@ class TemplatePagesGenerator(Generator): self.env.loader.loaders.insert(0, _FileLoader(source, self.path)) try: template = self.env.get_template(source) - rurls = self.settings.get('RELATIVE_URLS') + rurls = self.settings['RELATIVE_URLS'] writer.write_file(dest, template, self.context, rurls) finally: del self.env.loader.loaders[0] @@ -283,9 +283,9 @@ class ArticlesGenerator(Generator): dates=archive, blog=True) period_save_as = { - 'year' : self.settings.get('YEAR_ARCHIVE_SAVE_AS'), - 'month': self.settings.get('MONTH_ARCHIVE_SAVE_AS'), - 'day' : self.settings.get('DAY_ARCHIVE_SAVE_AS') + 'year' : self.settings['YEAR_ARCHIVE_SAVE_AS'], + 'month': self.settings['MONTH_ARCHIVE_SAVE_AS'], + 'day' : self.settings['DAY_ARCHIVE_SAVE_AS'], } period_date_key = { @@ -302,8 +302,8 @@ class ArticlesGenerator(Generator): def generate_direct_templates(self, write): """Generate direct templates pages""" - PAGINATED_TEMPLATES = self.settings.get('PAGINATED_DIRECT_TEMPLATES') - for template in self.settings.get('DIRECT_TEMPLATES'): + PAGINATED_TEMPLATES = self.settings['PAGINATED_DIRECT_TEMPLATES'] + for template in self.settings['DIRECT_TEMPLATES']: paginated = {} if template in PAGINATED_TEMPLATES: paginated = {'articles': self.articles, 'dates': self.dates} @@ -358,7 +358,7 @@ class ArticlesGenerator(Generator): def generate_pages(self, writer): """Generate the pages on the disk""" write = partial(writer.write_file, - relative_urls=self.settings.get('RELATIVE_URLS')) + relative_urls=self.settings['RELATIVE_URLS']) # to minimize the number of relative path stuff modification # in writer, articles pass first @@ -546,7 +546,7 @@ class PagesGenerator(Generator): self.hidden_translations, self.hidden_pages): writer.write_file(page.save_as, self.get_template(page.template), self.context, page=page, - relative_urls=self.settings.get('RELATIVE_URLS')) + relative_urls=self.settings['RELATIVE_URLS']) class StaticGenerator(Generator): @@ -613,14 +613,8 @@ class PdfGenerator(Generator): super(PdfGenerator, self).__init__(*args, **kwargs) try: from rst2pdf.createpdf import RstToPdf - if 'PDF_STYLE_PATH' in self.settings.keys(): - pdf_style_path = os.path.join(self.settings['PDF_STYLE_PATH']) - else: - pdf_style_path = '' - - if 'PDF_STYLE' in self.settings.keys(): - pdf_style = self.settings.get('PDF_STYLE', 'twelvepoint') - + pdf_style_path = os.path.join(self.settings['PDF_STYLE_PATH']) + pdf_style = self.settings['PDF_STYLE'] self.pdfcreator = RstToPdf(breakside=0, stylesheets=[pdf_style], style_path=[pdf_style_path]) diff --git a/pelican/readers.py b/pelican/readers.py index b5fed611..816464ef 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -157,12 +157,10 @@ class RstReader(Reader): class MarkdownReader(Reader): enabled = bool(Markdown) file_extensions = ['md', 'markdown', 'mkd', 'mdown'] - default_extensions = ['codehilite(css_class=highlight)', 'extra'] def __init__(self, *args, **kwargs): super(MarkdownReader, self).__init__(*args, **kwargs) - self.extensions = self.settings.get('MD_EXTENSIONS', - self.default_extensions) + self.extensions = self.settings['MD_EXTENSIONS'] self.extensions.append('meta') self._md = Markdown(extensions=self.extensions) @@ -309,7 +307,7 @@ class AsciiDocReader(Reader): content = StringIO() ad = AsciiDocAPI() - options = self.settings.get('ASCIIDOC_OPTIONS', []) + options = self.settings['ASCIIDOC_OPTIONS'] if isinstance(options, (str, unicode)): options = [m.strip() for m in options.split(',')] options = self.default_options + options @@ -362,7 +360,7 @@ def read_file(path, fmt=None, settings=None): metadata.update(reader_metadata) # eventually filter the content with typogrify if asked so - if content and settings and settings.get('TYPOGRIFY'): + if content and settings and settings['TYPOGRIFY']: from typogrify.filters import typogrify content = typogrify(content) metadata['title'] = typogrify(metadata['title']) diff --git a/pelican/settings.py b/pelican/settings.py index 35f333aa..34a2b42a 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -64,6 +64,8 @@ DEFAULT_CONFIG = { 'PAGE_LANG_SAVE_AS': os.path.join('pages', '{slug}-{lang}.html'), 'STATIC_URL': '{path}', 'STATIC_SAVE_AS': '{path}', + 'PDF_STYLE_PATH': '', + 'PDF_STYLE': 'twelvepoint', 'CATEGORY_URL': 'category/{slug}.html', 'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'), 'TAG_URL': 'tag/{slug}.html', @@ -83,7 +85,10 @@ DEFAULT_CONFIG = { 'PELICAN_CLASS': 'pelican.Pelican', 'DEFAULT_DATE_FORMAT': '%a %d %B %Y', 'DATE_FORMATS': {}, + 'ASCIIDOC_OPTIONS': [], + 'MD_EXTENSIONS': ['codehilite(css_class=highlight)', 'extra'], 'JINJA_EXTENSIONS': [], + 'JINJA_FILTERS': {}, 'LOCALE': [], # defaults to user locale 'DEFAULT_PAGINATION': False, 'DEFAULT_ORPHANS': 0, diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index cb54b5ec..e3b8e20a 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -53,16 +53,16 @@ class TestArticlesGenerator(unittest.TestCase): def test_generate_feeds(self): settings = get_settings() - generator = ArticlesGenerator(settings, - {'FEED_ALL_ATOM': settings['FEED_ALL_ATOM']}, None, + generator = ArticlesGenerator(settings, settings, None, settings['THEME'], None, settings['MARKUP']) writer = MagicMock() generator.generate_feeds(writer) writer.write_feed.assert_called_with([], settings, 'feeds/all.atom.xml') - generator = ArticlesGenerator(settings, {'FEED_ALL_ATOM': None}, None, - settings['THEME'], None, None) + generator = ArticlesGenerator( + settings, get_settings(FEED_ALL_ATOM=None), None, + settings['THEME'], None, None) writer = MagicMock() generator.generate_feeds(writer) self.assertFalse(writer.write_feed.called) diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index 9fb3320d..a48301f9 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -85,7 +85,7 @@ class RstReaderTest(ReaderTest): def test_article_metadata_key_lowercase(self): # Keys of metadata should be lowercase. - reader = readers.RstReader({}) + reader = readers.RstReader(settings=get_settings()) content, metadata = reader.read( _path('article_with_uppercase_metadata.rst')) @@ -121,7 +121,7 @@ class MdReaderTest(ReaderTest): @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_metadata(self): - reader = readers.MarkdownReader({}) + reader = readers.MarkdownReader(settings=get_settings()) content, metadata = reader.read( _path('article_with_md_extension.md')) expected = { @@ -150,7 +150,7 @@ class MdReaderTest(ReaderTest): @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_footnote(self): - reader = readers.MarkdownReader({}) + reader = readers.MarkdownReader(settings=get_settings()) content, metadata = reader.read( _path('article_with_markdown_and_footnote.md')) expected_content = ( @@ -186,7 +186,7 @@ class MdReaderTest(ReaderTest): @unittest.skipUnless(readers.Markdown, "markdown isn't installed") def test_article_with_file_extensions(self): - reader = readers.MarkdownReader({}) + reader = readers.MarkdownReader(settings=get_settings()) # test to ensure the md file extension is being processed by the # correct reader content, metadata = reader.read( diff --git a/pelican/writers.py b/pelican/writers.py index 27246e4f..fe37b25d 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -155,10 +155,10 @@ class Writer(object): for key in paginated.keys(): object_list = paginated[key] - if self.settings.get('DEFAULT_PAGINATION'): + if self.settings['DEFAULT_PAGINATION']: paginators[key] = Paginator(object_list, - self.settings.get('DEFAULT_PAGINATION'), - self.settings.get('DEFAULT_ORPHANS')) + self.settings['DEFAULT_PAGINATION'], + self.settings['DEFAULT_ORPHANS']) else: paginators[key] = Paginator(object_list, len(object_list))