mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Refs #34712 -- Added system check for staticfiles storage in STORAGES setting.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com> Co-authored-by: Natalia Bidart <124304+nessita@users.noreply.github.com>
This commit is contained in:
parent
74b5074174
commit
4c4536f744
@ -1,5 +1,5 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.contrib.staticfiles.checks import check_finders
|
from django.contrib.staticfiles.checks import check_finders, check_storages
|
||||||
from django.core import checks
|
from django.core import checks
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
@ -11,3 +11,4 @@ class StaticFilesConfig(AppConfig):
|
|||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
checks.register(check_finders, checks.Tags.staticfiles)
|
checks.register(check_finders, checks.Tags.staticfiles)
|
||||||
|
checks.register(check_storages, checks.Tags.staticfiles)
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
|
from django.conf import STATICFILES_STORAGE_ALIAS, settings
|
||||||
from django.contrib.staticfiles.finders import get_finders
|
from django.contrib.staticfiles.finders import get_finders
|
||||||
|
from django.core.checks import Error
|
||||||
|
|
||||||
|
E005 = Error(
|
||||||
|
f"The STORAGES setting must define a '{STATICFILES_STORAGE_ALIAS}' storage.",
|
||||||
|
id="staticfiles.E005",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def check_finders(app_configs=None, **kwargs):
|
def check_finders(app_configs=None, **kwargs):
|
||||||
@ -12,3 +19,11 @@ def check_finders(app_configs=None, **kwargs):
|
|||||||
else:
|
else:
|
||||||
errors.extend(finder_errors)
|
errors.extend(finder_errors)
|
||||||
return errors
|
return errors
|
||||||
|
|
||||||
|
|
||||||
|
def check_storages(app_configs=None, **kwargs):
|
||||||
|
"""Ensure staticfiles is defined in STORAGES setting."""
|
||||||
|
errors = []
|
||||||
|
if STATICFILES_STORAGE_ALIAS not in settings.STORAGES:
|
||||||
|
errors.append(E005)
|
||||||
|
return errors
|
||||||
|
@ -911,3 +911,5 @@ configured:
|
|||||||
:setting:`STATICFILES_DIRS` setting must not end with a slash.
|
:setting:`STATICFILES_DIRS` setting must not end with a slash.
|
||||||
* **staticfiles.W004**: The directory ``<directory>`` in the
|
* **staticfiles.W004**: The directory ``<directory>`` in the
|
||||||
:setting:`STATICFILES_DIRS` does not exist.
|
:setting:`STATICFILES_DIRS` does not exist.
|
||||||
|
* **staticfiles.E005**: The :setting:`STORAGES` setting must define a
|
||||||
|
``staticfiles`` storage.
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import DEFAULT_STORAGE_ALIAS, STATICFILES_STORAGE_ALIAS, settings
|
||||||
from django.contrib.staticfiles.checks import check_finders
|
from django.contrib.staticfiles.checks import E005, check_finders, check_storages
|
||||||
from django.contrib.staticfiles.finders import BaseFinder, get_finder
|
from django.contrib.staticfiles.finders import BaseFinder, get_finder
|
||||||
from django.core.checks import Error, Warning
|
from django.core.checks import Error, Warning
|
||||||
from django.test import override_settings
|
from django.test import SimpleTestCase, override_settings
|
||||||
|
|
||||||
from .cases import CollectionTestCase
|
from .cases import CollectionTestCase
|
||||||
from .settings import TEST_ROOT
|
from .settings import TEST_ROOT
|
||||||
@ -132,3 +132,50 @@ class FindersCheckTests(CollectionTestCase):
|
|||||||
# Nonexistent directories are skipped.
|
# Nonexistent directories are skipped.
|
||||||
finder = get_finder("django.contrib.staticfiles.finders.FileSystemFinder")
|
finder = get_finder("django.contrib.staticfiles.finders.FileSystemFinder")
|
||||||
self.assertEqual(list(finder.list(None)), [])
|
self.assertEqual(list(finder.list(None)), [])
|
||||||
|
|
||||||
|
|
||||||
|
class StoragesCheckTests(SimpleTestCase):
|
||||||
|
@override_settings(STORAGES={})
|
||||||
|
def test_error_empty_storages(self):
|
||||||
|
# DEFAULT_STORAGE_ALIAS and STATICFILES_STORAGE_ALIAS need to be
|
||||||
|
# popped from STORAGES since UserSettingsHolder has code to maintain
|
||||||
|
# backward compatibility until 5.1 is out.
|
||||||
|
settings.STORAGES.clear() # RemovedInDjango51Warning
|
||||||
|
assert settings.STORAGES == {} # RemovedInDjango51Warning
|
||||||
|
errors = check_storages(None)
|
||||||
|
self.assertEqual(errors, [E005])
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
STORAGES={
|
||||||
|
DEFAULT_STORAGE_ALIAS: {
|
||||||
|
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
||||||
|
},
|
||||||
|
"example": {
|
||||||
|
"BACKEND": "ignore.me",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
def test_error_missing_staticfiles(self):
|
||||||
|
# Check out the previous comment about UserSettingsHolder compat code.
|
||||||
|
settings.STORAGES.pop(STATICFILES_STORAGE_ALIAS) # RemovedInDjango51Warning
|
||||||
|
assert (
|
||||||
|
STATICFILES_STORAGE_ALIAS not in settings.STORAGES
|
||||||
|
) # RemovedInDjango51Warning
|
||||||
|
errors = check_storages(None)
|
||||||
|
self.assertEqual(errors, [E005])
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
STORAGES={
|
||||||
|
STATICFILES_STORAGE_ALIAS: {
|
||||||
|
"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
def test_staticfiles_no_errors(self):
|
||||||
|
# Check out the previous comment about UserSettingsHolder compat code.
|
||||||
|
settings.STORAGES.pop(DEFAULT_STORAGE_ALIAS) # RemovedInDjango51Warning
|
||||||
|
assert (
|
||||||
|
DEFAULT_STORAGE_ALIAS not in settings.STORAGES
|
||||||
|
) # RemovedInDjango51Warning
|
||||||
|
errors = check_storages(None)
|
||||||
|
self.assertEqual(errors, [])
|
||||||
|
Loading…
Reference in New Issue
Block a user