diff options
Diffstat (limited to 'django/db/models/loading.py')
| -rw-r--r-- | django/db/models/loading.py | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/django/db/models/loading.py b/django/db/models/loading.py index e07aab4efe..96ebe43941 100644 --- a/django/db/models/loading.py +++ b/django/db/models/loading.py @@ -10,7 +10,7 @@ import os import threading __all__ = ('get_apps', 'get_app', 'get_models', 'get_model', 'register_models', - 'load_app', 'app_cache_ready') + 'load_app', 'app_cache_ready', 'remove_model') class AppCache(object): """ @@ -178,6 +178,39 @@ class AppCache(object): continue model_dict[model_name] = model + def clear_apps(self): + """Clears cache so on next call, it will be reloaded.""" + self.loaded = False + self.write_lock.acquire() + self.handled.clear() + try: + if self.loaded: + return + for app_name in settings.INSTALLED_APPS: + if app_name in self.handled: + continue + self.load_app(app_name, True) + if not self.nesting_level: + for app_name in self.postponed: + self.load_app(app_name) + self.loaded = True + finally: + self.write_lock.release() + + def remove_model(self, model_name): + """Removes a model from the cache. Used when loading test-only models.""" + try: + try: + self.write_lock.acquire() + if model_name in self.app_models: + del self.app_models[model_name] + except Exception, e: + raise e + finally: + self.write_lock.release() + + + cache = AppCache() # These methods were always module level, so are kept that way for backwards @@ -190,3 +223,4 @@ get_model = cache.get_model register_models = cache.register_models load_app = cache.load_app app_cache_ready = cache.app_cache_ready +remove_model = cache.remove_model
\ No newline at end of file |
