Skip to content

Commit

Permalink
load settings list like a pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
drgarcia1986 committed May 27, 2015
1 parent 1408e08 commit 1e06f00
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
14 changes: 9 additions & 5 deletions simple_settings/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ def __init__(self):

def _setup(self):
self._settings_module = self._get_settings_from_cmd_line()
if not self._settings_module:
if self._settings_module is None:
self._settings_module = os.environ.get('settings')
if not self._settings_module:
if self._settings_module is None:
raise RuntimeError('Settings are not configured')
self._load_settings_module()
self._load_settings_pipeline()

def _get_settings_from_cmd_line(self):
for arg in sys.argv:
Expand All @@ -25,8 +25,12 @@ def _get_settings_from_cmd_line(self):
except IndexError:
return None

def _load_settings_module(self):
module = importlib.import_module(self._settings_module)
def _load_settings_pipeline(self):
for settings_module in self._settings_module.split(','):
self._load_settings_module(settings_module)

def _load_settings_module(self, settings_module):
module = importlib.import_module(settings_module)
for setting in dir(module):
value = os.environ.get(setting, getattr(module, setting))
self._dict[setting] = value
Expand Down
5 changes: 5 additions & 0 deletions tests/samples/without_import.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-


SOME_TEXT = u'some text'
SIMPLE_INTEGER = 2
23 changes: 19 additions & 4 deletions tests/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def get_settings_by_cmd_line(module_name):
return _Settings()


def get_settings_by_enviroment(module_name):
def get_settings_by_environment(module_name):
with patch('os.environ.get') as mock:
mock.return_value = module_name
from simple_settings.core import _Settings
Expand All @@ -25,10 +25,10 @@ def test_should_load_module_by_cmd_line(self):

assert settings._settings_module == expect_module

def test_should_load_module_by_enviroment(self):
def test_should_load_module_by_environment(self):
expect_module = 'tests.samples.complex'
with patch.object(sys, 'argv', []):
settings = get_settings_by_enviroment(expect_module)
settings = get_settings_by_environment(expect_module)

assert settings._settings_module == expect_module

Expand All @@ -43,6 +43,21 @@ def test_should_inherit_settings(self):

assert settings.APPLICATION_NAME == u'Simple Settings'

def test_should_load_multiple_settings_by_pipeline(self):
settings = get_settings_by_cmd_line(
'tests.samples.simple,tests.samples.without_import'
)

assert settings.SIMPLE_STRING == u'simple'
assert settings.SOME_TEXT == u'some text'

def test_should_inherit_settings_with_pipeline(self):
settings = get_settings_by_cmd_line(
'tests.samples.simple,tests.samples.without_import'
)

assert settings.SIMPLE_INTEGER == 2

def test_complex_settings(self):
settings = get_settings_by_cmd_line('tests.samples.complex')

Expand All @@ -56,7 +71,7 @@ def test_settings_as_dict(self):
assert settings_dict['SIMPLE_STRING'] == u'simple'
assert settings_dict['SIMPLE_INTEGER'] == 1

def test_settings_override_by_enviroment(self):
def test_settings_override_by_environment(self):
def _mock_env_side_effect(k, d=None):
return u'simple from env' if k == 'SIMPLE_STRING' else d

Expand Down

0 comments on commit 1e06f00

Please sign in to comment.