On Nov 5, 2:18 am, Alex Gaynor <alex.gay...@gmail.com> wrote: > def setUp(self): > self.old_SETTING = getattr(settings, "SETING", _missing) > > def tearDown(self): > if self.old_SETTING is _missing: > del settings.SETTING" > else: > settings.SETTING = self.old_SETTING
How about introducing a new function in settings: change_setting(name, new_value) which returns old setting or a marker when there is nothing configured for that value. This function would clear the caches if the setting is cached somewhere, and also handle the env updates for timezone or other settings needing that. Clearing caches is a problem that is not handled well at all in the Django test suite. You could then revert the setting using the same function. This would again handle clearing the caches & env handling. If passed in new_value was the marker for nothing, then the setting would be deleted. Using those functions setting changes would be done like this: def setUp(self): self.old_SETTING = settings.change_setting("SETTING", new_val) # or if you want just to store the setting and change it later in the actual tests # self.old_SETTING = settings.change_setting("SETTING") # will just fetch the old setting, or the marker for missing setting def tearDown(self): settings.change_setting("SETTING", self.old_SETTING) And you would not need to care if the setting was cached somewhere, the change_setting function will take care of that. I don't know if it would be good to have also settings.load_defaults (returns a dict containing all the old settings, loads global_settings). This would need a reverse function, I can't think of a good name for it, settings.revert_load_defaults(old_settings_dict) or something... The append case could have still another function, append_setting(name, value), returning old list (or marker if nothing) and inserting the new value in the list. Reverting would be just change_setting(name, append_setting_ret_val). Handling what needs to be done when changing a setting could be signal based (register_setting_change_listener), this would allow using the same mechanism for settings used by apps not in core. Of course, there could also be decorators which would use these functions... - Anssi -- 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.