From e9dc1dd478679847cd914dd3104bcc525503719b Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Sun, 24 Mar 2013 08:38:19 -0400 Subject: [PATCH] settings: Make DEFAULT_CONFIG public This dictionary is accessed by plugins (like `summary`) which add new settings, so it should be public (i.e. no prefixed underscore). The changed name length would have led to a re-indenting of the default contents anyway, so I shifted them all to four spaces. --- pelican/contents.py | 4 +- pelican/settings.py | 169 +++++++++++++++---------------- pelican/tests/support.py | 4 +- pelican/tests/test_contents.py | 14 +-- pelican/tests/test_generators.py | 10 +- pelican/tests/test_settings.py | 12 +-- 6 files changed, 105 insertions(+), 108 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index fec8af14..135c4866 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -14,7 +14,7 @@ from datetime import datetime from pelican import signals -from pelican.settings import _DEFAULT_CONFIG +from pelican.settings import DEFAULT_CONFIG from pelican.utils import (slugify, truncate_html_words, memoized, strftime, python_2_unicode_compatible, deprecated_attribute, path_to_url) @@ -44,7 +44,7 @@ class Content(object): if metadata is None: metadata = {} if settings is None: - settings = copy.deepcopy(_DEFAULT_CONFIG) + settings = copy.deepcopy(DEFAULT_CONFIG) self.settings = settings self._content = content diff --git a/pelican/settings.py b/pelican/settings.py index 091999a7..b6092fb3 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -25,84 +25,81 @@ logger = logging.getLogger(__name__) DEFAULT_THEME = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'themes', 'notmyidea') -_DEFAULT_CONFIG = {'PATH': os.curdir, - 'ARTICLE_DIR': '', - 'ARTICLE_EXCLUDES': ('pages',), - 'PAGE_DIR': 'pages', - 'PAGE_EXCLUDES': (), - 'THEME': DEFAULT_THEME, - 'OUTPUT_PATH': 'output', - 'MARKUP': ('rst', 'md'), - 'STATIC_PATHS': ['images', ], - 'THEME_STATIC_PATHS': ['static', ], - 'FEED_ALL_ATOM': os.path.join('feeds', 'all.atom.xml'), - 'CATEGORY_FEED_ATOM': os.path.join('feeds', '%s.atom.xml'), - 'TRANSLATION_FEED_ATOM': os.path.join( - 'feeds', 'all-%s.atom.xml'), - 'FEED_MAX_ITEMS': '', - 'SITEURL': '', - 'SITENAME': 'A Pelican Blog', - 'DISPLAY_PAGES_ON_MENU': True, - 'DISPLAY_CATEGORIES_ON_MENU': True, - 'PDF_GENERATOR': False, - 'OUTPUT_SOURCES': False, - 'OUTPUT_SOURCES_EXTENSION': '.text', - 'USE_FOLDER_AS_CATEGORY': True, - 'DEFAULT_CATEGORY': 'misc', - 'WITH_FUTURE_DATES': True, - 'CSS_FILE': 'main.css', - 'NEWEST_FIRST_ARCHIVES': True, - 'REVERSE_CATEGORY_ORDER': False, - 'DELETE_OUTPUT_DIRECTORY': False, - 'ARTICLE_URL': '{slug}.html', - 'ARTICLE_SAVE_AS': '{slug}.html', - 'ARTICLE_LANG_URL': '{slug}-{lang}.html', - 'ARTICLE_LANG_SAVE_AS': '{slug}-{lang}.html', - 'PAGE_URL': 'pages/{slug}.html', - 'PAGE_SAVE_AS': os.path.join('pages', '{slug}.html'), - 'PAGE_LANG_URL': 'pages/{slug}-{lang}.html', - 'PAGE_LANG_SAVE_AS': os.path.join( - 'pages', '{slug}-{lang}.html'), - 'STATIC_URL': '{path}', - 'STATIC_SAVE_AS': '{path}', - 'CATEGORY_URL': 'category/{slug}.html', - 'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'), - 'TAG_URL': 'tag/{slug}.html', - 'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'), - 'AUTHOR_URL': 'author/{slug}.html', - 'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'), - 'YEAR_ARCHIVE_SAVE_AS': False, - 'MONTH_ARCHIVE_SAVE_AS': False, - 'DAY_ARCHIVE_SAVE_AS': False, - 'RELATIVE_URLS': False, - 'DEFAULT_LANG': 'en', - 'TAG_CLOUD_STEPS': 4, - 'TAG_CLOUD_MAX_ITEMS': 100, - 'DIRECT_TEMPLATES': ('index', 'tags', 'categories', - 'archives'), - 'EXTRA_TEMPLATES_PATHS': [], - 'PAGINATED_DIRECT_TEMPLATES': ('index', ), - 'PELICAN_CLASS': 'pelican.Pelican', - 'DEFAULT_DATE_FORMAT': '%a %d %B %Y', - 'DATE_FORMATS': {}, - 'JINJA_EXTENSIONS': [], - 'LOCALE': '', # defaults to user locale - 'DEFAULT_PAGINATION': False, - 'DEFAULT_ORPHANS': 0, - 'DEFAULT_METADATA': (), - 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2}).*', - 'PATH_METADATA': '', - 'FILES_TO_COPY': (), - 'DEFAULT_STATUS': 'published', - 'ARTICLE_PERMALINK_STRUCTURE': '', - 'TYPOGRIFY': False, - 'SUMMARY_MAX_LENGTH': 50, - 'PLUGIN_PATH': '', - 'PLUGINS': [], - 'TEMPLATE_PAGES': {}, - 'IGNORE_FILES': ['.#*'] - } - +DEFAULT_CONFIG = { + 'PATH': os.curdir, + 'ARTICLE_DIR': '', + 'ARTICLE_EXCLUDES': ('pages',), + 'PAGE_DIR': 'pages', + 'PAGE_EXCLUDES': (), + 'THEME': DEFAULT_THEME, + 'OUTPUT_PATH': 'output', + 'MARKUP': ('rst', 'md'), + 'STATIC_PATHS': ['images', ], + 'THEME_STATIC_PATHS': ['static', ], + 'FEED_ALL_ATOM': os.path.join('feeds', 'all.atom.xml'), + 'CATEGORY_FEED_ATOM': os.path.join('feeds', '%s.atom.xml'), + 'TRANSLATION_FEED_ATOM': os.path.join('feeds', 'all-%s.atom.xml'), + 'FEED_MAX_ITEMS': '', + 'SITEURL': '', + 'SITENAME': 'A Pelican Blog', + 'DISPLAY_PAGES_ON_MENU': True, + 'DISPLAY_CATEGORIES_ON_MENU': True, + 'PDF_GENERATOR': False, + 'OUTPUT_SOURCES': False, + 'OUTPUT_SOURCES_EXTENSION': '.text', + 'USE_FOLDER_AS_CATEGORY': True, + 'DEFAULT_CATEGORY': 'misc', + 'WITH_FUTURE_DATES': True, + 'CSS_FILE': 'main.css', + 'NEWEST_FIRST_ARCHIVES': True, + 'REVERSE_CATEGORY_ORDER': False, + 'DELETE_OUTPUT_DIRECTORY': False, + 'ARTICLE_URL': '{slug}.html', + 'ARTICLE_SAVE_AS': '{slug}.html', + 'ARTICLE_LANG_URL': '{slug}-{lang}.html', + 'ARTICLE_LANG_SAVE_AS': '{slug}-{lang}.html', + 'PAGE_URL': 'pages/{slug}.html', + 'PAGE_SAVE_AS': os.path.join('pages', '{slug}.html'), + 'PAGE_LANG_URL': 'pages/{slug}-{lang}.html', + 'PAGE_LANG_SAVE_AS': os.path.join('pages', '{slug}-{lang}.html'), + 'STATIC_URL': '{path}', + 'STATIC_SAVE_AS': '{path}', + 'CATEGORY_URL': 'category/{slug}.html', + 'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'), + 'TAG_URL': 'tag/{slug}.html', + 'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'), + 'AUTHOR_URL': 'author/{slug}.html', + 'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'), + 'YEAR_ARCHIVE_SAVE_AS': False, + 'MONTH_ARCHIVE_SAVE_AS': False, + 'DAY_ARCHIVE_SAVE_AS': False, + 'RELATIVE_URLS': False, + 'DEFAULT_LANG': 'en', + 'TAG_CLOUD_STEPS': 4, + 'TAG_CLOUD_MAX_ITEMS': 100, + 'DIRECT_TEMPLATES': ('index', 'tags', 'categories', 'archives'), + 'EXTRA_TEMPLATES_PATHS': [], + 'PAGINATED_DIRECT_TEMPLATES': ('index', ), + 'PELICAN_CLASS': 'pelican.Pelican', + 'DEFAULT_DATE_FORMAT': '%a %d %B %Y', + 'DATE_FORMATS': {}, + 'JINJA_EXTENSIONS': [], + 'LOCALE': '', # defaults to user locale + 'DEFAULT_PAGINATION': False, + 'DEFAULT_ORPHANS': 0, + 'DEFAULT_METADATA': (), + 'FILENAME_METADATA': '(?P\d{4}-\d{2}-\d{2}).*', + 'PATH_METADATA': '', + 'FILES_TO_COPY': (), + 'DEFAULT_STATUS': 'published', + 'ARTICLE_PERMALINK_STRUCTURE': '', + 'TYPOGRIFY': False, + 'SUMMARY_MAX_LENGTH': 50, + 'PLUGIN_PATH': '', + 'PLUGINS': [], + 'TEMPLATE_PAGES': {}, + 'IGNORE_FILES': ['.#*'], + } def read_settings(path=None, override=None): if path: @@ -116,7 +113,7 @@ def read_settings(path=None, override=None): if p not in ('THEME', 'PLUGIN_PATH') or os.path.exists(absp): local_settings[p] = absp else: - local_settings = copy.deepcopy(_DEFAULT_CONFIG) + local_settings = copy.deepcopy(DEFAULT_CONFIG) if override: local_settings.update(override) @@ -124,7 +121,7 @@ def read_settings(path=None, override=None): return configure_settings(local_settings) -def get_settings_from_module(module=None, default_settings=_DEFAULT_CONFIG): +def get_settings_from_module(module=None, default_settings=DEFAULT_CONFIG): """Loads settings from a module, returns a dictionary.""" context = copy.deepcopy(default_settings) @@ -134,7 +131,7 @@ def get_settings_from_module(module=None, default_settings=_DEFAULT_CONFIG): return context -def get_settings_from_file(path, default_settings=_DEFAULT_CONFIG): +def get_settings_from_file(path, default_settings=DEFAULT_CONFIG): """Loads settings from a file path, returning a dict.""" name, ext = os.path.splitext(os.path.basename(path)) @@ -171,7 +168,7 @@ def configure_settings(settings): # try to set the different locales, fallback on the default. if not locales: - locales = _DEFAULT_CONFIG['LOCALE'] + locales = DEFAULT_CONFIG['LOCALE'] for locale_ in locales: try: @@ -222,11 +219,11 @@ def configure_settings(settings): if not isinstance(settings['OUTPUT_SOURCES_EXTENSION'], six.string_types): settings['OUTPUT_SOURCES_EXTENSION'] = ( - _DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION']) + DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION']) logger.warning( 'Detected misconfiguration with OUTPUT_SOURCES_EXTENSION, ' 'falling back to the default extension ' + - _DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION']) + DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION']) filename_metadata = settings.get('FILENAME_METADATA') if filename_metadata and not isinstance(filename_metadata, @@ -236,7 +233,7 @@ def configure_settings(settings): 'setting (must be string or compiled pattern), falling ' 'back to the default') settings['FILENAME_METADATA'] = ( - _DEFAULT_CONFIG['FILENAME_METADATA']) + DEFAULT_CONFIG['FILENAME_METADATA']) # Save people from accidentally setting a string rather than a list path_keys = ( @@ -257,6 +254,6 @@ def configure_settings(settings): logger.warning("Detected misconfiguration with %s setting (must " "be a list), falling back to the default" % PATH_KEY) - settings[PATH_KEY] = _DEFAULT_CONFIG[PATH_KEY] + settings[PATH_KEY] = DEFAULT_CONFIG[PATH_KEY] return settings diff --git a/pelican/tests/support.py b/pelican/tests/support.py index c02a3e34..eb869a57 100644 --- a/pelican/tests/support.py +++ b/pelican/tests/support.py @@ -18,7 +18,7 @@ from tempfile import mkdtemp from shutil import rmtree from pelican.contents import Article -from pelican.settings import _DEFAULT_CONFIG +from pelican.settings import DEFAULT_CONFIG @contextmanager @@ -162,7 +162,7 @@ def locale_available(locale_): def get_settings(): - settings = _DEFAULT_CONFIG.copy() + settings = DEFAULT_CONFIG.copy() settings['DIRECT_TEMPLATES'] = ['archives'] settings['filenames'] = {} return settings diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 0ec6bf21..a0918851 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -7,7 +7,7 @@ from sys import platform from .support import unittest from pelican.contents import Page, Article, URLWrapper -from pelican.settings import _DEFAULT_CONFIG +from pelican.settings import DEFAULT_CONFIG from pelican.utils import truncate_html_words from pelican.signals import content_object_init from jinja2.utils import generate_lorem_ipsum @@ -62,7 +62,7 @@ class TestPage(unittest.TestCase): # If a :SUMMARY_MAX_LENGTH: is set, and there is no other summary, # generated summary should not exceed the given length. page_kwargs = self._copy_page_kwargs() - settings = _DEFAULT_CONFIG.copy() + settings = DEFAULT_CONFIG.copy() page_kwargs['settings'] = settings del page_kwargs['metadata']['summary'] settings['SUMMARY_MAX_LENGTH'] = None @@ -83,7 +83,7 @@ class TestPage(unittest.TestCase): def test_defaultlang(self): # If no lang is given, default to the default one. page = Page(**self.page_kwargs) - self.assertEqual(page.lang, _DEFAULT_CONFIG['DEFAULT_LANG']) + self.assertEqual(page.lang, DEFAULT_CONFIG['DEFAULT_LANG']) # it is possible to specify the lang in the metadata infos self.page_kwargs['metadata'].update({'lang': 'fr', }) @@ -108,7 +108,7 @@ class TestPage(unittest.TestCase): page = Page(**self.page_kwargs) self.assertIn('summary', page.url_format.keys()) page.metadata['directory'] = 'test-dir' - page.settings = _DEFAULT_CONFIG.copy() + page.settings = DEFAULT_CONFIG.copy() page.settings['PAGE_SAVE_AS'] = '{directory}/{slug}' self.assertEqual(page.save_as, 'test-dir/foo-bar') @@ -123,10 +123,10 @@ class TestPage(unittest.TestCase): page = Page(**page_kwargs) self.assertEqual(page.locale_date, - dt.strftime(_DEFAULT_CONFIG['DEFAULT_DATE_FORMAT'])) + dt.strftime(DEFAULT_CONFIG['DEFAULT_DATE_FORMAT'])) - page_kwargs['settings'] = dict([(x, _DEFAULT_CONFIG[x]) for x in - _DEFAULT_CONFIG]) + page_kwargs['settings'] = dict([(x, DEFAULT_CONFIG[x]) for x in + DEFAULT_CONFIG]) # I doubt this can work on all platforms ... if platform == "win32": diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index fa57322d..f20f0b4a 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -11,7 +11,7 @@ from shutil import rmtree from pelican.generators import (ArticlesGenerator, PagesGenerator, TemplatePagesGenerator) from pelican.writers import Writer -from pelican.settings import _DEFAULT_CONFIG +from pelican.settings import DEFAULT_CONFIG from pelican.tests.support import unittest, get_settings CUR_DIR = os.path.dirname(__file__) @@ -117,15 +117,15 @@ class TestArticlesGenerator(unittest.TestCase): def test_do_not_use_folder_as_category(self): - settings = _DEFAULT_CONFIG.copy() + settings = DEFAULT_CONFIG.copy() settings['ARTICLE_DIR'] = 'content' settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_DATE'] = (1970, 1, 1) settings['USE_FOLDER_AS_CATEGORY'] = False settings['filenames'] = {} - generator = ArticlesGenerator(settings.copy(), settings, - CUR_DIR, _DEFAULT_CONFIG['THEME'], None, - _DEFAULT_CONFIG['MARKUP']) + generator = ArticlesGenerator( + settings.copy(), settings, CUR_DIR, DEFAULT_CONFIG['THEME'], None, + DEFAULT_CONFIG['MARKUP']) generator.generate_context() # test for name # categories are grouped by slug; if two categories have the same slug diff --git a/pelican/tests/test_settings.py b/pelican/tests/test_settings.py index da251675..b1e813e1 100644 --- a/pelican/tests/test_settings.py +++ b/pelican/tests/test_settings.py @@ -5,7 +5,7 @@ import os from os.path import dirname, abspath, join from pelican.settings import (read_settings, configure_settings, - _DEFAULT_CONFIG, DEFAULT_THEME) + DEFAULT_CONFIG, DEFAULT_THEME) from pelican.tests.support import unittest @@ -27,7 +27,7 @@ class TestSettingsConfiguration(unittest.TestCase): def test_keep_default_settings(self): # Keep default settings if not defined. self.assertEqual(self.settings.get('DEFAULT_CATEGORY'), - _DEFAULT_CONFIG['DEFAULT_CATEGORY']) + DEFAULT_CONFIG['DEFAULT_CATEGORY']) def test_dont_copy_small_keys(self): # Do not copy keys not in caps. @@ -36,7 +36,7 @@ class TestSettingsConfiguration(unittest.TestCase): def test_read_empty_settings(self): # Providing no file should return the default values. settings = read_settings(None) - expected = copy.deepcopy(_DEFAULT_CONFIG) + expected = copy.deepcopy(DEFAULT_CONFIG) expected['FEED_DOMAIN'] = '' # Added by configure settings self.maxDiff = None self.assertDictEqual(settings, expected) @@ -55,7 +55,7 @@ class TestSettingsConfiguration(unittest.TestCase): # This assumes 'SITENAME': 'A Pelican Blog' settings = read_settings(None) settings['SITENAME'] = 'Not a Pelican Blog' - self.assertNotEqual(settings['SITENAME'], _DEFAULT_CONFIG['SITENAME']) + self.assertNotEqual(settings['SITENAME'], DEFAULT_CONFIG['SITENAME']) def test_path_settings_safety(self): """Don't let people setting the static path listings to strs""" @@ -69,9 +69,9 @@ class TestSettingsConfiguration(unittest.TestCase): } configure_settings(settings) self.assertEqual(settings['STATIC_PATHS'], - _DEFAULT_CONFIG['STATIC_PATHS']) + DEFAULT_CONFIG['STATIC_PATHS']) self.assertEqual(settings['THEME_STATIC_PATHS'], - _DEFAULT_CONFIG['THEME_STATIC_PATHS']) + DEFAULT_CONFIG['THEME_STATIC_PATHS']) def test_configure_settings(self): #Manipulations to settings should be applied correctly.