#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.

Reply via email to