Commit 97ac22eb authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #21457 -- Allowed fixture file name to contain dots

Thanks Keryn Knight for the report.
parent bc0413cb
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -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:
        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

+2 −0
Original line number Diff line number Diff line
@@ -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).
+9 −0
Original line number Diff line number Diff line
[
    {
        "pk": "1",
        "model": "fixtures_regress.absolute",
        "fields": {
            "name": "Load Absolute Path Test"
        }
    }
]
+8 −0
Original line number Diff line number Diff line
@@ -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