#33494: Collectstatic fails with Django 4 and SourcemapManifestStaticFilesStorage -------------------------------------+------------------------------------- Reporter: Felix | Owner: nobody Kleinekathöfer | Type: Bug | Status: new Component: contrib.staticfiles | Version: 4.0 Severity: Normal | Resolution: Keywords: | Triage Stage: | Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Description changed by Felix Kleinekathöfer:
Old description: > I've tried updating a django app to 4.0. We are building our scripts with > gulp which are then collected by > Django. Here is an example script asset which is being picked up: > > {{{ > "use strict"; > > (function () { > // Automatically check "Uploaded avatar" radio button if user selects > an avatar. > Array.prototype.forEach.call(document.querySelectorAll('.avatar-image- > upload'), function (el) { > var form = el.closest('form'); > var radioButton = > form.querySelector('input[type=radio][name=avatar_from][value=upload]'); > el.addEventListener('change', function () { > if (el.value === '') return; > radioButton.checked = true; > }); > }); > })(); > > //# > sourceMappingURL=../../../../maps/spongeauth/static/scripts/app.js.map > }}} > > This file worked well with Django 3 but now it ends up in a KeyError: > > {{{ > app_1 | + /home/spongeauth/env/bin/python spongeauth/manage.py > collectstatic --noinput > app_1 | Traceback (most recent call last): > app_1 | File "/home/spongeauth/app/spongeauth/manage.py", line 28, > in <module> > app_1 | execute_from_command_line(sys.argv) > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/core/management/__init__.py", line 425, in > execute_from_command_line > app_1 | utility.execute() > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/core/management/__init__.py", line 419, in execute > app_1 | self.fetch_command(subcommand).run_from_argv(self.argv) > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/core/management/base.py", line 373, in run_from_argv > app_1 | self.execute(*args, **cmd_options) > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/core/management/base.py", line 417, in execute > app_1 | output = self.handle(*args, **options) > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/contrib/staticfiles/management/commands/collectstatic.py", > line 187, in handle > app_1 | collected = self.collect() > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/contrib/staticfiles/management/commands/collectstatic.py", > line 128, in collect > app_1 | for original_path, processed_path, processed in processor: > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/contrib/staticfiles/storage.py", line 426, in > post_process > app_1 | yield from super().post_process(*args, **kwargs) > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/contrib/staticfiles/storage.py", line 247, in > post_process > app_1 | for name, hashed_name, processed, _ in > self._post_process(paths, adjustable_paths, hashed_files): > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/contrib/staticfiles/storage.py", line 312, in > _post_process > app_1 | content = pattern.sub(converter, content) > app_1 | File "/home/spongeauth/env/lib/python3.10/site- > packages/django/contrib/staticfiles/storage.py", line 173, in converter > app_1 | matched = matches['matched'] > app_1 | KeyError: 'matched' > }}} > > I can't find a note on the migration docs that sourceFileMappingURLs need > to be changed, so I suspect this being a bug. > > I think this RegEx is the problem: > https://github.com/django/django/blob/main/django/contrib/staticfiles/storage.py#L61. > The "matched" group matches nothing. It should be something like > {{{ > (?m)(?P<matched>[\s\S]*)^(//# (?-i:sourceMappingURL)=(?P<url>.*))$ > }}} > maybe. I also do not see any sourceMappingURL support for css. Has it > been removed? > > Source: https://github.com/SpongePowered/SpongeAuth/pull/926 New description: I've tried updating a django app to 4.0. We are building our scripts with gulp which are then collected by Django. Here is an example script asset which is being picked up: {{{ "use strict"; (function () { // Automatically check "Uploaded avatar" radio button if user selects an avatar. Array.prototype.forEach.call(document.querySelectorAll('.avatar-image- upload'), function (el) { var form = el.closest('form'); var radioButton = form.querySelector('input[type=radio][name=avatar_from][value=upload]'); el.addEventListener('change', function () { if (el.value === '') return; radioButton.checked = true; }); }); })(); //# sourceMappingURL=../../../../maps/spongeauth/static/scripts/app.js.map }}} This file worked well with Django 3 but now it ends up in a KeyError: {{{ app_1 | + /home/spongeauth/env/bin/python spongeauth/manage.py collectstatic --noinput app_1 | Traceback (most recent call last): app_1 | File "/home/spongeauth/app/spongeauth/manage.py", line 28, in <module> app_1 | execute_from_command_line(sys.argv) app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/core/management/__init__.py", line 425, in execute_from_command_line app_1 | utility.execute() app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/core/management/__init__.py", line 419, in execute app_1 | self.fetch_command(subcommand).run_from_argv(self.argv) app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/core/management/base.py", line 373, in run_from_argv app_1 | self.execute(*args, **cmd_options) app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/core/management/base.py", line 417, in execute app_1 | output = self.handle(*args, **options) app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 187, in handle app_1 | collected = self.collect() app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 128, in collect app_1 | for original_path, processed_path, processed in processor: app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/contrib/staticfiles/storage.py", line 426, in post_process app_1 | yield from super().post_process(*args, **kwargs) app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/contrib/staticfiles/storage.py", line 247, in post_process app_1 | for name, hashed_name, processed, _ in self._post_process(paths, adjustable_paths, hashed_files): app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/contrib/staticfiles/storage.py", line 312, in _post_process app_1 | content = pattern.sub(converter, content) app_1 | File "/home/spongeauth/env/lib/python3.10/site- packages/django/contrib/staticfiles/storage.py", line 173, in converter app_1 | matched = matches['matched'] app_1 | KeyError: 'matched' }}} I can't find a note on the migration docs that sourceFileMappingURLs need to be changed, so I suspect this being a bug. I think this RegEx is the problem: https://github.com/django/django/blob/main/django/contrib/staticfiles/storage.py#L61. The "matched" group matches nothing. I also do not see any sourceMappingURL support for css. Has it been removed or was it never a feature? Source: https://github.com/SpongePowered/SpongeAuth/pull/926 -- -- Ticket URL: <https://code.djangoproject.com/ticket/33494#comment:2> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/065.2e6c0c425d64a560174a9d7e9934f7b3%40djangoproject.com.