Add some state management methods to AppCache.

This commit is contained in:
Andrew Godwin 2012-09-05 15:12:39 -04:00
parent b546e7eb63
commit 7e81213b5a
1 changed files with 31 additions and 0 deletions

View File

@ -244,6 +244,37 @@ class AppCache(object):
model_dict[model_name] = model model_dict[model_name] = model
self._get_models_cache.clear() self._get_models_cache.clear()
def save_state(self):
"""
Returns an object that contains the current AppCache state.
Can be provided to restore_state to undo actions.
"""
return {
"app_store": SortedDict(self.app_store.items()),
"app_labels": dict(self.app_errors.items()),
"app_models": SortedDict(self.app_models.items()),
"app_errors": dict(self.app_errors.items()),
}
def restore_state(self, state):
"""
Restores the AppCache to a previous state from save_state.
"""
self.app_store = state['app_store']
self.app_labels = state['app_labels']
self.app_models = state['app_models']
self.app_errors = state['app_errors']
def unregister_all(self):
"""
Wipes the AppCache clean of all registered models.
Used for things like migration libraries' fake ORMs.
"""
self.app_store = SortedDict()
self.app_labels = {}
self.app_models = SortedDict()
self.app_errors = {}
cache = AppCache() cache = AppCache()
# These methods were always module level, so are kept that way for backwards # These methods were always module level, so are kept that way for backwards