From 97ac22ebfca0a5b0759f495cc5d7bed3f9da6615 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Mon, 18 Nov 2013 14:05:59 +0100 Subject: [PATCH] Fixed #21457 -- Allowed fixture file name to contain dots Thanks Keryn Knight for the report. --- django/core/management/commands/loaddata.py | 17 ++++++++--------- docs/releases/1.6.1.txt | 2 ++ .../fixtures/path.containing.dots.json | 9 +++++++++ tests/fixtures_regress/tests.py | 8 ++++++++ 4 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 tests/fixtures_regress/fixtures/path.containing.dots.json diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py index 6aec0c57039..667fbbf493a 100644 --- a/django/core/management/commands/loaddata.py +++ b/django/core/management/commands/loaddata.py @@ -175,12 +175,6 @@ class Command(BaseCommand): cmp_fmts = list(self.compression_formats.keys()) if cmp_fmt is None else [cmp_fmt] ser_fmts = serializers.get_public_serializer_formats() if ser_fmt is None else [ser_fmt] - # Check kept for backwards-compatibility; it doesn't look very useful. - if '.' in os.path.basename(fixture_name): - raise CommandError( - "Problem installing fixture '%s': %s is not a known " - "serialization format." % tuple(fixture_name.rsplit('.'))) - if self.verbosity >= 2: self.stdout.write("Loading '%s' fixtures..." % fixture_name) @@ -253,9 +247,14 @@ class Command(BaseCommand): else: cmp_fmt = None - if len(parts) > 1 and parts[-1] in self.serialization_formats: - ser_fmt = parts[-1] - parts = parts[:-1] + if len(parts) > 1: + if parts[-1] in self.serialization_formats: + ser_fmt = parts[-1] + parts = parts[:-1] + else: + raise CommandError( + "Problem installing fixture '%s': %s is not a known " + "serialization format." % (''.join(parts[:-1]), parts[-1])) else: ser_fmt = None diff --git a/docs/releases/1.6.1.txt b/docs/releases/1.6.1.txt index ad85908ca85..d88b404bc5a 100644 --- a/docs/releases/1.6.1.txt +++ b/docs/releases/1.6.1.txt @@ -24,3 +24,5 @@ Bug fixes from working in ``ModelForms``. * 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). diff --git a/tests/fixtures_regress/fixtures/path.containing.dots.json b/tests/fixtures_regress/fixtures/path.containing.dots.json new file mode 100644 index 00000000000..d62ac03fff0 --- /dev/null +++ b/tests/fixtures_regress/fixtures/path.containing.dots.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 4bfb45ea393..c5ef83bee01 100644 --- a/tests/fixtures_regress/tests.py +++ b/tests/fixtures_regress/tests.py @@ -165,6 +165,14 @@ class TestFixtures(TestCase): os.chdir(cwd) self.assertEqual(Absolute.objects.count(), 1) + def test_path_containing_dots(self): + management.call_command( + 'loaddata', + 'path.containing.dots.json', + verbosity=0, + ) + self.assertEqual(Absolute.objects.count(), 1) + def test_unknown_format(self): """ Test for ticket #4371 -- Loading data of an unknown format should fail