summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2013-12-05 22:55:33 +0100
committerClaude Paroz <claude@2xlibre.net>2013-12-07 10:47:34 +0100
commit41ebc4838d2b09e7f3ece8889e21492902b55dc8 (patch)
tree7526acc903e1f00353ae38e7d4d132ba871fb854
parent8a9c8bb90736451e6bdea82723cbb23a695146fb (diff)
Fixed #21551 -- Reenabled loading fixtures from subdirectory
This was a regression in Django 1.6 that was only partially restored in 839940f27f. Thanks Jonas Haag for the report.
-rw-r--r--django/core/management/commands/loaddata.py6
-rw-r--r--docs/releases/1.6.1.txt3
-rw-r--r--tests/fixtures_regress/fixtures_1/inner/absolute.json9
-rw-r--r--tests/fixtures_regress/tests.py17
4 files changed, 26 insertions, 9 deletions
diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py
index 667fbbf493..59c1343271 100644
--- a/django/core/management/commands/loaddata.py
+++ b/django/core/management/commands/loaddata.py
@@ -178,11 +178,15 @@ class Command(BaseCommand):
if self.verbosity >= 2:
self.stdout.write("Loading '%s' fixtures..." % fixture_name)
- if os.path.sep in fixture_name:
+ if os.path.isabs(fixture_name):
fixture_dirs = [os.path.dirname(fixture_name)]
fixture_name = os.path.basename(fixture_name)
else:
fixture_dirs = self.fixture_dirs
+ if os.path.sep in fixture_name:
+ fixture_dirs = [os.path.join(dir_, os.path.dirname(fixture_name))
+ for dir_ in fixture_dirs]
+ fixture_name = os.path.basename(fixture_name)
suffixes = ('.'.join(ext for ext in combo if ext)
for combo in product(databases, ser_fmts, cmp_fmts))
diff --git a/docs/releases/1.6.1.txt b/docs/releases/1.6.1.txt
index 2ac8822c9c..ec81848d19 100644
--- a/docs/releases/1.6.1.txt
+++ b/docs/releases/1.6.1.txt
@@ -28,7 +28,8 @@ Bug fixes
* Fixed ``django.contrib.humanize`` translations where the unicode sequence
for the non-breaking space was returned verbatim (#21415).
* Fixed :djadmin:`loaddata` error when fixture file name contained any dots
- non related to file extensions (#21457).
+ non related to file extensions (#21457) or when fixture path was relative
+ but located in a subdirectory (#21551).
* Fixed display of inline instances in formsets when parent has 0 for primary
key (#21472).
* Fixed a regression where custom querysets for foreign keys were overwritten
diff --git a/tests/fixtures_regress/fixtures_1/inner/absolute.json b/tests/fixtures_regress/fixtures_1/inner/absolute.json
new file mode 100644
index 0000000000..d62ac03fff
--- /dev/null
+++ b/tests/fixtures_regress/fixtures_1/inner/absolute.json
@@ -0,0 +1,9 @@
+[
+ {
+ "pk": "1",
+ "model": "fixtures_regress.absolute",
+ "fields": {
+ "name": "Load Absolute Path Test"
+ }
+ }
+]
diff --git a/tests/fixtures_regress/tests.py b/tests/fixtures_regress/tests.py
index c5ef83bee0..3757dc5180 100644
--- a/tests/fixtures_regress/tests.py
+++ b/tests/fixtures_regress/tests.py
@@ -2,6 +2,7 @@
# Unittests for fixtures.
from __future__ import unicode_literals
+import json
import os
import re
import warnings
@@ -19,12 +20,13 @@ from django.utils.encoding import force_text
from django.utils._os import upath
from django.utils import six
from django.utils.six import PY3, StringIO
-import json
from .models import (Animal, Stuff, Absolute, Parent, Child, Article, Widget,
Store, Person, Book, NKChild, RefToNKChild, Circle1, Circle2, Circle3,
ExternalDependency, Thingy)
+_cur_dir = os.path.dirname(os.path.abspath(upath(__file__)))
+
class TestFixtures(TestCase):
@@ -150,12 +152,11 @@ class TestFixtures(TestCase):
)
self.assertEqual(Absolute.objects.count(), 1)
- def test_relative_path(self):
- directory = os.path.dirname(upath(__file__))
- relative_path = os.path.join('fixtures', 'absolute.json')
+ def test_relative_path(self, path=['fixtures', 'absolute.json']):
+ relative_path = os.path.join(*path)
cwd = os.getcwd()
try:
- os.chdir(directory)
+ os.chdir(_cur_dir)
management.call_command(
'loaddata',
relative_path,
@@ -165,6 +166,10 @@ class TestFixtures(TestCase):
os.chdir(cwd)
self.assertEqual(Absolute.objects.count(), 1)
+ @override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures_1')])
+ def test_relative_path_in_fixture_dirs(self):
+ self.test_relative_path(path=['inner', 'absolute.json'])
+
def test_path_containing_dots(self):
management.call_command(
'loaddata',
@@ -424,8 +429,6 @@ class TestFixtures(TestCase):
verbosity=0,
)
- _cur_dir = os.path.dirname(os.path.abspath(upath(__file__)))
-
@override_settings(FIXTURE_DIRS=[os.path.join(_cur_dir, 'fixtures_1'),
os.path.join(_cur_dir, 'fixtures_2')])
def test_loaddata_forward_refs_split_fixtures(self):