Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Add some state management methods to AppCache.

  • Loading branch information...
commit 7e81213b5a4570926afbd67eff7f2675f636d720 1 parent b546e7e
@andrewgodwin andrewgodwin authored
Showing with 31 additions and 0 deletions.
  1. +31 −0 django/db/models/loading.py
View
31 django/db/models/loading.py
@@ -244,6 +244,37 @@ def register_models(self, app_label, *models):
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
Please sign in to comment.
Something went wrong with that request. Please try again.