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.
This commit is contained in:
W. Trevor King 2013-03-24 08:38:19 -04:00
commit e9dc1dd478
6 changed files with 105 additions and 108 deletions

View file

@ -14,7 +14,7 @@ from datetime import datetime
from pelican import signals 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, from pelican.utils import (slugify, truncate_html_words, memoized, strftime,
python_2_unicode_compatible, deprecated_attribute, python_2_unicode_compatible, deprecated_attribute,
path_to_url) path_to_url)
@ -44,7 +44,7 @@ class Content(object):
if metadata is None: if metadata is None:
metadata = {} metadata = {}
if settings is None: if settings is None:
settings = copy.deepcopy(_DEFAULT_CONFIG) settings = copy.deepcopy(DEFAULT_CONFIG)
self.settings = settings self.settings = settings
self._content = content self._content = content

View file

@ -25,84 +25,81 @@ logger = logging.getLogger(__name__)
DEFAULT_THEME = os.path.join(os.path.dirname(os.path.abspath(__file__)), DEFAULT_THEME = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'themes', 'notmyidea') 'themes', 'notmyidea')
_DEFAULT_CONFIG = {'PATH': os.curdir, DEFAULT_CONFIG = {
'ARTICLE_DIR': '', 'PATH': os.curdir,
'ARTICLE_EXCLUDES': ('pages',), 'ARTICLE_DIR': '',
'PAGE_DIR': 'pages', 'ARTICLE_EXCLUDES': ('pages',),
'PAGE_EXCLUDES': (), 'PAGE_DIR': 'pages',
'THEME': DEFAULT_THEME, 'PAGE_EXCLUDES': (),
'OUTPUT_PATH': 'output', 'THEME': DEFAULT_THEME,
'MARKUP': ('rst', 'md'), 'OUTPUT_PATH': 'output',
'STATIC_PATHS': ['images', ], 'MARKUP': ('rst', 'md'),
'THEME_STATIC_PATHS': ['static', ], 'STATIC_PATHS': ['images', ],
'FEED_ALL_ATOM': os.path.join('feeds', 'all.atom.xml'), 'THEME_STATIC_PATHS': ['static', ],
'CATEGORY_FEED_ATOM': os.path.join('feeds', '%s.atom.xml'), 'FEED_ALL_ATOM': os.path.join('feeds', 'all.atom.xml'),
'TRANSLATION_FEED_ATOM': os.path.join( 'CATEGORY_FEED_ATOM': os.path.join('feeds', '%s.atom.xml'),
'feeds', 'all-%s.atom.xml'), 'TRANSLATION_FEED_ATOM': os.path.join('feeds', 'all-%s.atom.xml'),
'FEED_MAX_ITEMS': '', 'FEED_MAX_ITEMS': '',
'SITEURL': '', 'SITEURL': '',
'SITENAME': 'A Pelican Blog', 'SITENAME': 'A Pelican Blog',
'DISPLAY_PAGES_ON_MENU': True, 'DISPLAY_PAGES_ON_MENU': True,
'DISPLAY_CATEGORIES_ON_MENU': True, 'DISPLAY_CATEGORIES_ON_MENU': True,
'PDF_GENERATOR': False, 'PDF_GENERATOR': False,
'OUTPUT_SOURCES': False, 'OUTPUT_SOURCES': False,
'OUTPUT_SOURCES_EXTENSION': '.text', 'OUTPUT_SOURCES_EXTENSION': '.text',
'USE_FOLDER_AS_CATEGORY': True, 'USE_FOLDER_AS_CATEGORY': True,
'DEFAULT_CATEGORY': 'misc', 'DEFAULT_CATEGORY': 'misc',
'WITH_FUTURE_DATES': True, 'WITH_FUTURE_DATES': True,
'CSS_FILE': 'main.css', 'CSS_FILE': 'main.css',
'NEWEST_FIRST_ARCHIVES': True, 'NEWEST_FIRST_ARCHIVES': True,
'REVERSE_CATEGORY_ORDER': False, 'REVERSE_CATEGORY_ORDER': False,
'DELETE_OUTPUT_DIRECTORY': False, 'DELETE_OUTPUT_DIRECTORY': False,
'ARTICLE_URL': '{slug}.html', 'ARTICLE_URL': '{slug}.html',
'ARTICLE_SAVE_AS': '{slug}.html', 'ARTICLE_SAVE_AS': '{slug}.html',
'ARTICLE_LANG_URL': '{slug}-{lang}.html', 'ARTICLE_LANG_URL': '{slug}-{lang}.html',
'ARTICLE_LANG_SAVE_AS': '{slug}-{lang}.html', 'ARTICLE_LANG_SAVE_AS': '{slug}-{lang}.html',
'PAGE_URL': 'pages/{slug}.html', 'PAGE_URL': 'pages/{slug}.html',
'PAGE_SAVE_AS': os.path.join('pages', '{slug}.html'), 'PAGE_SAVE_AS': os.path.join('pages', '{slug}.html'),
'PAGE_LANG_URL': 'pages/{slug}-{lang}.html', 'PAGE_LANG_URL': 'pages/{slug}-{lang}.html',
'PAGE_LANG_SAVE_AS': os.path.join( 'PAGE_LANG_SAVE_AS': os.path.join('pages', '{slug}-{lang}.html'),
'pages', '{slug}-{lang}.html'), 'STATIC_URL': '{path}',
'STATIC_URL': '{path}', 'STATIC_SAVE_AS': '{path}',
'STATIC_SAVE_AS': '{path}', 'CATEGORY_URL': 'category/{slug}.html',
'CATEGORY_URL': 'category/{slug}.html', 'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'),
'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'), 'TAG_URL': 'tag/{slug}.html',
'TAG_URL': 'tag/{slug}.html', 'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'),
'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'), 'AUTHOR_URL': 'author/{slug}.html',
'AUTHOR_URL': 'author/{slug}.html', 'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'),
'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'), 'YEAR_ARCHIVE_SAVE_AS': False,
'YEAR_ARCHIVE_SAVE_AS': False, 'MONTH_ARCHIVE_SAVE_AS': False,
'MONTH_ARCHIVE_SAVE_AS': False, 'DAY_ARCHIVE_SAVE_AS': False,
'DAY_ARCHIVE_SAVE_AS': False, 'RELATIVE_URLS': False,
'RELATIVE_URLS': False, 'DEFAULT_LANG': 'en',
'DEFAULT_LANG': 'en', 'TAG_CLOUD_STEPS': 4,
'TAG_CLOUD_STEPS': 4, 'TAG_CLOUD_MAX_ITEMS': 100,
'TAG_CLOUD_MAX_ITEMS': 100, 'DIRECT_TEMPLATES': ('index', 'tags', 'categories', 'archives'),
'DIRECT_TEMPLATES': ('index', 'tags', 'categories', 'EXTRA_TEMPLATES_PATHS': [],
'archives'), 'PAGINATED_DIRECT_TEMPLATES': ('index', ),
'EXTRA_TEMPLATES_PATHS': [], 'PELICAN_CLASS': 'pelican.Pelican',
'PAGINATED_DIRECT_TEMPLATES': ('index', ), 'DEFAULT_DATE_FORMAT': '%a %d %B %Y',
'PELICAN_CLASS': 'pelican.Pelican', 'DATE_FORMATS': {},
'DEFAULT_DATE_FORMAT': '%a %d %B %Y', 'JINJA_EXTENSIONS': [],
'DATE_FORMATS': {}, 'LOCALE': '', # defaults to user locale
'JINJA_EXTENSIONS': [], 'DEFAULT_PAGINATION': False,
'LOCALE': '', # defaults to user locale 'DEFAULT_ORPHANS': 0,
'DEFAULT_PAGINATION': False, 'DEFAULT_METADATA': (),
'DEFAULT_ORPHANS': 0, 'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2}).*',
'DEFAULT_METADATA': (), 'PATH_METADATA': '',
'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2}).*', 'FILES_TO_COPY': (),
'PATH_METADATA': '', 'DEFAULT_STATUS': 'published',
'FILES_TO_COPY': (), 'ARTICLE_PERMALINK_STRUCTURE': '',
'DEFAULT_STATUS': 'published', 'TYPOGRIFY': False,
'ARTICLE_PERMALINK_STRUCTURE': '', 'SUMMARY_MAX_LENGTH': 50,
'TYPOGRIFY': False, 'PLUGIN_PATH': '',
'SUMMARY_MAX_LENGTH': 50, 'PLUGINS': [],
'PLUGIN_PATH': '', 'TEMPLATE_PAGES': {},
'PLUGINS': [], 'IGNORE_FILES': ['.#*'],
'TEMPLATE_PAGES': {}, }
'IGNORE_FILES': ['.#*']
}
def read_settings(path=None, override=None): def read_settings(path=None, override=None):
if path: 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): if p not in ('THEME', 'PLUGIN_PATH') or os.path.exists(absp):
local_settings[p] = absp local_settings[p] = absp
else: else:
local_settings = copy.deepcopy(_DEFAULT_CONFIG) local_settings = copy.deepcopy(DEFAULT_CONFIG)
if override: if override:
local_settings.update(override) local_settings.update(override)
@ -124,7 +121,7 @@ def read_settings(path=None, override=None):
return configure_settings(local_settings) 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.""" """Loads settings from a module, returns a dictionary."""
context = copy.deepcopy(default_settings) context = copy.deepcopy(default_settings)
@ -134,7 +131,7 @@ def get_settings_from_module(module=None, default_settings=_DEFAULT_CONFIG):
return context 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.""" """Loads settings from a file path, returning a dict."""
name, ext = os.path.splitext(os.path.basename(path)) 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. # try to set the different locales, fallback on the default.
if not locales: if not locales:
locales = _DEFAULT_CONFIG['LOCALE'] locales = DEFAULT_CONFIG['LOCALE']
for locale_ in locales: for locale_ in locales:
try: try:
@ -222,11 +219,11 @@ def configure_settings(settings):
if not isinstance(settings['OUTPUT_SOURCES_EXTENSION'], if not isinstance(settings['OUTPUT_SOURCES_EXTENSION'],
six.string_types): six.string_types):
settings['OUTPUT_SOURCES_EXTENSION'] = ( settings['OUTPUT_SOURCES_EXTENSION'] = (
_DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION']) DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION'])
logger.warning( logger.warning(
'Detected misconfiguration with OUTPUT_SOURCES_EXTENSION, ' 'Detected misconfiguration with OUTPUT_SOURCES_EXTENSION, '
'falling back to the default extension ' + 'falling back to the default extension ' +
_DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION']) DEFAULT_CONFIG['OUTPUT_SOURCES_EXTENSION'])
filename_metadata = settings.get('FILENAME_METADATA') filename_metadata = settings.get('FILENAME_METADATA')
if filename_metadata and not isinstance(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 ' 'setting (must be string or compiled pattern), falling '
'back to the default') 'back to the default')
settings['FILENAME_METADATA'] = ( settings['FILENAME_METADATA'] = (
_DEFAULT_CONFIG['FILENAME_METADATA']) DEFAULT_CONFIG['FILENAME_METADATA'])
# Save people from accidentally setting a string rather than a list # Save people from accidentally setting a string rather than a list
path_keys = ( path_keys = (
@ -257,6 +254,6 @@ def configure_settings(settings):
logger.warning("Detected misconfiguration with %s setting (must " logger.warning("Detected misconfiguration with %s setting (must "
"be a list), falling back to the default" "be a list), falling back to the default"
% PATH_KEY) % PATH_KEY)
settings[PATH_KEY] = _DEFAULT_CONFIG[PATH_KEY] settings[PATH_KEY] = DEFAULT_CONFIG[PATH_KEY]
return settings return settings

View file

@ -18,7 +18,7 @@ from tempfile import mkdtemp
from shutil import rmtree from shutil import rmtree
from pelican.contents import Article from pelican.contents import Article
from pelican.settings import _DEFAULT_CONFIG from pelican.settings import DEFAULT_CONFIG
@contextmanager @contextmanager
@ -162,7 +162,7 @@ def locale_available(locale_):
def get_settings(): def get_settings():
settings = _DEFAULT_CONFIG.copy() settings = DEFAULT_CONFIG.copy()
settings['DIRECT_TEMPLATES'] = ['archives'] settings['DIRECT_TEMPLATES'] = ['archives']
settings['filenames'] = {} settings['filenames'] = {}
return settings return settings

View file

@ -7,7 +7,7 @@ from sys import platform
from .support import unittest from .support import unittest
from pelican.contents import Page, Article, URLWrapper 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.utils import truncate_html_words
from pelican.signals import content_object_init from pelican.signals import content_object_init
from jinja2.utils import generate_lorem_ipsum 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, # If a :SUMMARY_MAX_LENGTH: is set, and there is no other summary,
# generated summary should not exceed the given length. # generated summary should not exceed the given length.
page_kwargs = self._copy_page_kwargs() page_kwargs = self._copy_page_kwargs()
settings = _DEFAULT_CONFIG.copy() settings = DEFAULT_CONFIG.copy()
page_kwargs['settings'] = settings page_kwargs['settings'] = settings
del page_kwargs['metadata']['summary'] del page_kwargs['metadata']['summary']
settings['SUMMARY_MAX_LENGTH'] = None settings['SUMMARY_MAX_LENGTH'] = None
@ -83,7 +83,7 @@ class TestPage(unittest.TestCase):
def test_defaultlang(self): def test_defaultlang(self):
# If no lang is given, default to the default one. # If no lang is given, default to the default one.
page = Page(**self.page_kwargs) 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 # it is possible to specify the lang in the metadata infos
self.page_kwargs['metadata'].update({'lang': 'fr', }) self.page_kwargs['metadata'].update({'lang': 'fr', })
@ -108,7 +108,7 @@ class TestPage(unittest.TestCase):
page = Page(**self.page_kwargs) page = Page(**self.page_kwargs)
self.assertIn('summary', page.url_format.keys()) self.assertIn('summary', page.url_format.keys())
page.metadata['directory'] = 'test-dir' page.metadata['directory'] = 'test-dir'
page.settings = _DEFAULT_CONFIG.copy() page.settings = DEFAULT_CONFIG.copy()
page.settings['PAGE_SAVE_AS'] = '{directory}/{slug}' page.settings['PAGE_SAVE_AS'] = '{directory}/{slug}'
self.assertEqual(page.save_as, 'test-dir/foo-bar') self.assertEqual(page.save_as, 'test-dir/foo-bar')
@ -123,10 +123,10 @@ class TestPage(unittest.TestCase):
page = Page(**page_kwargs) page = Page(**page_kwargs)
self.assertEqual(page.locale_date, 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 page_kwargs['settings'] = dict([(x, DEFAULT_CONFIG[x]) for x in
_DEFAULT_CONFIG]) DEFAULT_CONFIG])
# I doubt this can work on all platforms ... # I doubt this can work on all platforms ...
if platform == "win32": if platform == "win32":

View file

@ -11,7 +11,7 @@ from shutil import rmtree
from pelican.generators import (ArticlesGenerator, PagesGenerator, from pelican.generators import (ArticlesGenerator, PagesGenerator,
TemplatePagesGenerator) TemplatePagesGenerator)
from pelican.writers import Writer 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 from pelican.tests.support import unittest, get_settings
CUR_DIR = os.path.dirname(__file__) CUR_DIR = os.path.dirname(__file__)
@ -117,15 +117,15 @@ class TestArticlesGenerator(unittest.TestCase):
def test_do_not_use_folder_as_category(self): def test_do_not_use_folder_as_category(self):
settings = _DEFAULT_CONFIG.copy() settings = DEFAULT_CONFIG.copy()
settings['ARTICLE_DIR'] = 'content' settings['ARTICLE_DIR'] = 'content'
settings['DEFAULT_CATEGORY'] = 'Default' settings['DEFAULT_CATEGORY'] = 'Default'
settings['DEFAULT_DATE'] = (1970, 1, 1) settings['DEFAULT_DATE'] = (1970, 1, 1)
settings['USE_FOLDER_AS_CATEGORY'] = False settings['USE_FOLDER_AS_CATEGORY'] = False
settings['filenames'] = {} settings['filenames'] = {}
generator = ArticlesGenerator(settings.copy(), settings, generator = ArticlesGenerator(
CUR_DIR, _DEFAULT_CONFIG['THEME'], None, settings.copy(), settings, CUR_DIR, DEFAULT_CONFIG['THEME'], None,
_DEFAULT_CONFIG['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

View file

@ -5,7 +5,7 @@ import os
from os.path import dirname, abspath, join from os.path import dirname, abspath, join
from pelican.settings import (read_settings, configure_settings, from pelican.settings import (read_settings, configure_settings,
_DEFAULT_CONFIG, DEFAULT_THEME) DEFAULT_CONFIG, DEFAULT_THEME)
from pelican.tests.support import unittest from pelican.tests.support import unittest
@ -27,7 +27,7 @@ class TestSettingsConfiguration(unittest.TestCase):
def test_keep_default_settings(self): def test_keep_default_settings(self):
# Keep default settings if not defined. # Keep default settings if not defined.
self.assertEqual(self.settings.get('DEFAULT_CATEGORY'), self.assertEqual(self.settings.get('DEFAULT_CATEGORY'),
_DEFAULT_CONFIG['DEFAULT_CATEGORY']) DEFAULT_CONFIG['DEFAULT_CATEGORY'])
def test_dont_copy_small_keys(self): def test_dont_copy_small_keys(self):
# Do not copy keys not in caps. # Do not copy keys not in caps.
@ -36,7 +36,7 @@ class TestSettingsConfiguration(unittest.TestCase):
def test_read_empty_settings(self): def test_read_empty_settings(self):
# Providing no file should return the default values. # Providing no file should return the default values.
settings = read_settings(None) settings = read_settings(None)
expected = copy.deepcopy(_DEFAULT_CONFIG) expected = copy.deepcopy(DEFAULT_CONFIG)
expected['FEED_DOMAIN'] = '' # Added by configure settings expected['FEED_DOMAIN'] = '' # Added by configure settings
self.maxDiff = None self.maxDiff = None
self.assertDictEqual(settings, expected) self.assertDictEqual(settings, expected)
@ -55,7 +55,7 @@ class TestSettingsConfiguration(unittest.TestCase):
# This assumes 'SITENAME': 'A Pelican Blog' # This assumes 'SITENAME': 'A Pelican Blog'
settings = read_settings(None) settings = read_settings(None)
settings['SITENAME'] = 'Not a Pelican Blog' 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): def test_path_settings_safety(self):
"""Don't let people setting the static path listings to strs""" """Don't let people setting the static path listings to strs"""
@ -69,9 +69,9 @@ class TestSettingsConfiguration(unittest.TestCase):
} }
configure_settings(settings) configure_settings(settings)
self.assertEqual(settings['STATIC_PATHS'], self.assertEqual(settings['STATIC_PATHS'],
_DEFAULT_CONFIG['STATIC_PATHS']) DEFAULT_CONFIG['STATIC_PATHS'])
self.assertEqual(settings['THEME_STATIC_PATHS'], self.assertEqual(settings['THEME_STATIC_PATHS'],
_DEFAULT_CONFIG['THEME_STATIC_PATHS']) DEFAULT_CONFIG['THEME_STATIC_PATHS'])
def test_configure_settings(self): def test_configure_settings(self):
#Manipulations to settings should be applied correctly. #Manipulations to settings should be applied correctly.