Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/django/test/signals.py: 25%
139 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1import os
2import time
3import warnings
5from asgiref.local import Local
7from django.apps import apps
8from django.core.exceptions import ImproperlyConfigured
9from django.core.signals import setting_changed
10from django.db import connections, router
11from django.db.utils import ConnectionRouter
12from django.dispatch import Signal, receiver
13from django.utils import timezone
14from django.utils.formats import FORMAT_SETTINGS, reset_format_cache
15from django.utils.functional import empty
17template_rendered = Signal()
19# Most setting_changed receivers are supposed to be added below,
20# except for cases where the receiver is related to a contrib app.
22# Settings that may not work well when using 'override_settings' (#19031)
23COMPLEX_OVERRIDE_SETTINGS = {"DATABASES"}
26@receiver(setting_changed)
27def clear_cache_handlers(**kwargs):
28 if kwargs["setting"] == "CACHES":
29 from django.core.cache import caches, close_caches
31 close_caches()
32 caches._settings = caches.settings = caches.configure_settings(None)
33 caches._connections = Local()
36@receiver(setting_changed)
37def update_installed_apps(**kwargs):
38 if kwargs["setting"] == "INSTALLED_APPS":
39 # Rebuild any AppDirectoriesFinder instance.
40 from django.contrib.staticfiles.finders import get_finder
42 get_finder.cache_clear()
43 # Rebuild management commands cache
44 from django.core.management import get_commands
46 get_commands.cache_clear()
47 # Rebuild get_app_template_dirs cache.
48 from django.template.utils import get_app_template_dirs
50 get_app_template_dirs.cache_clear()
51 # Rebuild translations cache.
52 from django.utils.translation import trans_real
54 trans_real._translations = {}
57@receiver(setting_changed)
58def update_connections_time_zone(**kwargs):
59 if kwargs["setting"] == "TIME_ZONE":
60 # Reset process time zone
61 if hasattr(time, "tzset"):
62 if kwargs["value"]:
63 os.environ["TZ"] = kwargs["value"]
64 else:
65 os.environ.pop("TZ", None)
66 time.tzset()
68 # Reset local time zone cache
69 timezone.get_default_timezone.cache_clear()
71 # Reset the database connections' time zone
72 if kwargs["setting"] in {"TIME_ZONE", "USE_TZ"}:
73 for conn in connections.all():
74 try:
75 del conn.timezone
76 except AttributeError:
77 pass
78 try:
79 del conn.timezone_name
80 except AttributeError:
81 pass
82 conn.ensure_timezone()
85@receiver(setting_changed)
86def clear_routers_cache(**kwargs):
87 if kwargs["setting"] == "DATABASE_ROUTERS":
88 router.routers = ConnectionRouter().routers
91@receiver(setting_changed)
92def reset_template_engines(**kwargs):
93 if kwargs["setting"] in {
94 "TEMPLATES",
95 "DEBUG",
96 "INSTALLED_APPS",
97 }:
98 from django.template import engines
100 try:
101 del engines.templates
102 except AttributeError:
103 pass
104 engines._templates = None
105 engines._engines = {}
106 from django.template.engine import Engine
108 Engine.get_default.cache_clear()
109 from django.forms.renderers import get_default_renderer
111 get_default_renderer.cache_clear()
114@receiver(setting_changed)
115def clear_serializers_cache(**kwargs):
116 if kwargs["setting"] == "SERIALIZATION_MODULES":
117 from django.core import serializers
119 serializers._serializers = {}
122@receiver(setting_changed)
123def language_changed(**kwargs):
124 if kwargs["setting"] in {"LANGUAGES", "LANGUAGE_CODE", "LOCALE_PATHS"}:
125 from django.utils.translation import trans_real
127 trans_real._default = None
128 trans_real._active = Local()
129 if kwargs["setting"] in {"LANGUAGES", "LOCALE_PATHS"}:
130 from django.utils.translation import trans_real
132 trans_real._translations = {}
133 trans_real.check_for_language.cache_clear()
136@receiver(setting_changed)
137def localize_settings_changed(**kwargs):
138 if (
139 kwargs["setting"] in FORMAT_SETTINGS
140 or kwargs["setting"] == "USE_THOUSAND_SEPARATOR"
141 ):
142 reset_format_cache()
145@receiver(setting_changed)
146def file_storage_changed(**kwargs):
147 if kwargs["setting"] == "DEFAULT_FILE_STORAGE":
148 from django.core.files.storage import default_storage
150 default_storage._wrapped = empty
153@receiver(setting_changed)
154def complex_setting_changed(**kwargs):
155 if kwargs["enter"] and kwargs["setting"] in COMPLEX_OVERRIDE_SETTINGS:
156 # Considering the current implementation of the signals framework,
157 # this stacklevel shows the line containing the override_settings call.
158 warnings.warn(
159 "Overriding setting %s can lead to unexpected behavior."
160 % kwargs["setting"],
161 stacklevel=6,
162 )
165@receiver(setting_changed)
166def root_urlconf_changed(**kwargs):
167 if kwargs["setting"] == "ROOT_URLCONF":
168 from django.urls import clear_url_caches, set_urlconf
170 clear_url_caches()
171 set_urlconf(None)
174@receiver(setting_changed)
175def static_storage_changed(**kwargs):
176 if kwargs["setting"] in {
177 "STATICFILES_STORAGE",
178 "STATIC_ROOT",
179 "STATIC_URL",
180 }:
181 from django.contrib.staticfiles.storage import staticfiles_storage
183 staticfiles_storage._wrapped = empty
186@receiver(setting_changed)
187def static_finders_changed(**kwargs):
188 if kwargs["setting"] in {
189 "STATICFILES_DIRS",
190 "STATIC_ROOT",
191 }:
192 from django.contrib.staticfiles.finders import get_finder
194 get_finder.cache_clear()
197@receiver(setting_changed)
198def auth_password_validators_changed(**kwargs):
199 if kwargs["setting"] == "AUTH_PASSWORD_VALIDATORS":
200 from django.contrib.auth.password_validation import (
201 get_default_password_validators,
202 )
204 get_default_password_validators.cache_clear()
207@receiver(setting_changed)
208def user_model_swapped(**kwargs):
209 if kwargs["setting"] == "AUTH_USER_MODEL":
210 apps.clear_cache()
211 try:
212 from django.contrib.auth import get_user_model
214 UserModel = get_user_model()
215 except ImproperlyConfigured:
216 # Some tests set an invalid AUTH_USER_MODEL.
217 pass
218 else:
219 from django.contrib.auth import backends
221 backends.UserModel = UserModel
223 from django.contrib.auth import forms
225 forms.UserModel = UserModel
227 from django.contrib.auth.handlers import modwsgi
229 modwsgi.UserModel = UserModel
231 from django.contrib.auth.management.commands import changepassword
233 changepassword.UserModel = UserModel
235 from django.contrib.auth import views
237 views.UserModel = UserModel