summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsobolevn <mail@sobolevn.me>2023-06-29 16:13:14 +0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-06-30 08:27:15 +0200
commit5820fc44854e421e4ebaaddb34d7109ff15e1148 (patch)
treea8621e3243ab1cb9a892c60d047413d8563502cd
parent953f29f700a60fc09b08b2c2270c12c447490c6a (diff)
Fixed #34687 -- Made Apps.clear_cache() clear get_swappable_settings_name() cache.
-rw-r--r--AUTHORS1
-rw-r--r--django/apps/registry.py1
-rw-r--r--tests/apps/tests.py11
3 files changed, 13 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index 2148c64322..40df3589c0 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -747,6 +747,7 @@ answer newbie questions, and generally made Django that much better:
Nicolas Lara <nicolaslara@gmail.com>
Nicolas Noé <nicolas@niconoe.eu>
Nikita Marchant <nikita.marchant@gmail.com>
+ Nikita Sobolev <mail@sobolevn.me>
Niran Babalola <niran@niran.org>
Nis Jørgensen <nis@superlativ.dk>
Nowell Strite <https://nowell.strite.org/>
diff --git a/django/apps/registry.py b/django/apps/registry.py
index 0683f3ad3c..92de6075fc 100644
--- a/django/apps/registry.py
+++ b/django/apps/registry.py
@@ -373,6 +373,7 @@ class Apps:
This is mostly used in tests.
"""
+ self.get_swappable_settings_name.cache_clear()
# Call expire cache on each model. This will purge
# the relation tree and the fields cache.
self.get_models.cache_clear()
diff --git a/tests/apps/tests.py b/tests/apps/tests.py
index 9f989c5d9a..ecfb70162f 100644
--- a/tests/apps/tests.py
+++ b/tests/apps/tests.py
@@ -197,6 +197,17 @@ class AppsTests(SimpleTestCase):
with self.assertRaises(ValueError):
apps.get_model("admin_LogEntry")
+ @override_settings(INSTALLED_APPS=SOME_INSTALLED_APPS)
+ def test_clear_cache(self):
+ # Set cache.
+ self.assertIsNone(apps.get_swappable_settings_name("admin.LogEntry"))
+ apps.get_models()
+
+ apps.clear_cache()
+
+ self.assertEqual(apps.get_swappable_settings_name.cache_info().currsize, 0)
+ self.assertEqual(apps.get_models.cache_info().currsize, 0)
+
@override_settings(INSTALLED_APPS=["apps.apps.RelabeledAppsConfig"])
def test_relabeling(self):
self.assertEqual(apps.get_app_config("relabeled").name, "apps")