From 7e81213b5a4570926afbd67eff7f2675f636d720 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Wed, 5 Sep 2012 15:12:39 -0400 Subject: [PATCH] Add some state management methods to AppCache. --- django/db/models/loading.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/django/db/models/loading.py b/django/db/models/loading.py index 7a9cb2cb41..0ed6caffa4 100644 --- a/django/db/models/loading.py +++ b/django/db/models/loading.py @@ -244,6 +244,37 @@ class AppCache(object): model_dict[model_name] = model 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() # These methods were always module level, so are kept that way for backwards