# HG changeset patch # User cmlenz # Date 1257893601 0 # Node ID 0d9e87c6cf6ecc5e9c422ca27acb3aaa78f81af8 # Parent 4376010bb97ea22d4ee81915c53eaa0b4096fe9e More work on reducing the size of the diff produced by 2to3. diff --git a/genshi/builder.py b/genshi/builder.py --- a/genshi/builder.py +++ b/genshi/builder.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2008 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -93,7 +93,8 @@ :see: `append` """ - map(self.append, args) + for arg in args: + self.append(arg) return self def __iter__(self): @@ -125,7 +126,8 @@ self.children.extend(node.children) elif node is not None: try: - map(self.append, iter(node)) + for child in node: + self.append(child) except TypeError: self.children.append(node) diff --git a/genshi/core.py b/genshi/core.py --- a/genshi/core.py +++ b/genshi/core.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2008 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which diff --git a/genshi/filters/html.py b/genshi/filters/html.py --- a/genshi/filters/html.py +++ b/genshi/filters/html.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2008 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -100,7 +100,7 @@ checked = declval in [unicode(v) for v in value] else: - checked = bool(filter(None, value)) + checked = bool([v for v in value if v]) else: if declval: checked = declval == unicode(value) @@ -414,7 +414,7 @@ """ decls = [] text = self._strip_css_comments(self._replace_unicode_escapes(text)) - for decl in filter(None, text.split(';')): + for decl in [d for d in text.split(';') if d]: decl = decl.strip() if not decl: continue diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py --- a/genshi/filters/i18n.py +++ b/genshi/filters/i18n.py @@ -147,7 +147,8 @@ gettext = ctxt.get('_i18n.gettext') dgettext = ctxt.get('_i18n.dgettext') if ctxt.get('_i18n.domain'): - assert callable(dgettext), "No domain gettext function passed" + assert hasattr(dgettext, '__call__'), \ + 'No domain gettext function passed' gettext = lambda msg: dgettext(ctxt.get('_i18n.domain'), msg) def _generate(): @@ -318,7 +319,7 @@ plural_msgbuf = None ngettext = ctxt.get('_i18n.ungettext') - assert callable(ngettext), "No ngettext function available" + assert hasattr(ngettext, '__call__'), 'No ngettext function available' dngettext = ctxt.get('_i18n.dngettext') if not dngettext: dngettext = lambda d, s, p, n: ngettext(s, p, n) @@ -656,9 +657,9 @@ # If this is an i18n directive, no need to translate text # nodes here - is_i18n_directive = filter(None, - [isinstance(d, ExtractableI18NDirective) - for d in directives]) + is_i18n_directive = [b for b in + [isinstance(d, ExtractableI18NDirective) + for d in directives] if b] substream = list(self(substream, ctxt, search_text=not is_i18n_directive)) yield kind, (directives, substream), pos @@ -761,7 +762,7 @@ elif not skip and search_text and kind is TEXT: if not msgbuf: text = data.strip() - if text and filter(None, [ch.isalpha() for ch in text]): + if text and [ch for ch in text if ch.isalpha()]: yield pos[1], None, text, comment_stack[-1:] else: msgbuf.append(kind, data, pos) @@ -769,8 +770,9 @@ elif not skip and msgbuf and kind is END: msgbuf.append(kind, data, pos) if not msgbuf.depth: - yield msgbuf.lineno, None, msgbuf.format(), \ - filter(None, [msgbuf.comment]) + yield msgbuf.lineno, None, msgbuf.format(), [ + c for c in msgbuf.comment if c + ] msgbuf = None elif kind is EXPR or kind is EXEC: @@ -918,7 +920,7 @@ self.values[param] = (kind, data, pos) else: if kind is START: - self.string.append(u'[%d:' % self.order) + self.string.append('[%d:' % self.order) self.stack.append(self.order) self.events.setdefault(self.stack[-1], []).append((kind, data, pos)) @@ -928,14 +930,14 @@ self.depth -= 1 if self.depth: self.events[self.stack[-1]].append((kind, data, pos)) - self.string.append(u']') + self.string.append(']') self.stack.pop() def format(self): """Return a message identifier representing the content in the buffer. """ - return u''.join(self.string).strip() + return ''.join(self.string).strip() def translate(self, string, regex=re.compile(r'%\((\w+)\)s')): """Interpolate the given message translation with the events in the diff --git a/genshi/filters/tests/html.py b/genshi/filters/tests/html.py --- a/genshi/filters/tests/html.py +++ b/genshi/filters/tests/html.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2008 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -26,7 +26,7 @@
""") | HTMLFormFiller() self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_text_single_value(self): html = HTML("""""") | HTMLFormFiller(data={'foo': 'bar'}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_text_multi_value(self): html = HTML("""""") | HTMLFormFiller(data={'foo': ['bar']}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_hidden_no_value(self): html = HTML("""""") | HTMLFormFiller() self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_hidden_single_value(self): html = HTML("""""") | HTMLFormFiller(data={'foo': 'bar'}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_hidden_multi_value(self): html = HTML("""""") | HTMLFormFiller(data={'foo': ['bar']}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_textarea_no_value(self): html = HTML("""""") | HTMLFormFiller() self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_textarea_single_value(self): html = HTML("""""") | HTMLFormFiller(data={'foo': 'bar'}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_textarea_multi_value(self): html = HTML("""""") | HTMLFormFiller(data={'foo': ['bar']}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_checkbox_no_value(self): html = HTML("""""") | HTMLFormFiller() self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_checkbox_single_value_auto(self): html = HTML("""""") self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': ''}))) + """, (html | HTMLFormFiller(data={'foo': ''})).render()) self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': 'on'}))) + """, (html | HTMLFormFiller(data={'foo': 'on'})).render()) def test_fill_input_checkbox_single_value_defined(self): html = HTML("""""") self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': '1'}))) + """, (html | HTMLFormFiller(data={'foo': '1'})).render()) self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': '2'}))) + """, (html | HTMLFormFiller(data={'foo': '2'})).render()) def test_fill_input_checkbox_multi_value_auto(self): html = HTML("""""") self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': []}))) + """, (html | HTMLFormFiller(data={'foo': []})).render()) self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': ['on']}))) + """, (html | HTMLFormFiller(data={'foo': ['on']})).render()) def test_fill_input_checkbox_multi_value_defined(self): html = HTML("""""") self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': ['1']}))) + """, (html | HTMLFormFiller(data={'foo': ['1']})).render()) self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': ['2']}))) + """, (html | HTMLFormFiller(data={'foo': ['2']})).render()) def test_fill_input_radio_no_value(self): html = HTML("""""") | HTMLFormFiller() self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_radio_single_value(self): html = HTML("""""") self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': '1'}))) + """, (html | HTMLFormFiller(data={'foo': '1'})).render()) self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': '2'}))) + """, (html | HTMLFormFiller(data={'foo': '2'})).render()) def test_fill_input_radio_multi_value(self): html = HTML("""""") self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': ['1']}))) + """, (html | HTMLFormFiller(data={'foo': ['1']})).render()) self.assertEquals("""""", unicode(html | HTMLFormFiller(data={'foo': ['2']}))) + """, (html | HTMLFormFiller(data={'foo': ['2']})).render()) def test_fill_select_no_value_auto(self): html = HTML("""""", unicode(html)) + """, html.render()) def test_fill_select_no_value_defined(self): html = HTML("""""", unicode(html)) + """, html.render()) def test_fill_select_single_value_auto(self): html = HTML("""""", unicode(html)) + """, html.render()) def test_fill_select_single_value_defined(self): html = HTML("""""", unicode(html)) + """, html.render()) def test_fill_select_multi_value_auto(self): html = HTML("""""", unicode(html)) + """, html.render()) def test_fill_select_multi_value_defined(self): html = HTML("""""", unicode(html)) + """, html.render()) def test_fill_option_segmented_text(self): html = MarkupTemplate("""""", unicode(html)) + """, html.render()) def test_fill_option_segmented_text_no_value(self): html = MarkupTemplate("""""", unicode(html)) + """, html.render()) def test_fill_option_unicode_value(self): - html = HTML(u"""""", unicode(html)) + """, html.render(encoding=None)) def test_fill_input_password_disabled(self): html = HTML("""""") | HTMLFormFiller(data={'pass': 'bar'}) self.assertEquals("""""", unicode(html)) + """, html.render()) def test_fill_input_password_enabled(self): html = HTML("""""") | HTMLFormFiller(data={'pass': '1234'}, passwords=True) self.assertEquals("""""", unicode(html)) + """, html.render()) class HTMLSanitizerTestCase(unittest.TestCase): def test_sanitize_unchanged(self): html = HTML('fo