Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #490 from tbunnyman/fixDEFAULT_CONFIGoverwrite

Deep copy _DEFAULT_SETTINGS instead of linking.
  • Loading branch information...
commit 88555de28c72f6611b15d5fb7e69b5d794e524b5 2 parents ffe4bf0 + 663d1e7
@ametaireau ametaireau authored
View
3  pelican/__init__.py
@@ -1,3 +1,4 @@
+import copy
import os
import re
import sys
@@ -29,7 +30,7 @@ def __init__(self, settings=None, path=None, theme=None, output_path=None,
before doing anything else.
"""
if settings is None:
- settings = _DEFAULT_CONFIG
+ settings = copy.deepcopy(_DEFAULT_CONFIG)
self.path = path or settings['PATH']
if not self.path:
View
3  pelican/contents.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+import copy
import locale
import logging
import functools
@@ -29,7 +30,7 @@ def __init__(self, content, metadata=None, settings=None,
if not metadata:
metadata = {}
if not settings:
- settings = _DEFAULT_CONFIG
+ settings = copy.deepcopy(_DEFAULT_CONFIG)
self.settings = settings
self._content = content
View
10 pelican/settings.py
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
+import copy
import imp
import inspect
import os
@@ -81,7 +82,7 @@ def read_settings(filename=None):
if filename:
local_settings = get_settings_from_file(filename)
else:
- local_settings = _DEFAULT_CONFIG
+ local_settings = copy.deepcopy(_DEFAULT_CONFIG)
configured_settings = configure_settings(local_settings, None, filename)
return configured_settings
@@ -89,10 +90,9 @@ def read_settings(filename=None):
def get_settings_from_module(module=None, default_settings=_DEFAULT_CONFIG):
"""
Load settings from a module, returning a dict.
-
"""
- context = default_settings.copy()
+ context = copy.deepcopy(default_settings)
if module is not None:
context.update(
(k, v) for k, v in inspect.getmembers(module) if k.isupper()
@@ -114,7 +114,7 @@ def get_settings_from_file(filename, default_settings=_DEFAULT_CONFIG):
def configure_settings(settings, default_settings=None, filename=None):
"""Provide optimizations, error checking, and warnings for loaded settings"""
if default_settings is None:
- default_settings = _DEFAULT_CONFIG
+ default_settings = copy.deepcopy(_DEFAULT_CONFIG)
# Make the paths relative to the settings file
if filename:
@@ -138,7 +138,7 @@ def configure_settings(settings, default_settings=None, filename=None):
for locale_ in locales:
try:
locale.setlocale(locale.LC_ALL, locale_)
- break # break if it is successfull
+ break # break if it is successful
except locale.Error:
pass
else:
View
24 tests/test_settings.py
@@ -1,6 +1,7 @@
+import copy
from os.path import dirname, abspath, join
-from pelican.settings import read_settings, configure_settings, _DEFAULT_CONFIG
+from pelican.settings import read_settings, configure_settings, _DEFAULT_CONFIG, DEFAULT_THEME
from .support import unittest
@@ -31,7 +32,26 @@ def test_dont_copy_small_keys(self):
def test_read_empty_settings(self):
"""providing no file should return the default values."""
settings = read_settings(None)
- self.assertDictEqual(settings, _DEFAULT_CONFIG)
+ expected = copy.deepcopy(_DEFAULT_CONFIG)
+ expected["FEED_DOMAIN"] = '' #This is added by configure settings
+ self.maxDiff = None
+ self.assertDictEqual(settings, expected)
+
+ def test_settings_return_independent(self):
+ """Make sure that the results from one settings call doesn't
+ effect past or future instances."""
+ self.PATH = abspath(dirname(__file__))
+ default_conf = join(self.PATH, 'default_conf.py')
+ settings = read_settings(default_conf)
+ settings['SITEURL'] = 'new-value'
+ new_settings = read_settings(default_conf)
+ self.assertNotEqual(new_settings['SITEURL'], settings['SITEURL'])
+
+ def test_defaults_not_overwritten(self):
+ """This assumes 'SITENAME': 'A Pelican Blog'"""
+ settings = read_settings(None)
+ settings['SITENAME'] = 'Not a Pelican Blog'
+ self.assertNotEqual(settings['SITENAME'], _DEFAULT_CONFIG['SITENAME'])
def test_configure_settings(self):
"""Manipulations to settings should be applied correctly."""
Please sign in to comment.
Something went wrong with that request. Please try again.