Created
May 20, 2012 20:47
-
-
Save kipanshi/2759479 to your computer and use it in GitHub Desktop.
Overriding settings in Django tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SettingsContextManager(object): | |
"""Allow to change ``settings.*`` in ``with`` context.""" | |
def __init__(self, *settings_tuples): | |
self.settings = dict(settings_tuples) | |
self.orig_settings = dict([(key, getattr(settings, key)) | |
for key in self.settings]) | |
def __enter__(self, *args, **kwargs): | |
[setattr(settings, key, self.settings[key]) | |
for key in self.settings] | |
def __exit__(self, *args, **kwargs): | |
[setattr(settings, key, self.orig_settings[key]) | |
for key in self.settings] | |
def patch_settings(*settings_tuples): | |
"""Patch ``settings`` inside ``with`` context. | |
INPUT: | |
*settings_tuples one or several tuples | |
representing (setting_name, value) | |
""" | |
return SettingsContextManager(*settings_tuples) | |
def with_settings(**settings_dict): | |
"""Decorator for executing function within given ``settings`` context. | |
Example: @with_settings(CELERY_ALWAYS_EAGER=False) | |
""" | |
def wrap(func): | |
def wrapper(self, *args, **kwargs): | |
with patch_settings(*settings_dict.items()): | |
result = func(self, *args, **kwargs) | |
return result | |
return wrapper | |
return wrap |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment