Opened 12 years ago
Closed 11 years ago
#20375 closed Bug (duplicate)
Post-processing CSS file with Unicode chars fails
| Reported by: | Bouke Haarsma | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.staticfiles | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | yeo.eugene.oey@…, joel@… | Triage Stage: | Accepted |
| Has patch: | no | Needs documentation: | yes |
| Needs tests: | yes | Patch needs improvement: | yes |
| Easy pickings: | no | UI/UX: | no |
Description
Say I have a static file like this: (icons.css)
.icon-home:before { content: '\2302'; } /* '⌂' */
.icon-play-circle2:before { content: '\e048'; } /* '' */
.icon-location:before { content: '\e724'; } /* '' */
.icon-map:before { content: '\e727'; } /* '' */
.icon-twitter-1:before { content: '\f309'; } /* '' */
.icon-facebook-1:before { content: '\f30c'; } /* '' */
.icon-doc:before { content: '📄'; } /* '\1f4c4' */
.icon-calendar:before { content: '📅'; } /* '\1f4c5' */
.icon-search:before { content: '🔍'; } /* '\1f50d' */
When this file is being post-processed (in collectstatic), an exception is raised:
Traceback (most recent call last):
File "/Applications/PyCharm.app/helpers/pydev/pydevd.py", line 1481, in <module>
debugger.run(setup['file'], None, None)
File "/Applications/PyCharm.app/helpers/pydev/pydevd.py", line 1124, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File "/Volumes/Users/bouke/Sites/gct/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 163, in handle_noargs
collected = self.collect()
File "lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 120, in collect
for original_path, processed_path, processed in processor:
File "lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 226, in post_process
content = pattern.sub(converter, content)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 500: ordinal not in range(128)
Attachments (1)
Change History (12)
comment:1 by , 12 years ago
| Component: | Uncategorized → contrib.staticfiles |
|---|---|
| Needs documentation: | set |
| Needs tests: | set |
| Triage Stage: | Unreviewed → Accepted |
| Version: | 1.4 → master |
comment:2 by , 12 years ago
comment:3 by , 12 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
Cannot reproduce too. Am closing for now as it doesn't seem like a bug in Django.
Please reopen once you can reproduce. Hints: run collectstatic outside of PyCharm and check css file encoding.
comment:4 by , 12 years ago
| Cc: | added |
|---|---|
| Patch needs improvement: | set |
| Resolution: | invalid |
| Status: | closed → new |
| Type: | Uncategorized → Bug |
| Version: | master → 1.4 |
Reproduce the Error
I encounter the same issues. And after tracing the type,
It happened on https://github.com/django/django/blob/1.4/django/contrib/staticfiles/storage.py#L226,
when trying to replace a unicode type into a string type that has a unicode character.
import re
patt = re.compile(r"""(url\(['"]{0,1}\s*(.*?)["']{0,1}\))""")
patt.sub(lambda x: u'The replacement is a function that return unicode',
"""The content is str with at least a unicode character głó,
and don't forget to match url(../some/path)""")
Patching??
I tried to convert the type into string at https://github.com/django/django/blob/1.4/django/contrib/staticfiles/storage.py#L172 and it works
return str('url("%s")' % unquote(relative_url))
comment:5 by , 12 years ago
| Version: | 1.4 → master |
|---|
comment:6 by , 11 years ago
I can't reproduce this. These are the steps I tried:
- Start a new project.
- Start a new app.
- Create a
staticfolder in the new app, and put theicons.cssfrom above in it. - Edit settings, setting
STATIC_ROOTto e.g. a local folderstaticfilesand adding your new app toINSTALLED_APPS` - Run
collectstaticin your project folder
All files are copied, including icons.css, without errors.
I tested this using the current master branch of Django, on Python 2.7.6, on a Mac.
Attached is my test project, as described.
comment:7 by , 11 years ago
Duplicated this error when attempting to 'collectstatic' on:
http://cdn.jsdelivr.net/semantic-ui/0.18.0/css/semantic.css
Verified that ye0eugene0ey's patch from above resolves the issue.
Python 2.7.3 on Fedora
comment:8 by , 11 years ago
| Cc: | added |
|---|
comment:9 by , 11 years ago
Those having succeeded to reproduce, could you please also tell the Django version you are using?
comment:10 by , 11 years ago
Good question... it errors on 1.4.1 and works on 1.5.4.
(those are the two env's I have handy)
(I'm 'anonymous' from 6 hours ago)
comment:11 by , 11 years ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
Then I guess this is a duplicate of #18430.
How can I reproduce this. Here it works just fine.