summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Metaireau <alexis@notmyidea.org>2012-08-16 04:40:15 -0700
committerAlexis Metaireau <alexis@notmyidea.org>2012-08-16 04:40:15 -0700
commite4df1da2524e42326f9f67fd86485cc002a46063 (patch)
treed6f590a151bd2224a84cf004d087361b13cdcb47
parent7b5b99b04bd49f24054d071d55bd53bb15ea00ef (diff)
parent7cb18a088ee37521bcdbd668a321f754bf83c28d (diff)
downloadpelican-e4df1da2524e42326f9f67fd86485cc002a46063.tar.gz
Merge pull request #449 from Julian/settings
A Possible Re-implementation for Issue #445
-rw-r--r--.gitignore2
-rw-r--r--pelican/settings.py32
2 files changed, 24 insertions, 10 deletions
diff --git a/.gitignore b/.gitignore
index 9274ba2d..9f9404ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@ build
dist
tags
.tox
+.coverage
+htmlcov
diff --git a/pelican/settings.py b/pelican/settings.py
index e9888f94..645a9809 100644
--- a/pelican/settings.py
+++ b/pelican/settings.py
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
+import imp
+import inspect
import os
import locale
import logging
@@ -84,21 +86,31 @@ def read_settings(filename=None):
return configured_settings
-def get_settings_from_file(filename, default_settings=None):
- """Load a Python file into a dictionary.
+def get_settings_from_module(module=None, default_settings=_DEFAULT_CONFIG):
"""
- if default_settings == None:
- default_settings = _DEFAULT_CONFIG
+ Load settings from a module, returning a dict.
+
+ """
+
context = default_settings.copy()
- if filename:
- tempdict = {}
- execfile(filename, tempdict)
- for key in tempdict:
- if key.isupper():
- context[key] = tempdict[key]
+ if module is not None:
+ context.update(
+ (k, v) for k, v in inspect.getmembers(module) if k.isupper()
+ )
return context
+def get_settings_from_file(filename, default_settings=_DEFAULT_CONFIG):
+ """
+ Load settings from a file path, returning a dict.
+
+ """
+
+ name = os.path.basename(filename).rpartition(".")[0]
+ module = imp.load_source(name, filename)
+ return get_settings_from_module(module, default_settings=default_settings)
+
+
def configure_settings(settings, default_settings=None, filename=None):
"""Provide optimizations, error checking, and warnings for loaded settings"""
if default_settings is None: