Author: jezdez
Date: 2011-09-21 08:58:21 -0700 (Wed, 21 Sep 2011)
New Revision: 16862
Added:
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/img/
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/img/window.png
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/window.css
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/img/
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/img/relative.png
Modified:
django/trunk/django/contrib/staticfiles/storage.py
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/relative.css
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/styles.css
django/trunk/tests/regressiontests/staticfiles_tests/tests.py
Log:
Fixed the relative static file resolution of the CachedStaticFilesStorage
backend and the post processing of deeply nested static files.
Modified: django/trunk/django/contrib/staticfiles/storage.py
===================================================================
--- django/trunk/django/contrib/staticfiles/storage.py 2011-09-21 14:20:18 UTC
(rev 16861)
+++ django/trunk/django/contrib/staticfiles/storage.py 2011-09-21 15:58:21 UTC
(rev 16862)
@@ -113,13 +113,22 @@
return matched
name_parts = name.split('/')
# Using posix normpath here to remove duplicates
- result = url_parts = posixpath.normpath(url).split('/')
- level = url.count('..')
- if level:
- result = name_parts[:-level - 1] + url_parts[level:]
- elif name_parts[:-1]:
- result = name_parts[:-1] + url_parts[-1:]
- joined_result = '/'.join(result)
+ url = posixpath.normpath(url)
+ url_parts = url.split('/')
+ parent_level, sub_level = url.count('..'), url.count('/')
+ if url.startswith('/'):
+ sub_level -= 1
+ url_parts = url_parts[1:]
+ if parent_level or not url.startswith('/'):
+ start, end = parent_level + 1, parent_level
+ else:
+ if sub_level:
+ if sub_level == 1:
+ parent_level -= 1
+ start, end = parent_level, sub_level - 1
+ else:
+ start, end = 1, sub_level - 1
+ joined_result = '/'.join(name_parts[:-start] + url_parts[end:])
hashed_url = self.url(joined_result, force=True)
# Return the hashed and normalized version to the file
return 'url("%s")' % hashed_url
Added:
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/img/window.png
===================================================================
---
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/img/window.png
(rev 0)
+++
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/img/window.png
2011-09-21 15:58:21 UTC (rev 16862)
@@ -0,0 +1,4 @@
+‰PNG
+
+
+IHDR © ¥– –IDAT8ËÅÕm À ОÀ NíT¸‰›t!i"¾Z4Y“eÁ¼0 ¤”Ð9‡! | cµ
4` Ë ¨ò nÁ Ð6ÞÀ=8 §ðœ¢ [k‡ %à å:íÚ¶èª3 ²h H@ J°1¦> ø ª>}õ…RßR’Ñ m~é Ó
P”PnÀmê{ §IZ ® ï=æœQ+Šõ á 5Ý…¹¡L IEND®B`‚
\ No newline at end of file
Added:
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/window.css
===================================================================
---
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/window.css
(rev 0)
+++
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/css/window.css
2011-09-21 15:58:21 UTC (rev 16862)
@@ -0,0 +1,3 @@
+body {
+ background: #d3d6d8 url("img/window.png");
+}
\ No newline at end of file
Added:
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/img/relative.png
===================================================================
---
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/img/relative.png
(rev 0)
+++
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/img/relative.png
2011-09-21 15:58:21 UTC (rev 16862)
@@ -0,0 +1,4 @@
+‰PNG
+
+
+IHDR © ¥– –IDAT8ËÅÕm À ОÀ NíT¸‰›t!i"¾Z4Y“eÁ¼0 ¤”Ð9‡! | cµ
4` Ë ¨ò nÁ Ð6ÞÀ=8 §ðœ¢ [k‡ %à å:íÚ¶èª3 ²h H@ J°1¦> ø ª>}õ…RßR’Ñ m~é Ó
P”PnÀmê{ §IZ ® ï=æœQ+Šõ á 5Ý…¹¡L IEND®B`‚
\ No newline at end of file
Modified:
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/relative.css
===================================================================
---
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/relative.css
2011-09-21 14:20:18 UTC (rev 16861)
+++
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/relative.css
2011-09-21 15:58:21 UTC (rev 16862)
@@ -1,2 +1,5 @@
@import url("../cached/styles.css");
-@import url("absolute.css");
\ No newline at end of file
+@import url("absolute.css");
+body {
+ background: #d3d6d8 url(img/relative.png);
+}
\ No newline at end of file
Modified:
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/styles.css
===================================================================
---
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/styles.css
2011-09-21 14:20:18 UTC (rev 16861)
+++
django/trunk/tests/regressiontests/staticfiles_tests/project/documents/cached/styles.css
2011-09-21 15:58:21 UTC (rev 16862)
@@ -1 +1 @@
-@import url("cached/other.css");
\ No newline at end of file
+@import url("other.css");
\ No newline at end of file
Modified: django/trunk/tests/regressiontests/staticfiles_tests/tests.py
===================================================================
--- django/trunk/tests/regressiontests/staticfiles_tests/tests.py
2011-09-21 14:20:18 UTC (rev 16861)
+++ django/trunk/tests/regressiontests/staticfiles_tests/tests.py
2011-09-21 15:58:21 UTC (rev 16862)
@@ -300,11 +300,11 @@
""", "/static/test/file.dad0999e4f8f.txt")
self.assertTemplateRenders("""
{% load static from staticfiles %}{% static "cached/styles.css" %}
- """, "/static/cached/styles.5653c259030b.css")
+ """, "/static/cached/styles.93b1147e8552.css")
def test_template_tag_simple_content(self):
relpath = self.cached_file_path("cached/styles.css")
- self.assertEqual(relpath, "cached/styles.5653c259030b.css")
+ self.assertEqual(relpath, "cached/styles.93b1147e8552.css")
with storage.staticfiles_storage.open(relpath) as relfile:
content = relfile.read()
self.assertFalse("cached/other.css" in content, content)
@@ -316,7 +316,7 @@
with storage.staticfiles_storage.open(relpath) as relfile:
content = relfile.read()
self.assertFalse("/static/cached/styles.css" in content)
- self.assertTrue("/static/cached/styles.5653c259030b.css" in
content)
+ self.assertTrue("/static/cached/styles.93b1147e8552.css" in
content)
def test_template_tag_denorm(self):
relpath = self.cached_file_path("cached/denorm.css")
@@ -324,17 +324,27 @@
with storage.staticfiles_storage.open(relpath) as relfile:
content = relfile.read()
self.assertFalse("..//cached///styles.css" in content)
- self.assertTrue("/static/cached/styles.5653c259030b.css" in
content)
+ self.assertTrue("/static/cached/styles.93b1147e8552.css" in
content)
def test_template_tag_relative(self):
relpath = self.cached_file_path("cached/relative.css")
- self.assertEqual(relpath, "cached/relative.298ff891a8d4.css")
+ self.assertEqual(relpath, "cached/relative.8dffb45d91f5.css")
with storage.staticfiles_storage.open(relpath) as relfile:
content = relfile.read()
self.assertFalse("../cached/styles.css" in content)
self.assertFalse('@import "styles.css"' in content)
- self.assertTrue("/static/cached/styles.5653c259030b.css" in
content)
+ self.assertTrue("/static/cached/styles.93b1147e8552.css" in
content)
+ self.assertFalse("url(img/relative.png)" in content)
+ self.assertTrue("/static/cached/img/relative.acae32e4532b.png" in
content)
+ def test_template_tag_deep_relative(self):
+ relpath = self.cached_file_path("cached/css/window.css")
+ self.assertEqual(relpath, "cached/css/window.9db38d5169f3.css")
+ with storage.staticfiles_storage.open(relpath) as relfile:
+ content = relfile.read()
+ self.assertFalse('url(img/window.png)' in content)
+
self.assertTrue('url("/static/cached/css/img/window.acae32e4532b.png")' in
content)
+
def test_template_tag_url(self):
relpath = self.cached_file_path("cached/url.css")
self.assertEqual(relpath, "cached/url.615e21601e4b.css")
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.