1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
from django import template
from django.conf import settings
from django.template.engine import Engine
builtins = Engine.get_default().template_builtins
class NULL:
pass
class SettingsOverride: # pragma: no cover
"""
Overrides Django settings within a context and resets them to their inital
values on exit.
Example:
with SettingsOverride(DEBUG=True):
# do something
"""
def __init__(self, **overrides):
self.overrides = overrides
def __enter__(self):
self.old = {}
for key, value in self.overrides.items():
self.old[key] = getattr(settings, key, NULL)
setattr(settings, key, value)
def __exit__(self, type, value, traceback):
for key, value in self.old.items():
if value is not NULL:
setattr(settings, key, value)
else:
delattr(settings, key) # do not pollute the context!
class TemplateTags: # pragma: no cover
def __init__(self, *tags):
self.lib = template.Library()
for tag in tags:
self.lib.tag(tag)
def __enter__(self):
self.old = list(builtins)
builtins.insert(0, self.lib)
def __exit__(self, type, value, traceback):
builtins[:] = self.old
|