Merge pull request #921 from wking/default-settings

Standardize `DEFAULT_CONFIG` handling
This commit is contained in:
Justin Mayer 2013-06-02 18:47:33 -07:00
commit 07b8c13db3
11 changed files with 233 additions and 238 deletions

View file

@ -154,7 +154,7 @@ class Pelican(object):
context = self.settings.copy() context = self.settings.copy()
context['filenames'] = {} # share the dict between all the generators context['filenames'] = {} # share the dict between all the generators
context['localsiteurl'] = self.settings.get('SITEURL') # share context['localsiteurl'] = self.settings['SITEURL'] # share
generators = [ generators = [
cls( cls(
context, context,
@ -309,7 +309,7 @@ def get_instance(args):
settings = read_settings(config_file, override=get_config(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): if isinstance(cls, six.string_types):
module, cls_name = cls.rsplit('.', 1) module, cls_name = cls.rsplit('.', 1)
module = __import__(module) module = __import__(module)

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,14 +44,14 @@ 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
self._context = context self._context = context
self.translations = [] self.translations = []
local_metadata = dict(settings.get('DEFAULT_METADATA', ())) local_metadata = dict(settings['DEFAULT_METADATA'])
local_metadata.update(metadata) local_metadata.update(metadata)
# set metadata as attributes # set metadata as attributes

View file

@ -47,7 +47,7 @@ class Generator(object):
self._templates_path = [] self._templates_path = []
self._templates_path.append(os.path.expanduser( self._templates_path.append(os.path.expanduser(
os.path.join(self.theme, 'templates'))) 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__)) theme_path = os.path.dirname(os.path.abspath(__file__))
@ -60,7 +60,7 @@ class Generator(object):
simple_loader, # implicit inheritance simple_loader, # implicit inheritance
PrefixLoader({'!simple': simple_loader}) # explicit one 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())) logger.debug('template list: {0}'.format(self.env.list_templates()))
@ -69,7 +69,7 @@ class Generator(object):
self.env.filters.update({'strftime': DateFormatter()}) self.env.filters.update({'strftime': DateFormatter()})
# get custom Jinja filters from user settings # 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) self.env.filters.update(custom_filters)
signals.generator_init.send(self) signals.generator_init.send(self)
@ -163,7 +163,7 @@ class TemplatePagesGenerator(Generator):
self.env.loader.loaders.insert(0, _FileLoader(source, self.path)) self.env.loader.loaders.insert(0, _FileLoader(source, self.path))
try: try:
template = self.env.get_template(source) 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) writer.write_file(dest, template, self.context, rurls)
finally: finally:
del self.env.loader.loaders[0] del self.env.loader.loaders[0]
@ -283,9 +283,9 @@ class ArticlesGenerator(Generator):
dates=archive, blog=True) dates=archive, blog=True)
period_save_as = { period_save_as = {
'year' : self.settings.get('YEAR_ARCHIVE_SAVE_AS'), 'year' : self.settings['YEAR_ARCHIVE_SAVE_AS'],
'month': self.settings.get('MONTH_ARCHIVE_SAVE_AS'), 'month': self.settings['MONTH_ARCHIVE_SAVE_AS'],
'day' : self.settings.get('DAY_ARCHIVE_SAVE_AS') 'day' : self.settings['DAY_ARCHIVE_SAVE_AS'],
} }
period_date_key = { period_date_key = {
@ -302,8 +302,8 @@ class ArticlesGenerator(Generator):
def generate_direct_templates(self, write): def generate_direct_templates(self, write):
"""Generate direct templates pages""" """Generate direct templates pages"""
PAGINATED_TEMPLATES = self.settings.get('PAGINATED_DIRECT_TEMPLATES') PAGINATED_TEMPLATES = self.settings['PAGINATED_DIRECT_TEMPLATES']
for template in self.settings.get('DIRECT_TEMPLATES'): for template in self.settings['DIRECT_TEMPLATES']:
paginated = {} paginated = {}
if template in PAGINATED_TEMPLATES: if template in PAGINATED_TEMPLATES:
paginated = {'articles': self.articles, 'dates': self.dates} paginated = {'articles': self.articles, 'dates': self.dates}
@ -358,7 +358,7 @@ class ArticlesGenerator(Generator):
def generate_pages(self, writer): def generate_pages(self, writer):
"""Generate the pages on the disk""" """Generate the pages on the disk"""
write = partial(writer.write_file, 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 # to minimize the number of relative path stuff modification
# in writer, articles pass first # in writer, articles pass first
@ -546,7 +546,7 @@ class PagesGenerator(Generator):
self.hidden_translations, self.hidden_pages): self.hidden_translations, self.hidden_pages):
writer.write_file(page.save_as, self.get_template(page.template), writer.write_file(page.save_as, self.get_template(page.template),
self.context, page=page, self.context, page=page,
relative_urls=self.settings.get('RELATIVE_URLS')) relative_urls=self.settings['RELATIVE_URLS'])
class StaticGenerator(Generator): class StaticGenerator(Generator):
@ -613,14 +613,8 @@ class PdfGenerator(Generator):
super(PdfGenerator, self).__init__(*args, **kwargs) super(PdfGenerator, self).__init__(*args, **kwargs)
try: try:
from rst2pdf.createpdf import RstToPdf from rst2pdf.createpdf import RstToPdf
if 'PDF_STYLE_PATH' in self.settings.keys(): pdf_style_path = os.path.join(self.settings['PDF_STYLE_PATH'])
pdf_style_path = os.path.join(self.settings['PDF_STYLE_PATH']) pdf_style = self.settings['PDF_STYLE']
else:
pdf_style_path = ''
if 'PDF_STYLE' in self.settings.keys():
pdf_style = self.settings.get('PDF_STYLE', 'twelvepoint')
self.pdfcreator = RstToPdf(breakside=0, self.pdfcreator = RstToPdf(breakside=0,
stylesheets=[pdf_style], stylesheets=[pdf_style],
style_path=[pdf_style_path]) style_path=[pdf_style_path])

View file

@ -157,12 +157,10 @@ class RstReader(Reader):
class MarkdownReader(Reader): class MarkdownReader(Reader):
enabled = bool(Markdown) enabled = bool(Markdown)
file_extensions = ['md', 'markdown', 'mkd', 'mdown'] file_extensions = ['md', 'markdown', 'mkd', 'mdown']
default_extensions = ['codehilite(css_class=highlight)', 'extra']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(MarkdownReader, self).__init__(*args, **kwargs) super(MarkdownReader, self).__init__(*args, **kwargs)
self.extensions = self.settings.get('MD_EXTENSIONS', self.extensions = self.settings['MD_EXTENSIONS']
self.default_extensions)
self.extensions.append('meta') self.extensions.append('meta')
self._md = Markdown(extensions=self.extensions) self._md = Markdown(extensions=self.extensions)
@ -309,7 +307,7 @@ class AsciiDocReader(Reader):
content = StringIO() content = StringIO()
ad = AsciiDocAPI() ad = AsciiDocAPI()
options = self.settings.get('ASCIIDOC_OPTIONS', []) options = self.settings['ASCIIDOC_OPTIONS']
if isinstance(options, (str, unicode)): if isinstance(options, (str, unicode)):
options = [m.strip() for m in options.split(',')] options = [m.strip() for m in options.split(',')]
options = self.default_options + options options = self.default_options + options
@ -362,7 +360,7 @@ def read_file(path, fmt=None, settings=None):
metadata.update(reader_metadata) metadata.update(reader_metadata)
# eventually filter the content with typogrify if asked so # 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 from typogrify.filters import typogrify
content = typogrify(content) content = typogrify(content)
metadata['title'] = typogrify(metadata['title']) metadata['title'] = typogrify(metadata['title'])

View file

@ -25,84 +25,86 @@ 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}', 'PDF_STYLE_PATH': '',
'CATEGORY_URL': 'category/{slug}.html', 'PDF_STYLE': 'twelvepoint',
'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'), 'CATEGORY_URL': 'category/{slug}.html',
'TAG_URL': 'tag/{slug}.html', 'CATEGORY_SAVE_AS': os.path.join('category', '{slug}.html'),
'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'), 'TAG_URL': 'tag/{slug}.html',
'AUTHOR_URL': 'author/{slug}.html', 'TAG_SAVE_AS': os.path.join('tag', '{slug}.html'),
'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'), 'AUTHOR_URL': 'author/{slug}.html',
'YEAR_ARCHIVE_SAVE_AS': False, 'AUTHOR_SAVE_AS': os.path.join('author', '{slug}.html'),
'MONTH_ARCHIVE_SAVE_AS': False, 'YEAR_ARCHIVE_SAVE_AS': False,
'DAY_ARCHIVE_SAVE_AS': False, 'MONTH_ARCHIVE_SAVE_AS': False,
'RELATIVE_URLS': False, 'DAY_ARCHIVE_SAVE_AS': False,
'DEFAULT_LANG': 'en', 'RELATIVE_URLS': False,
'TAG_CLOUD_STEPS': 4, 'DEFAULT_LANG': 'en',
'TAG_CLOUD_MAX_ITEMS': 100, 'TAG_CLOUD_STEPS': 4,
'DIRECT_TEMPLATES': ('index', 'tags', 'categories', 'TAG_CLOUD_MAX_ITEMS': 100,
'archives'), 'DIRECT_TEMPLATES': ('index', 'tags', 'categories', 'archives'),
'EXTRA_TEMPLATES_PATHS': [], 'EXTRA_TEMPLATES_PATHS': [],
'PAGINATED_DIRECT_TEMPLATES': ('index', ), 'PAGINATED_DIRECT_TEMPLATES': ('index', ),
'PELICAN_CLASS': 'pelican.Pelican', 'PELICAN_CLASS': 'pelican.Pelican',
'DEFAULT_DATE_FORMAT': '%a %d %B %Y', 'DEFAULT_DATE_FORMAT': '%a %d %B %Y',
'DATE_FORMATS': {}, 'DATE_FORMATS': {},
'JINJA_EXTENSIONS': [], 'ASCIIDOC_OPTIONS': [],
'LOCALE': '', # defaults to user locale 'MD_EXTENSIONS': ['codehilite(css_class=highlight)', 'extra'],
'DEFAULT_PAGINATION': False, 'JINJA_EXTENSIONS': [],
'DEFAULT_ORPHANS': 0, 'JINJA_FILTERS': {},
'DEFAULT_METADATA': (), 'LOCALE': [], # defaults to user locale
'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2}).*', 'DEFAULT_PAGINATION': False,
'PATH_METADATA': '', 'DEFAULT_ORPHANS': 0,
'FILES_TO_COPY': (), 'DEFAULT_METADATA': (),
'DEFAULT_STATUS': 'published', 'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2}).*',
'ARTICLE_PERMALINK_STRUCTURE': '', 'PATH_METADATA': '',
'TYPOGRIFY': False, 'FILES_TO_COPY': (),
'SUMMARY_MAX_LENGTH': 50, 'DEFAULT_STATUS': 'published',
'PLUGIN_PATH': '', 'ARTICLE_PERMALINK_STRUCTURE': '',
'PLUGINS': [], 'TYPOGRIFY': False,
'TEMPLATE_PAGES': {}, 'SUMMARY_MAX_LENGTH': 50,
'IGNORE_FILES': ['.#*'] 'PLUGIN_PATH': '',
} 'PLUGINS': [],
'TEMPLATE_PAGES': {},
'IGNORE_FILES': ['.#*'],
}
def read_settings(path=None, override=None): def read_settings(path=None, override=None):
if path: if path:
@ -116,7 +118,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 +126,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 +136,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))
@ -163,15 +165,34 @@ def configure_settings(settings):
raise Exception("Could not find the theme %s" raise Exception("Could not find the theme %s"
% settings['THEME']) % settings['THEME'])
# if locales is not a list, make it one # standardize strings to lowercase strings
locales = settings['LOCALE'] for key in [
'DEFAULT_LANG',
]:
if key in settings:
settings[key] = settings[key].lower()
if isinstance(locales, six.string_types): # standardize strings to lists
locales = [locales] for key in [
'LOCALE',
]:
if key in settings and isinstance(settings[key], six.string_types):
settings[key] = [settings[key]]
# check settings that must be a particular type
for key, types in [
('OUTPUT_SOURCES_EXTENSION', six.string_types),
('FILENAME_METADATA', six.string_types),
]:
if key in settings and not isinstance(settings[key], types):
value = settings.pop(key)
logger.warn(
'Detected misconfigured {} ({}), '
'falling back to the default ({})'.format(
key, value, DEFAULT_CONFIG[key]))
# try to set the different locales, fallback on the default. # try to set the different locales, fallback on the default.
if not locales: locales = settings.get('LOCALE', DEFAULT_CONFIG['LOCALE'])
locales = _DEFAULT_CONFIG['LOCALE']
for locale_ in locales: for locale_ in locales:
try: try:
@ -213,31 +234,6 @@ def configure_settings(settings):
'http://docs.getpelican.com/en/latest/settings.html#timezone ' 'http://docs.getpelican.com/en/latest/settings.html#timezone '
'for more information') 'for more information')
if 'LESS_GENERATOR' in settings:
logger.warning(
'The LESS_GENERATOR setting has been removed in favor '
'of the Webassets plugin')
if 'OUTPUT_SOURCES_EXTENSION' in settings:
if not isinstance(settings['OUTPUT_SOURCES_EXTENSION'],
six.string_types):
settings['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'])
filename_metadata = settings.get('FILENAME_METADATA')
if filename_metadata and not isinstance(filename_metadata,
six.string_types):
logger.error(
'Detected misconfiguration with FILENAME_METADATA '
'setting (must be string or compiled pattern), falling '
'back to the default')
settings['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 = (
'ARTICLE_EXCLUDES', 'ARTICLE_EXCLUDES',
@ -257,6 +253,15 @@ 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]
for old,new,doc in [
('LESS_GENERATOR', 'the Webassets plugin', None),
]:
if old in settings:
message = 'The {} setting has been removed in favor of {}'
if doc:
message += ', see {} for details'
logger.warning(message)
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
@ -161,10 +161,14 @@ def locale_available(locale_):
return True return True
def get_settings(): def get_settings(**kwargs):
settings = _DEFAULT_CONFIG.copy() """Provide tweaked setting dictionaries for testing
settings['DIRECT_TEMPLATES'] = ['archives']
settings['filenames'] = {} Set keyword arguments to override specific settings.
"""
settings = DEFAULT_CONFIG.copy()
for key,value in kwargs.items():
settings[key] = value
return settings return settings

View file

@ -4,10 +4,10 @@ from __future__ import unicode_literals
from datetime import datetime from datetime import datetime
from sys import platform from sys import platform
from .support import unittest from .support import unittest, get_settings
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 = get_settings()
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,8 +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 = get_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')
def test_datetime(self): def test_datetime(self):
@ -123,10 +122,9 @@ 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'] = get_settings()
_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__)
@ -29,7 +29,7 @@ class TestArticlesGenerator(unittest.TestCase):
for each test. for each test.
""" """
if self.generator is None: if self.generator is None:
settings = get_settings() settings = get_settings(filenames={})
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)
@ -53,16 +53,16 @@ class TestArticlesGenerator(unittest.TestCase):
def test_generate_feeds(self): def test_generate_feeds(self):
settings = get_settings() settings = get_settings()
generator = ArticlesGenerator(settings, generator = ArticlesGenerator(settings, settings, None,
{'FEED_ALL_ATOM': settings['FEED_ALL_ATOM']}, None,
settings['THEME'], None, settings['MARKUP']) settings['THEME'], None, 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(settings, {'FEED_ALL_ATOM': None}, None, generator = ArticlesGenerator(
settings['THEME'], None, None) settings, get_settings(FEED_ALL_ATOM=None), None,
settings['THEME'], None, 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)
@ -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
@ -144,7 +144,7 @@ class TestArticlesGenerator(unittest.TestCase):
def test_direct_templates_save_as_default(self): def test_direct_templates_save_as_default(self):
settings = get_settings() settings = get_settings(filenames={})
generator = ArticlesGenerator(settings, settings, None, generator = ArticlesGenerator(settings, settings, None,
settings['THEME'], None, settings['THEME'], None,
settings['MARKUP']) settings['MARKUP'])
@ -212,7 +212,7 @@ class TestPageGenerator(unittest.TestCase):
return distilled return distilled
def test_generate_context(self): def test_generate_context(self):
settings = get_settings() settings = get_settings(filenames={})
settings['PAGE_DIR'] = 'TestPages' settings['PAGE_DIR'] = 'TestPages'
settings['DEFAULT_DATE'] = (1970, 1, 1) settings['DEFAULT_DATE'] = (1970, 1, 1)

View file

@ -5,7 +5,7 @@ import datetime
import os import os
from pelican import readers from pelican import readers
from pelican.tests.support import unittest from pelican.tests.support import unittest, get_settings
CUR_DIR = os.path.dirname(__file__) CUR_DIR = os.path.dirname(__file__)
CONTENT_PATH = os.path.join(CUR_DIR, 'content') CONTENT_PATH = os.path.join(CUR_DIR, 'content')
@ -15,11 +15,18 @@ def _path(*args):
return os.path.join(CONTENT_PATH, *args) return os.path.join(CONTENT_PATH, *args)
class RstReaderTest(unittest.TestCase): class ReaderTest(unittest.TestCase):
def read_file(self, path, **kwargs):
# Isolate from future API changes to readers.read_file
return readers.read_file(
_path(path), settings=get_settings(**kwargs))
class RstReaderTest(ReaderTest):
def test_article_with_metadata(self): def test_article_with_metadata(self):
reader = readers.RstReader({}) content, metadata = self.read_file(path='article_with_metadata.rst')
content, metadata = reader.read(_path('article_with_metadata.rst'))
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -36,8 +43,9 @@ class RstReaderTest(unittest.TestCase):
self.assertEqual(value, metadata[key], key) self.assertEqual(value, metadata[key], key)
def test_article_with_filename_metadata(self): def test_article_with_filename_metadata(self):
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('2012-11-29_rst_w_filename_meta#foo-bar.rst')) path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
FILENAME_METADATA=None)
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -46,11 +54,9 @@ class RstReaderTest(unittest.TestCase):
for key, value in metadata.items(): for key, value in metadata.items():
self.assertEqual(value, expected[key], key) self.assertEqual(value, expected[key], key)
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('2012-11-29_rst_w_filename_meta#foo-bar.rst'), path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
settings={ FILENAME_METADATA='(?P<date>\d{4}-\d{2}-\d{2}).*')
'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2}).*'
})
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -60,13 +66,12 @@ class RstReaderTest(unittest.TestCase):
for key, value in metadata.items(): for key, value in metadata.items():
self.assertEqual(value, expected[key], key) self.assertEqual(value, expected[key], key)
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('2012-11-29_rst_w_filename_meta#foo-bar.rst'), path='2012-11-29_rst_w_filename_meta#foo-bar.rst',
settings={ FILENAME_METADATA=(
'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2})_' '(?P<date>\d{4}-\d{2}-\d{2})_'
'_(?P<Slug>.*)' '_(?P<Slug>.*)'
'#(?P<MyMeta>.*)-(?P<author>.*)' '#(?P<MyMeta>.*)-(?P<author>.*)'))
})
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -80,7 +85,7 @@ class RstReaderTest(unittest.TestCase):
def test_article_metadata_key_lowercase(self): def test_article_metadata_key_lowercase(self):
# Keys of metadata should be lowercase. # Keys of metadata should be lowercase.
reader = readers.RstReader({}) reader = readers.RstReader(settings=get_settings())
content, metadata = reader.read( content, metadata = reader.read(
_path('article_with_uppercase_metadata.rst')) _path('article_with_uppercase_metadata.rst'))
@ -91,7 +96,7 @@ class RstReaderTest(unittest.TestCase):
def test_typogrify(self): def test_typogrify(self):
# if nothing is specified in the settings, the content should be # if nothing is specified in the settings, the content should be
# unmodified # unmodified
content, _ = readers.read_file(_path('article.rst')) content, _ = self.read_file(path='article.rst')
expected = ('<p>This is some content. With some stuff to ' expected = ('<p>This is some content. With some stuff to '
'&quot;typogrify&quot;.</p>\n<p>Now with added ' '&quot;typogrify&quot;.</p>\n<p>Now with added '
'support for <abbr title="three letter acronym">' 'support for <abbr title="three letter acronym">'
@ -101,8 +106,7 @@ class RstReaderTest(unittest.TestCase):
try: try:
# otherwise, typogrify should be applied # otherwise, typogrify should be applied
content, _ = readers.read_file(_path('article.rst'), content, _ = self.read_file(path='article.rst', TYPOGRIFY=True)
settings={'TYPOGRIFY': True})
expected = ('<p>This is some content. With some stuff to&nbsp;' expected = ('<p>This is some content. With some stuff to&nbsp;'
'&#8220;typogrify&#8221;.</p>\n<p>Now with added ' '&#8220;typogrify&#8221;.</p>\n<p>Now with added '
'support for <abbr title="three letter acronym">' 'support for <abbr title="three letter acronym">'
@ -113,11 +117,11 @@ class RstReaderTest(unittest.TestCase):
return unittest.skip('need the typogrify distribution') return unittest.skip('need the typogrify distribution')
class MdReaderTest(unittest.TestCase): class MdReaderTest(ReaderTest):
@unittest.skipUnless(readers.Markdown, "markdown isn't installed") @unittest.skipUnless(readers.Markdown, "markdown isn't installed")
def test_article_with_metadata(self): def test_article_with_metadata(self):
reader = readers.MarkdownReader({}) reader = readers.MarkdownReader(settings=get_settings())
content, metadata = reader.read( content, metadata = reader.read(
_path('article_with_md_extension.md')) _path('article_with_md_extension.md'))
expected = { expected = {
@ -146,7 +150,7 @@ class MdReaderTest(unittest.TestCase):
@unittest.skipUnless(readers.Markdown, "markdown isn't installed") @unittest.skipUnless(readers.Markdown, "markdown isn't installed")
def test_article_with_footnote(self): def test_article_with_footnote(self):
reader = readers.MarkdownReader({}) reader = readers.MarkdownReader(settings=get_settings())
content, metadata = reader.read( content, metadata = reader.read(
_path('article_with_markdown_and_footnote.md')) _path('article_with_markdown_and_footnote.md'))
expected_content = ( expected_content = (
@ -182,7 +186,7 @@ class MdReaderTest(unittest.TestCase):
@unittest.skipUnless(readers.Markdown, "markdown isn't installed") @unittest.skipUnless(readers.Markdown, "markdown isn't installed")
def test_article_with_file_extensions(self): 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 # test to ensure the md file extension is being processed by the
# correct reader # correct reader
content, metadata = reader.read( content, metadata = reader.read(
@ -221,9 +225,9 @@ class MdReaderTest(unittest.TestCase):
def test_article_with_markdown_markup_extension(self): def test_article_with_markdown_markup_extension(self):
# test to ensure the markdown markup extension is being processed as # test to ensure the markdown markup extension is being processed as
# expected # expected
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('article_with_markdown_markup_extensions.md'), path='article_with_markdown_markup_extensions.md',
settings={'MD_EXTENSIONS': ['toc', 'codehilite', 'extra']}) MD_EXTENSIONS=['toc', 'codehilite', 'extra'])
expected = ('<div class="toc">\n' expected = ('<div class="toc">\n'
'<ul>\n' '<ul>\n'
'<li><a href="#level1">Level1</a><ul>\n' '<li><a href="#level1">Level1</a><ul>\n'
@ -239,8 +243,9 @@ class MdReaderTest(unittest.TestCase):
@unittest.skipUnless(readers.Markdown, "markdown isn't installed") @unittest.skipUnless(readers.Markdown, "markdown isn't installed")
def test_article_with_filename_metadata(self): def test_article_with_filename_metadata(self):
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('2012-11-30_md_w_filename_meta#foo-bar.md')) path='2012-11-30_md_w_filename_meta#foo-bar.md',
FILENAME_METADATA=None)
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -248,11 +253,9 @@ class MdReaderTest(unittest.TestCase):
for key, value in expected.items(): for key, value in expected.items():
self.assertEqual(value, metadata[key], key) self.assertEqual(value, metadata[key], key)
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('2012-11-30_md_w_filename_meta#foo-bar.md'), path='2012-11-30_md_w_filename_meta#foo-bar.md',
settings={ FILENAME_METADATA='(?P<date>\d{4}-\d{2}-\d{2}).*')
'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2}).*'
})
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -261,13 +264,12 @@ class MdReaderTest(unittest.TestCase):
for key, value in expected.items(): for key, value in expected.items():
self.assertEqual(value, metadata[key], key) self.assertEqual(value, metadata[key], key)
content, metadata = readers.read_file( content, metadata = self.read_file(
_path('2012-11-30_md_w_filename_meta#foo-bar.md'), path='2012-11-30_md_w_filename_meta#foo-bar.md',
settings={ FILENAME_METADATA=(
'FILENAME_METADATA': '(?P<date>\d{4}-\d{2}-\d{2})' '(?P<date>\d{4}-\d{2}-\d{2})'
'_(?P<Slug>.*)' '_(?P<Slug>.*)'
'#(?P<MyMeta>.*)-(?P<author>.*)' '#(?P<MyMeta>.*)-(?P<author>.*)'))
})
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -279,14 +281,13 @@ class MdReaderTest(unittest.TestCase):
self.assertEqual(value, metadata[key], key) self.assertEqual(value, metadata[key], key)
class AdReaderTest(unittest.TestCase): class AdReaderTest(ReaderTest):
@unittest.skipUnless(readers.asciidoc, "asciidoc isn't installed") @unittest.skipUnless(readers.asciidoc, "asciidoc isn't installed")
def test_article_with_asc_extension(self): def test_article_with_asc_extension(self):
# Ensure the asc extension is being processed by the correct reader # Ensure the asc extension is being processed by the correct reader
reader = readers.AsciiDocReader({}) content, metadata = self.read_file(
content, metadata = reader.read( path='article_with_asc_extension.asc')
_path('article_with_asc_extension.asc'))
expected = ('<hr>\n<h2><a name="_used_for_pelican_test">' expected = ('<hr>\n<h2><a name="_used_for_pelican_test">'
'</a>Used for pelican test</h2>\n' '</a>Used for pelican test</h2>\n'
'<p>The quick brown fox jumped over' '<p>The quick brown fox jumped over'
@ -316,10 +317,9 @@ class AdReaderTest(unittest.TestCase):
self.assertEqual(content, expected) self.assertEqual(content, expected)
class HTMLReaderTest(unittest.TestCase): class HTMLReaderTest(ReaderTest):
def test_article_with_comments(self): def test_article_with_comments(self):
reader = readers.HTMLReader({}) content, metadata = self.read_file(path='article_with_comments.html')
content, metadata = reader.read(_path('article_with_comments.html'))
self.assertEqual(''' self.assertEqual('''
Body content Body content
@ -327,8 +327,7 @@ class HTMLReaderTest(unittest.TestCase):
''', content) ''', content)
def test_article_with_keywords(self): def test_article_with_keywords(self):
reader = readers.HTMLReader({}) content, metadata = self.read_file(path='article_with_keywords.html')
content, metadata = reader.read(_path('article_with_keywords.html'))
expected = { expected = {
'tags': ['foo', 'bar', 'foobar'], 'tags': ['foo', 'bar', 'foobar'],
} }
@ -337,8 +336,7 @@ class HTMLReaderTest(unittest.TestCase):
self.assertEqual(value, metadata[key], key) self.assertEqual(value, metadata[key], key)
def test_article_with_metadata(self): def test_article_with_metadata(self):
reader = readers.HTMLReader({}) content, metadata = self.read_file(path='article_with_metadata.html')
content, metadata = reader.read(_path('article_with_metadata.html'))
expected = { expected = {
'category': 'yeah', 'category': 'yeah',
'author': 'Alexis Métaireau', 'author': 'Alexis Métaireau',
@ -353,9 +351,8 @@ class HTMLReaderTest(unittest.TestCase):
self.assertEqual(value, metadata[key], key) self.assertEqual(value, metadata[key], key)
def test_article_with_null_attributes(self): def test_article_with_null_attributes(self):
reader = readers.HTMLReader({}) content, metadata = self.read_file(
content, metadata = reader.read( path='article_with_null_attributes.html')
_path('article_with_null_attributes.html'))
self.assertEqual(''' self.assertEqual('''
Ensure that empty attributes are copied properly. Ensure that empty attributes are copied properly.
@ -364,9 +361,8 @@ class HTMLReaderTest(unittest.TestCase):
def test_article_metadata_key_lowercase(self): def test_article_metadata_key_lowercase(self):
# Keys of metadata should be lowercase. # Keys of metadata should be lowercase.
reader = readers.HTMLReader({}) content, metadata = self.read_file(
content, metadata = reader.read( path='article_with_uppercase_metadata.html')
_path('article_with_uppercase_metadata.html'))
self.assertIn('category', metadata, 'Key should be lowercase.') self.assertIn('category', metadata, 'Key should be lowercase.')
self.assertEqual('Yeah', metadata.get('category'), self.assertEqual('Yeah', metadata.get('category'),
'Value keeps cases.') 'Value keeps cases.')

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.

View file

@ -155,10 +155,10 @@ class Writer(object):
for key in paginated.keys(): for key in paginated.keys():
object_list = paginated[key] object_list = paginated[key]
if self.settings.get('DEFAULT_PAGINATION'): if self.settings['DEFAULT_PAGINATION']:
paginators[key] = Paginator(object_list, paginators[key] = Paginator(object_list,
self.settings.get('DEFAULT_PAGINATION'), self.settings['DEFAULT_PAGINATION'],
self.settings.get('DEFAULT_ORPHANS')) self.settings['DEFAULT_ORPHANS'])
else: else:
paginators[key] = Paginator(object_list, len(object_list)) paginators[key] = Paginator(object_list, len(object_list))