Merge lp:~sidnei/lazr-js/faster-url-rewrite into lp:lazr-js

Proposed by Sidnei da Silva
Status: Merged
Merged at revision: 195
Proposed branch: lp:~sidnei/lazr-js/faster-url-rewrite
Merge into: lp:lazr-js
Prerequisite: lp:~sidnei/lazr-js/customize-css-combo
Diff against target: 118 lines (+36/-39)
2 files modified
src-py/lazr/js/build.py (+21/-23)
src-py/lazr/js/tests/test_combo.py (+15/-16)
To merge this branch: bzr merge lp:~sidnei/lazr-js/faster-url-rewrite
Reviewer Review Type Date Requested Status
Paul Hummer (community) Approve
Landscape Pending
Review via email: mp+45089@code.launchpad.net

Description of the change

- Use re.sub() for faster rewriting of the URLs. Sidestep the
  serializer completely unless asked for minification.

To post a comment you must log in.
Revision history for this message
Paul Hummer (rockstar) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src-py/lazr/js/build.py'
2--- src-py/lazr/js/build.py 2011-01-03 23:59:53 +0000
3+++ src-py/lazr/js/build.py 2011-01-03 23:59:53 +0000
4@@ -22,6 +22,7 @@
5
6 ESCAPE_STAR_PROPERTY_RE = re.compile(r'\*([a-zA-Z0-9_-]+):')
7 UNESCAPE_STAR_PROPERTY_RE = re.compile(r'([a-zA-Z0-9_-]+)_ie_star_hack:')
8+URL_RE = re.compile("url\([ \"\']*([^ \"\']+)[ \"\']*\)")
9
10 from jsmin import JavascriptMinify
11
12@@ -167,32 +168,29 @@
13
14 def filter_file_content(self, file_content, path):
15 """URLs are made relative to the target and the CSS is minified."""
16- if not (self.minify or self.rewrite_urls):
17- return file_content + "\n"
18+ if self.rewrite_urls:
19+ src_dir = os.path.dirname(path)
20+ def fix_relative_url(match):
21+ url = match.group(1)
22+ return "url(%s)" % self.fix_relative_url(url, src_dir)
23+ file_content = URL_RE.sub(fix_relative_url, file_content)
24
25- old_serializer = cssutils.ser
26- cssutils.setSerializer(cssutils.serialize.CSSSerializer())
27- try:
28- if self.minify:
29+ if self.minify:
30+ old_serializer = cssutils.ser
31+ cssutils.setSerializer(cssutils.serialize.CSSSerializer())
32+ try:
33 cssutils.ser.prefs.useMinified()
34
35- stylesheet = ESCAPE_STAR_PROPERTY_RE.sub(
36- r'\1_ie_star_hack:', file_content)
37- parser = cssutils.CSSParser(raiseExceptions=True)
38- css = parser.parseString(stylesheet)
39-
40- if self.rewrite_urls:
41- def fix_relative_url(url):
42- src_dir = os.path.dirname(path)
43- return self.fix_relative_url(url, src_dir)
44-
45- cssutils.replaceUrls(css, fix_relative_url)
46-
47- stylesheet = UNESCAPE_STAR_PROPERTY_RE.sub(
48- r'*\1:', css.cssText)
49- return stylesheet + "\n"
50- finally:
51- cssutils.setSerializer(old_serializer)
52+ stylesheet = ESCAPE_STAR_PROPERTY_RE.sub(
53+ r'\1_ie_star_hack:', file_content)
54+ parser = cssutils.CSSParser(raiseExceptions=True)
55+ css = parser.parseString(stylesheet)
56+ stylesheet = UNESCAPE_STAR_PROPERTY_RE.sub(
57+ r'*\1:', css.cssText)
58+ return stylesheet + "\n"
59+ finally:
60+ cssutils.setSerializer(old_serializer)
61+ return file_content + "\n"
62
63
64 class Builder:
65
66=== modified file 'src-py/lazr/js/tests/test_combo.py'
67--- src-py/lazr/js/tests/test_combo.py 2011-01-03 23:59:53 +0000
68+++ src-py/lazr/js/tests/test_combo.py 2011-01-03 23:59:53 +0000
69@@ -113,34 +113,33 @@
70 self.makeSampleFile(
71 test_dir,
72 os.path.join("widget", "assets", "skins", "sam", "widget.css"),
73- """\
74- /* widget skin */
75- .yui-widget {
76- background: url("img/bg.png");
77- }
78- """),
79+ "\n".join(
80+ ('/* widget skin */',
81+ '.yui-widget {',
82+ ' background: url("img/bg.png");',
83+ '}'))
84+ ),
85 self.makeSampleFile(
86 test_dir,
87 os.path.join("editor", "assets", "skins", "sam", "editor.css"),
88- """\
89- /* editor skin */
90- .yui-editor {
91- background: url("img/bg.png");
92- }
93- """),
94+ "\n".join(('/* editor skin */',
95+ '.yui-editor {',
96+ ' background: url("img/bg.png");',
97+ '}'))
98+ ),
99 ]
100
101 expected = "\n".join(
102 ("/* widget/assets/skins/sam/widget.css */",
103 "/* widget skin */",
104 ".yui-widget {",
105- " background: url(widget/assets/skins/sam/img/bg.png)",
106- " }",
107+ " background: url(widget/assets/skins/sam/img/bg.png);",
108+ "}",
109 "/* editor/assets/skins/sam/editor.css */",
110 "/* editor skin */",
111 ".yui-editor {",
112- " background: url(editor/assets/skins/sam/img/bg.png)",
113- " }",
114+ " background: url(editor/assets/skins/sam/img/bg.png);",
115+ "}",
116 ))
117 self.assertEquals(
118 "".join(combine_files(["widget/assets/skins/sam/widget.css",

Subscribers

People subscribed via source and target branches