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

1import os 

2import time 

3import warnings 

4 

5from asgiref.local import Local 

6 

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 

16 

17template_rendered = Signal() 

18 

19# Most setting_changed receivers are supposed to be added below, 

20# except for cases where the receiver is related to a contrib app. 

21 

22# Settings that may not work well when using 'override_settings' (#19031) 

23COMPLEX_OVERRIDE_SETTINGS = {"DATABASES"} 

24 

25 

26@receiver(setting_changed) 

27def clear_cache_handlers(**kwargs): 

28 if kwargs["setting"] == "CACHES": 

29 from django.core.cache import caches, close_caches 

30 

31 close_caches() 

32 caches._settings = caches.settings = caches.configure_settings(None) 

33 caches._connections = Local() 

34 

35 

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 

41 

42 get_finder.cache_clear() 

43 # Rebuild management commands cache 

44 from django.core.management import get_commands 

45 

46 get_commands.cache_clear() 

47 # Rebuild get_app_template_dirs cache. 

48 from django.template.utils import get_app_template_dirs 

49 

50 get_app_template_dirs.cache_clear() 

51 # Rebuild translations cache. 

52 from django.utils.translation import trans_real 

53 

54 trans_real._translations = {} 

55 

56 

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() 

67 

68 # Reset local time zone cache 

69 timezone.get_default_timezone.cache_clear() 

70 

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() 

83 

84 

85@receiver(setting_changed) 

86def clear_routers_cache(**kwargs): 

87 if kwargs["setting"] == "DATABASE_ROUTERS": 

88 router.routers = ConnectionRouter().routers 

89 

90 

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 

99 

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 

107 

108 Engine.get_default.cache_clear() 

109 from django.forms.renderers import get_default_renderer 

110 

111 get_default_renderer.cache_clear() 

112 

113 

114@receiver(setting_changed) 

115def clear_serializers_cache(**kwargs): 

116 if kwargs["setting"] == "SERIALIZATION_MODULES": 

117 from django.core import serializers 

118 

119 serializers._serializers = {} 

120 

121 

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 

126 

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 

131 

132 trans_real._translations = {} 

133 trans_real.check_for_language.cache_clear() 

134 

135 

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() 

143 

144 

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 

149 

150 default_storage._wrapped = empty 

151 

152 

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 ) 

163 

164 

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 

169 

170 clear_url_caches() 

171 set_urlconf(None) 

172 

173 

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 

182 

183 staticfiles_storage._wrapped = empty 

184 

185 

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 

193 

194 get_finder.cache_clear() 

195 

196 

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 ) 

203 

204 get_default_password_validators.cache_clear() 

205 

206 

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 

213 

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 

220 

221 backends.UserModel = UserModel 

222 

223 from django.contrib.auth import forms 

224 

225 forms.UserModel = UserModel 

226 

227 from django.contrib.auth.handlers import modwsgi 

228 

229 modwsgi.UserModel = UserModel 

230 

231 from django.contrib.auth.management.commands import changepassword 

232 

233 changepassword.UserModel = UserModel 

234 

235 from django.contrib.auth import views 

236 

237 views.UserModel = UserModel