Kaydet (Commit) 41ebc483 authored tarafından Claude Paroz's avatar Claude Paroz

Fixed #21551 -- Reenabled loading fixtures from subdirectory

This was a regression in Django 1.6 that was only partially
restored in 839940f2.
Thanks Jonas Haag for the report.
üst 8a9c8bb9
......@@ -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))
......
......@@ -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
......
[
{
"pk": "1",
"model": "fixtures_regress.absolute",
"fields": {
"name": "Load Absolute Path Test"
}
}
]
......@@ -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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment