mirror of
https://github.com/django/django.git
synced 2025-11-19 11:15:44 +00:00
Merge ddf1a876b2 into 1ce6e78dd4
This commit is contained in:
commit
02374987a3
2 changed files with 74 additions and 1 deletions
|
|
@ -105,7 +105,20 @@ class TemplateCommand(BaseCommand):
|
||||||
else:
|
else:
|
||||||
top_dir = os.path.abspath(os.path.expanduser(target))
|
top_dir = os.path.abspath(os.path.expanduser(target))
|
||||||
if app_or_project == "app":
|
if app_or_project == "app":
|
||||||
self.validate_name(os.path.basename(top_dir), "directory")
|
dir_name = os.path.basename(top_dir)
|
||||||
|
|
||||||
|
# Non empty directory already exists
|
||||||
|
if os.path.exists(top_dir):
|
||||||
|
if os.listdir(top_dir):
|
||||||
|
raise CommandError(
|
||||||
|
f"{top_dir} already exists. Overlaying an app into an "
|
||||||
|
"existing directory won't replace conflicting files."
|
||||||
|
)
|
||||||
|
# Does not exist so validate new name
|
||||||
|
else:
|
||||||
|
self.validate_name(dir_name, "directory")
|
||||||
|
|
||||||
|
# Create directory if it doesn't exist
|
||||||
if not os.path.exists(top_dir):
|
if not os.path.exists(top_dir):
|
||||||
try:
|
try:
|
||||||
os.makedirs(top_dir)
|
os.makedirs(top_dir)
|
||||||
|
|
|
||||||
|
|
@ -3195,6 +3195,66 @@ class StartApp(AdminScriptTestCase):
|
||||||
)
|
)
|
||||||
self.assertFalse(os.path.exists(testapp_dir))
|
self.assertFalse(os.path.exists(testapp_dir))
|
||||||
|
|
||||||
|
def test_existing_empty_directory_allows_create(self):
|
||||||
|
"""
|
||||||
|
Ensure that an existing empty directory
|
||||||
|
does not trigger a false importable module check.
|
||||||
|
"""
|
||||||
|
custom_dir = os.path.join(self.test_dir, "destination")
|
||||||
|
os.makedirs(custom_dir, exist_ok=True)
|
||||||
|
|
||||||
|
args = ["startapp", "my_app", custom_dir]
|
||||||
|
_, err = self.run_django_admin(args)
|
||||||
|
self.assertNoOutput(err)
|
||||||
|
self.assertTrue(os.path.exists(os.path.join(custom_dir, "apps.py")))
|
||||||
|
|
||||||
|
def test_custom_directory_allows_create(self):
|
||||||
|
"""
|
||||||
|
Ensure destination can be created as a new directory to regression
|
||||||
|
test ticket #36533
|
||||||
|
"""
|
||||||
|
custom_dir = os.path.join(self.test_dir, "destination")
|
||||||
|
args = ["startapp", "my_app", custom_dir]
|
||||||
|
_, err = self.run_django_admin(args)
|
||||||
|
self.assertNoOutput(err)
|
||||||
|
self.assertTrue(os.path.exists(os.path.join(custom_dir, "apps.py")))
|
||||||
|
|
||||||
|
def test_importable_python_module_errors(self):
|
||||||
|
"""
|
||||||
|
Ensure folder named 'os' can not be created as the name
|
||||||
|
of an app
|
||||||
|
"""
|
||||||
|
args = ["startapp", "example", "os"]
|
||||||
|
_, err = self.run_django_admin(args)
|
||||||
|
self.assertIn("CommandError: 'os'", err)
|
||||||
|
|
||||||
|
def test_existing_directory_matching_python_modules_errors(self):
|
||||||
|
"""
|
||||||
|
Double checks that an importable module still throws an error if
|
||||||
|
the user created a directory first with a matching name
|
||||||
|
"""
|
||||||
|
os.makedirs("os", exist_ok=True)
|
||||||
|
args = ["startapp", "example", "os"]
|
||||||
|
_, err = self.run_django_admin(args)
|
||||||
|
self.assertIn("CommandError: 'os'", err)
|
||||||
|
|
||||||
|
def test_existing_non_empty_directory_overlay_error(self):
|
||||||
|
"""
|
||||||
|
Ensure that an existing non empty directory
|
||||||
|
triggers an overlaying app warning.
|
||||||
|
"""
|
||||||
|
custom_dir = os.path.join(self.test_dir, "non_empty_dir")
|
||||||
|
os.makedirs(custom_dir, exist_ok=True)
|
||||||
|
|
||||||
|
with open(os.path.join(custom_dir, "dummy.txt"), "w") as f:
|
||||||
|
f.write("test")
|
||||||
|
|
||||||
|
args = ["startapp", "my_app", custom_dir]
|
||||||
|
_, err = self.run_django_admin(args)
|
||||||
|
self.assertIn(
|
||||||
|
"already exists. Overlaying an app into an existing directory", err
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class DiffSettings(AdminScriptTestCase):
|
class DiffSettings(AdminScriptTestCase):
|
||||||
"""Tests for diffsettings management command."""
|
"""Tests for diffsettings management command."""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue