mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Refs #26029 -- Deprecated DEFAULT_FILE_STORAGE and STATICFILES_STORAGE settings.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							1ec3f0961f
						
					
				
				
					commit
					32940d390a
				
			| @@ -16,10 +16,12 @@ from pathlib import Path | ||||
| import django | ||||
| from django.conf import global_settings | ||||
| from django.core.exceptions import ImproperlyConfigured | ||||
| from django.utils.deprecation import RemovedInDjango50Warning | ||||
| from django.utils.deprecation import RemovedInDjango50Warning, RemovedInDjango51Warning | ||||
| from django.utils.functional import LazyObject, empty | ||||
|  | ||||
| ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE" | ||||
| DEFAULT_STORAGE_ALIAS = "default" | ||||
| STATICFILES_STORAGE_ALIAS = "staticfiles" | ||||
|  | ||||
| # RemovedInDjango50Warning | ||||
| USE_DEPRECATED_PYTZ_DEPRECATED_MSG = ( | ||||
| @@ -39,6 +41,14 @@ CSRF_COOKIE_MASKED_DEPRECATED_MSG = ( | ||||
|     "it will be removed in Django 5.0." | ||||
| ) | ||||
|  | ||||
| DEFAULT_FILE_STORAGE_DEPRECATED_MSG = ( | ||||
|     "The DEFAULT_FILE_STORAGE setting is deprecated. Use STORAGES instead." | ||||
| ) | ||||
|  | ||||
| STATICFILES_STORAGE_DEPRECATED_MSG = ( | ||||
|     "The STATICFILES_STORAGE setting is deprecated. Use STORAGES instead." | ||||
| ) | ||||
|  | ||||
|  | ||||
| class SettingsReference(str): | ||||
|     """ | ||||
| @@ -177,6 +187,22 @@ class LazySettings(LazyObject): | ||||
|         # paths. | ||||
|         return self.__getattr__("USE_L10N") | ||||
|  | ||||
|     # RemovedInDjango51Warning. | ||||
|     @property | ||||
|     def DEFAULT_FILE_STORAGE(self): | ||||
|         self._show_deprecation_warning( | ||||
|             DEFAULT_FILE_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning | ||||
|         ) | ||||
|         return self.__getattr__("DEFAULT_FILE_STORAGE") | ||||
|  | ||||
|     # RemovedInDjango51Warning. | ||||
|     @property | ||||
|     def STATICFILES_STORAGE(self): | ||||
|         self._show_deprecation_warning( | ||||
|             STATICFILES_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning | ||||
|         ) | ||||
|         return self.__getattr__("STATICFILES_STORAGE") | ||||
|  | ||||
|  | ||||
| class Settings: | ||||
|     def __init__(self, settings_module): | ||||
| @@ -240,6 +266,20 @@ class Settings: | ||||
|         if self.is_overridden("USE_L10N"): | ||||
|             warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning) | ||||
|  | ||||
|         if self.is_overridden("DEFAULT_FILE_STORAGE"): | ||||
|             if self.is_overridden("STORAGES"): | ||||
|                 raise ImproperlyConfigured( | ||||
|                     "DEFAULT_FILE_STORAGE/STORAGES are mutually exclusive." | ||||
|                 ) | ||||
|             warnings.warn(DEFAULT_FILE_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning) | ||||
|  | ||||
|         if self.is_overridden("STATICFILES_STORAGE"): | ||||
|             if self.is_overridden("STORAGES"): | ||||
|                 raise ImproperlyConfigured( | ||||
|                     "STATICFILES_STORAGE/STORAGES are mutually exclusive." | ||||
|                 ) | ||||
|             warnings.warn(STATICFILES_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning) | ||||
|  | ||||
|     def is_overridden(self, setting): | ||||
|         return setting in self._explicit_settings | ||||
|  | ||||
| @@ -276,9 +316,29 @@ class UserSettingsHolder: | ||||
|             warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning) | ||||
|         if name == "CSRF_COOKIE_MASKED": | ||||
|             warnings.warn(CSRF_COOKIE_MASKED_DEPRECATED_MSG, RemovedInDjango50Warning) | ||||
|         if name == "DEFAULT_FILE_STORAGE": | ||||
|             self.STORAGES[DEFAULT_STORAGE_ALIAS] = { | ||||
|                 "BACKEND": self.DEFAULT_FILE_STORAGE | ||||
|             } | ||||
|             warnings.warn(DEFAULT_FILE_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning) | ||||
|         if name == "STATICFILES_STORAGE": | ||||
|             self.STORAGES[STATICFILES_STORAGE_ALIAS] = { | ||||
|                 "BACKEND": self.STATICFILES_STORAGE | ||||
|             } | ||||
|             warnings.warn(STATICFILES_STORAGE_DEPRECATED_MSG, RemovedInDjango51Warning) | ||||
|         super().__setattr__(name, value) | ||||
|         if name == "USE_DEPRECATED_PYTZ": | ||||
|             warnings.warn(USE_DEPRECATED_PYTZ_DEPRECATED_MSG, RemovedInDjango50Warning) | ||||
|         # RemovedInDjango51Warning. | ||||
|         if name == "STORAGES": | ||||
|             self.STORAGES.setdefault( | ||||
|                 DEFAULT_STORAGE_ALIAS, | ||||
|                 {"BACKEND": "django.core.files.storage.FileSystemStorage"}, | ||||
|             ) | ||||
|             self.STORAGES.setdefault( | ||||
|                 STATICFILES_STORAGE_ALIAS, | ||||
|                 {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"}, | ||||
|             ) | ||||
|  | ||||
|     def __delattr__(self, name): | ||||
|         self._deleted.add(name) | ||||
|   | ||||
| @@ -280,7 +280,14 @@ SECRET_KEY_FALLBACKS = [] | ||||
| # Default file storage mechanism that holds media. | ||||
| DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage" | ||||
|  | ||||
| STORAGES = {} | ||||
| STORAGES = { | ||||
|     "default": { | ||||
|         "BACKEND": "django.core.files.storage.FileSystemStorage", | ||||
|     }, | ||||
|     "staticfiles": { | ||||
|         "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage", | ||||
|     }, | ||||
| } | ||||
|  | ||||
| # Absolute filesystem path to the directory that will hold user-uploaded files. | ||||
| # Example: "/var/www/example.com/media/" | ||||
|   | ||||
| @@ -4,11 +4,11 @@ import posixpath | ||||
| import re | ||||
| from urllib.parse import unquote, urldefrag, urlsplit, urlunsplit | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.conf import STATICFILES_STORAGE_ALIAS, settings | ||||
| from django.contrib.staticfiles.utils import check_settings, matches_patterns | ||||
| from django.core.exceptions import ImproperlyConfigured | ||||
| from django.core.files.base import ContentFile | ||||
| from django.core.files.storage import FileSystemStorage, get_storage_class | ||||
| from django.core.files.storage import FileSystemStorage, storages | ||||
| from django.utils.crypto import md5 | ||||
| from django.utils.functional import LazyObject | ||||
|  | ||||
| @@ -526,7 +526,7 @@ class ManifestStaticFilesStorage(ManifestFilesMixin, StaticFilesStorage): | ||||
|  | ||||
| class ConfiguredStorage(LazyObject): | ||||
|     def _setup(self): | ||||
|         self._wrapped = get_storage_class(settings.STATICFILES_STORAGE)() | ||||
|         self._wrapped = storages[STATICFILES_STORAGE_ALIAS] | ||||
|  | ||||
|  | ||||
| staticfiles_storage = ConfiguredStorage() | ||||
|   | ||||
| @@ -1,4 +1,7 @@ | ||||
| from django.conf import settings | ||||
| import warnings | ||||
|  | ||||
| from django.conf import DEFAULT_STORAGE_ALIAS, settings | ||||
| from django.utils.deprecation import RemovedInDjango51Warning | ||||
| from django.utils.functional import LazyObject | ||||
| from django.utils.module_loading import import_string | ||||
|  | ||||
| @@ -19,14 +22,20 @@ __all__ = ( | ||||
|     "storages", | ||||
| ) | ||||
|  | ||||
| GET_STORAGE_CLASS_DEPRECATED_MSG = ( | ||||
|     "django.core.files.storage.get_storage_class is deprecated in favor of " | ||||
|     "using django.core.files.storage.storages." | ||||
| ) | ||||
|  | ||||
|  | ||||
| def get_storage_class(import_path=None): | ||||
|     warnings.warn(GET_STORAGE_CLASS_DEPRECATED_MSG, RemovedInDjango51Warning) | ||||
|     return import_string(import_path or settings.DEFAULT_FILE_STORAGE) | ||||
|  | ||||
|  | ||||
| class DefaultStorage(LazyObject): | ||||
|     def _setup(self): | ||||
|         self._wrapped = get_storage_class()() | ||||
|         self._wrapped = storages[DEFAULT_STORAGE_ALIAS] | ||||
|  | ||||
|  | ||||
| storages = StorageHandler() | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| from django.conf import settings | ||||
| from django.conf import DEFAULT_STORAGE_ALIAS, STATICFILES_STORAGE_ALIAS, settings | ||||
| from django.core.exceptions import ImproperlyConfigured | ||||
| from django.utils.functional import cached_property | ||||
| from django.utils.module_loading import import_string | ||||
| @@ -19,6 +19,15 @@ class StorageHandler: | ||||
|     def backends(self): | ||||
|         if self._backends is None: | ||||
|             self._backends = settings.STORAGES.copy() | ||||
|             # RemovedInDjango51Warning. | ||||
|             if settings.is_overridden("DEFAULT_FILE_STORAGE"): | ||||
|                 self._backends[DEFAULT_STORAGE_ALIAS] = { | ||||
|                     "BACKEND": settings.DEFAULT_FILE_STORAGE | ||||
|                 } | ||||
|             if settings.is_overridden("STATICFILES_STORAGE"): | ||||
|                 self._backends[STATICFILES_STORAGE_ALIAS] = { | ||||
|                     "BACKEND": settings.STATICFILES_STORAGE | ||||
|                 } | ||||
|         return self._backends | ||||
|  | ||||
|     def __getitem__(self, alias): | ||||
|   | ||||
| @@ -13,6 +13,7 @@ from django.dispatch import Signal, receiver | ||||
| from django.utils import timezone | ||||
| from django.utils.formats import FORMAT_SETTINGS, reset_format_cache | ||||
| from django.utils.functional import empty | ||||
| from django.utils.module_loading import import_string | ||||
|  | ||||
| template_rendered = Signal() | ||||
|  | ||||
| @@ -113,7 +114,8 @@ def reset_template_engines(*, setting, **kwargs): | ||||
|  | ||||
| @receiver(setting_changed) | ||||
| def storages_changed(*, setting, **kwargs): | ||||
|     from django.core.files.storage import storages | ||||
|     from django.contrib.staticfiles.storage import staticfiles_storage | ||||
|     from django.core.files.storage import default_storage, storages | ||||
|  | ||||
|     if setting in ( | ||||
|         "STORAGES", | ||||
| @@ -127,6 +129,9 @@ def storages_changed(*, setting, **kwargs): | ||||
|         storages._backends = None | ||||
|         storages._storages = {} | ||||
|  | ||||
|         default_storage._wrapped = empty | ||||
|         staticfiles_storage._wrapped = empty | ||||
|  | ||||
|  | ||||
| @receiver(setting_changed) | ||||
| def clear_serializers_cache(*, setting, **kwargs): | ||||
| @@ -156,11 +161,18 @@ def localize_settings_changed(*, setting, **kwargs): | ||||
|         reset_format_cache() | ||||
|  | ||||
|  | ||||
| # RemovedInDjango51Warning. | ||||
| @receiver(setting_changed) | ||||
| def file_storage_changed(*, setting, **kwargs): | ||||
|     if setting == "DEFAULT_FILE_STORAGE": | ||||
|         from django.core.files.storage import default_storage | ||||
|         from django.conf import DEFAULT_STORAGE_ALIAS | ||||
|         from django.core.files.storage import default_storage, storages | ||||
|  | ||||
|         try: | ||||
|             del storages.backends | ||||
|         except AttributeError: | ||||
|             pass | ||||
|         storages._storages[DEFAULT_STORAGE_ALIAS] = import_string(kwargs["value"])() | ||||
|         default_storage._wrapped = empty | ||||
|  | ||||
|  | ||||
| @@ -195,6 +207,17 @@ def static_storage_changed(*, setting, **kwargs): | ||||
|  | ||||
|         staticfiles_storage._wrapped = empty | ||||
|  | ||||
|     # RemovedInDjango51Warning. | ||||
|     if setting == "STATICFILES_STORAGE": | ||||
|         from django.conf import STATICFILES_STORAGE_ALIAS | ||||
|         from django.core.files.storage import storages | ||||
|  | ||||
|         try: | ||||
|             del storages.backends | ||||
|         except AttributeError: | ||||
|             pass | ||||
|         storages._storages[STATICFILES_STORAGE_ALIAS] = import_string(kwargs["value"])() | ||||
|  | ||||
|  | ||||
| @receiver(setting_changed) | ||||
| def static_finders_changed(*, setting, **kwargs): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user