Fixed #25784 -- Prevented an exception on collectstatic help

Made the `manage.py help collectstatic` don't fail if the `STATIC_ROOT`
setting is empty.
This commit is contained in:
Alex Morozov 2015-11-20 23:59:34 +03:00 committed by Claude Paroz
parent 550107ff75
commit 6ca163d7cc
2 changed files with 20 additions and 3 deletions

View File

@ -9,6 +9,7 @@ from django.core.files.storage import FileSystemStorage
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from django.core.management.color import no_style from django.core.management.color import no_style
from django.utils.encoding import smart_text from django.utils.encoding import smart_text
from django.utils.functional import cached_property
from django.utils.six.moves import input from django.utils.six.moves import input
@ -28,12 +29,14 @@ class Command(BaseCommand):
self.post_processed_files = [] self.post_processed_files = []
self.storage = staticfiles_storage self.storage = staticfiles_storage
self.style = no_style() self.style = no_style()
@cached_property
def local(self):
try: try:
self.storage.path('') self.storage.path('')
except NotImplementedError: except NotImplementedError:
self.local = False return False
else: return True
self.local = True
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('--noinput', '--no-input', parser.add_argument('--noinput', '--no-input',

View File

@ -6,6 +6,8 @@ import shutil
import tempfile import tempfile
import unittest import unittest
from admin_scripts.tests import AdminScriptTestCase
from django.conf import settings from django.conf import settings
from django.contrib.staticfiles import storage from django.contrib.staticfiles import storage
from django.contrib.staticfiles.management.commands import collectstatic from django.contrib.staticfiles.management.commands import collectstatic
@ -130,6 +132,18 @@ class TestConfiguration(StaticFilesTestCase):
storage.staticfiles_storage = staticfiles_storage storage.staticfiles_storage = staticfiles_storage
class TestCollectionHelpSubcommand(AdminScriptTestCase):
@override_settings(STATIC_ROOT=None)
def test_missing_settings_dont_prevent_help(self):
"""
Even if the STATIC_ROOT setting is not set, one can still call the
`manage.py help collectstatic` command.
"""
self.write_settings('settings.py', apps=['django.contrib.staticfiles'])
out, err = self.run_manage(['help', 'collectstatic'])
self.assertNoOutput(err)
class TestCollection(CollectionTestCase, TestDefaults): class TestCollection(CollectionTestCase, TestDefaults):
""" """
Test ``collectstatic`` management command. Test ``collectstatic`` management command.