With a decorator approach here's what I whipped up: (This is dry code)
def with_settings(**overrides): """Allows you to define settings that are required for this function to work""" NotDefined = object() def wrapped(func): @wraps(func) def _with_settings(*args, **kwargs): _orig = {} for k, v in overrides.iteritems(): _orig[k] = getattr(settings, k, NotDefined) try: func(*args, **kwargs) finally: for k, v in _orig.iteritems(): if v is NotDefined: delattr(settings, k) else: setattr(settings, k, v) return _with_settings return wrapped I'm not familiar with the context managers, but I imagine those would solve things like adjusting CONTEXT_PROCESSORS. On Thu, Nov 4, 2010 at 1:06 PM, Dan Fairs <dan.fa...@gmail.com> wrote: > >> Let me start with an example test: >> >> def test_with_awesome_setting(self): >> _orig = getattr(settings, 'AWESOME', None) >> settings.AWESOME = True >> >> # do my test >> ... >> >> settings.AWESOME = _orig >> > > Pedant: there's a small bug above which has bitten me before doing a similar > thing - settings.AWESOME ends up set to None after the test has run if it > didn't exist before. > >> Anyways, I'd love to hear how others have dealt with this and any >> other possible solutions. > > I've used Michael Foord's Mock library to patch a setting for the duration of > a test case. Chris Withers' testfixtures library also has some sugar to > provide a context manager approach, though I haven't used that in a little > while. > > Cheers, > Dan > > -- > Dan Fairs | dan.fa...@gmail.com | www.fezconsulting.com > > > -- > You received this message because you are subscribed to the Google Groups > "Django developers" group. > To post to this group, send email to django-develop...@googlegroups.com. > To unsubscribe from this group, send email to > django-developers+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-developers?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.