# 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("""

@@ -34,7 +34,7 @@

""") | HTMLFormFiller(data={'foo': 'bar'}) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_text_multi_value(self): html = HTML("""

@@ -42,7 +42,7 @@

""") | HTMLFormFiller(data={'foo': ['bar']}) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_hidden_no_value(self): html = HTML("""

@@ -50,7 +50,7 @@

""") | HTMLFormFiller() self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_hidden_single_value(self): html = HTML("""

@@ -58,7 +58,7 @@

""") | HTMLFormFiller(data={'foo': 'bar'}) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_hidden_multi_value(self): html = HTML("""

@@ -66,7 +66,7 @@

""") | HTMLFormFiller(data={'foo': ['bar']}) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_textarea_no_value(self): html = HTML("""

@@ -74,7 +74,7 @@

""") | HTMLFormFiller() self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_textarea_multi_value(self): html = HTML("""

@@ -90,7 +90,7 @@

""") | HTMLFormFiller(data={'foo': ['bar']}) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_checkbox_no_value(self): html = HTML("""

@@ -98,7 +98,7 @@

""") | HTMLFormFiller() self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_checkbox_single_value_auto(self): html = HTML("""

@@ -106,10 +106,10 @@

""") 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("""

@@ -117,10 +117,10 @@

""") 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("""

@@ -128,10 +128,10 @@

""") 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("""

@@ -139,10 +139,10 @@

""") 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("""

@@ -150,7 +150,7 @@

""") | HTMLFormFiller() self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_radio_single_value(self): html = HTML("""

@@ -158,10 +158,10 @@

""") 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("""

@@ -169,10 +169,10 @@

""") 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("""

@@ -188,7 +188,7 @@ -

""", unicode(html)) +

""", html.render()) def test_fill_select_no_value_defined(self): html = HTML("""

@@ -204,7 +204,7 @@ -

""", unicode(html)) +

""", html.render()) def test_fill_select_single_value_auto(self): html = HTML("""

@@ -220,7 +220,7 @@ -

""", unicode(html)) +

""", html.render()) def test_fill_select_single_value_defined(self): html = HTML("""

@@ -236,7 +236,7 @@ -

""", unicode(html)) +

""", html.render()) def test_fill_select_multi_value_auto(self): html = HTML("""

@@ -252,7 +252,7 @@ -

""", unicode(html)) +

""", html.render()) def test_fill_select_multi_value_defined(self): html = HTML("""

@@ -268,7 +268,7 @@ -

""", unicode(html)) +

""", html.render()) def test_fill_option_segmented_text(self): html = MarkupTemplate("""
@@ -280,7 +280,7 @@ -
""", unicode(html)) + """, html.render()) def test_fill_option_segmented_text_no_value(self): html = MarkupTemplate("""
@@ -292,10 +292,10 @@ -
""", unicode(html)) + """, html.render()) def test_fill_option_unicode_value(self): - html = HTML(u"""
+ html = HTML(""" @@ -304,7 +304,7 @@ -
""", unicode(html)) + """, html.render(encoding=None)) def test_fill_input_password_disabled(self): html = HTML("""

@@ -312,7 +312,7 @@

""") | HTMLFormFiller(data={'pass': 'bar'}) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) def test_fill_input_password_enabled(self): html = HTML("""

@@ -320,146 +320,147 @@

""") | HTMLFormFiller(data={'pass': '1234'}, passwords=True) self.assertEquals("""

-

""", unicode(html)) +

""", html.render()) class HTMLSanitizerTestCase(unittest.TestCase): def test_sanitize_unchanged(self): html = HTML('fo
o
') - self.assertEquals(u'fo
o
', - unicode(html | HTMLSanitizer())) + self.assertEquals('fo
o
', + (html | HTMLSanitizer()).render()) html = HTML('foo') - self.assertEquals(u'foo', - unicode(html | HTMLSanitizer())) + self.assertEquals('foo', + (html | HTMLSanitizer()).render()) def test_sanitize_escape_text(self): html = HTML('fo&') - self.assertEquals(u'fo&', - unicode(html | HTMLSanitizer())) + self.assertEquals('fo&', + (html | HTMLSanitizer()).render()) html = HTML('<foo>') - self.assertEquals(u'<foo>', - unicode(html | HTMLSanitizer())) + self.assertEquals('<foo>', + (html | HTMLSanitizer()).render()) def test_sanitize_entityref_text(self): html = HTML('foö') self.assertEquals(u'foö', - unicode(html | HTMLSanitizer())) + (html | HTMLSanitizer()).render(encoding=None)) def test_sanitize_escape_attr(self): html = HTML('
') - self.assertEquals(u'
', - unicode(html | HTMLSanitizer())) + self.assertEquals('
', + (html | HTMLSanitizer()).render()) def test_sanitize_close_empty_tag(self): html = HTML('fo
o
') - self.assertEquals(u'fo
o
', - unicode(html | HTMLSanitizer())) + self.assertEquals('fo
o
', + (html | HTMLSanitizer()).render()) def test_sanitize_invalid_entity(self): html = HTML('&junk;') - self.assertEquals('&junk;', unicode(html | HTMLSanitizer())) + self.assertEquals('&junk;', (html | HTMLSanitizer()).render()) def test_sanitize_remove_script_elem(self): html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) self.assertRaises(ParseError, HTML, 'alert("foo")') self.assertRaises(ParseError, HTML, '') def test_sanitize_remove_onclick_attr(self): html = HTML('
') - self.assertEquals(u'
', unicode(html | HTMLSanitizer())) + self.assertEquals('
', (html | HTMLSanitizer()).render()) def test_sanitize_remove_input_password(self): html = HTML('
') - self.assertEquals(u'
', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) def test_sanitize_remove_comments(self): html = HTML('''
''') - self.assertEquals(u'
', unicode(html | HTMLSanitizer())) + self.assertEquals('
', (html | HTMLSanitizer()).render()) def test_sanitize_remove_style_scripts(self): sanitizer = HTMLSanitizer(safe_attrs=HTMLSanitizer.SAFE_ATTRS | set(['style'])) # Inline style with url() using javascript: scheme html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) # Inline style with url() using javascript: scheme, using control char html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) # Inline style with url() using javascript: scheme, in quotes html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) # IE expressions in CSS not allowed html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', - unicode(html | sanitizer)) + self.assertEquals('
', + (html | sanitizer).render()) # Inline style with url() using javascript: scheme, using unicode # escapes html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) def test_sanitize_remove_style_phishing(self): sanitizer = HTMLSanitizer(safe_attrs=HTMLSanitizer.SAFE_ATTRS | set(['style'])) # The position property is not allowed html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) # Normal margins get passed through html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', + (html | sanitizer).render()) # But not negative margins html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) html = HTML('
') - self.assertEquals(u'
', unicode(html | sanitizer)) + self.assertEquals('
', (html | sanitizer).render()) def test_sanitize_remove_src_javascript(self): html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) # Case-insensitive protocol matching html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) # Grave accents (not parsed) self.assertRaises(ParseError, HTML, '') # Protocol encoded using UTF-8 numeric entities html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) # Protocol encoded using UTF-8 numeric entities without a semicolon # (which is allowed because the max number of digits is used) html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) # Protocol encoded using UTF-8 numeric hex entities without a semicolon # (which is allowed because the max number of digits is used) html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) # Embedded tab character in protocol html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) # Embedded tab character in protocol, but encoded this time html = HTML('') - self.assertEquals(u'', unicode(html | HTMLSanitizer())) + self.assertEquals('', (html | HTMLSanitizer()).render()) def suite(): diff --git a/genshi/filters/transform.py b/genshi/filters/transform.py --- a/genshi/filters/transform.py +++ b/genshi/filters/transform.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2007 Edgewall Software +# Copyright (C) 2007-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -876,7 +876,7 @@ :param stream: the marked event stream to filter """ for event in stream: - print>>self.fileobj, self.prefix + str(event) + self.fileobj.write('%s%s\n' % (self.prefix, event)) yield event diff --git a/genshi/input.py b/genshi/input.py --- a/genshi/input.py +++ b/genshi/input.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2007 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/output.py b/genshi/output.py --- a/genshi/output.py +++ b/genshi/output.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 @@ -265,7 +265,7 @@ if sysid: buf.append(' "%s"') buf.append('>\n') - yield Markup(''.join(buf)) % filter(None, data) + yield Markup(''.join(buf)) % tuple([p for p in data if p]) have_doctype = True elif kind is START_CDATA: @@ -381,7 +381,7 @@ if sysid: buf.append(' "%s"') buf.append('>\n') - yield Markup(''.join(buf)) % filter(None, data) + yield Markup(''.join(buf)) % tuple([p for p in data if p]) have_doctype = True elif kind is XML_DECL and not have_decl and not drop_xml_decl: @@ -518,7 +518,7 @@ if sysid: buf.append(' "%s"') buf.append('>\n') - yield Markup(''.join(buf)) % filter(None, data) + yield Markup(''.join(buf)) % tuple([p for p in data if p]) have_doctype = True elif kind is PI: diff --git a/genshi/path.py b/genshi/path.py --- a/genshi/path.py +++ b/genshi/path.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 @@ -278,7 +278,7 @@ return [] pi = [0] s = 0 - for i in xrange(1, len(f)): + for i in range(1, len(f)): while s > 0 and not nodes_equal(f[s], f[i]): s = pi[s-1] if nodes_equal(f[s], f[i]): @@ -537,7 +537,7 @@ self.strategies.append(strategy_class(path)) break else: - raise NotImplemented, "This path is not implemented" + raise NotImplemented('No strategy found for path') def __repr__(self): paths = [] @@ -667,9 +667,9 @@ def __init__(self, text, filename=None, lineno=-1): self.filename = filename self.lineno = lineno - self.tokens = filter(None, [dqstr or sqstr or number or token or name - for dqstr, sqstr, number, token, name in - self._tokenize(text)]) + self.tokens = [t for t in [dqstr or sqstr or number or token or name + for dqstr, sqstr, number, token, name in + self._tokenize(text)] if t] self.pos = 0 # Tokenizer diff --git a/genshi/template/ast24.py b/genshi/template/ast24.py --- a/genshi/template/ast24.py +++ b/genshi/template/ast24.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2008 Edgewall Software +# Copyright (C) 2008-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which diff --git a/genshi/template/astutil.py b/genshi/template/astutil.py --- a/genshi/template/astutil.py +++ b/genshi/template/astutil.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2008 Edgewall Software +# Copyright (C) 2008-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which diff --git a/genshi/template/eval.py b/genshi/template/eval.py --- a/genshi/template/eval.py +++ b/genshi/template/eval.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/template/interpolation.py b/genshi/template/interpolation.py --- a/genshi/template/interpolation.py +++ b/genshi/template/interpolation.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2007-2008 Edgewall Software +# Copyright (C) 2007-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which diff --git a/genshi/template/loader.py b/genshi/template/loader.py --- a/genshi/template/loader.py +++ b/genshi/template/loader.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 @@ -326,7 +326,7 @@ filename[len(prefix):].lstrip('/\\') ) return filepath, filename, fileobj, uptodate - raise TemplateNotFound(filename, delegates.keys()) + raise TemplateNotFound(filename, list(delegates.keys())) return _dispatch_by_prefix diff --git a/genshi/template/plugin.py b/genshi/template/plugin.py --- a/genshi/template/plugin.py +++ b/genshi/template/plugin.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2008 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # Copyright (C) 2006 Matthew Good # All rights reserved. # @@ -48,7 +48,8 @@ auto_reload = options.get('genshi.auto_reload', '1') if isinstance(auto_reload, basestring): auto_reload = auto_reload.lower() in ('1', 'on', 'yes', 'true') - search_path = filter(None, options.get('genshi.search_path', '').split(':')) + search_path = [p for p in + options.get('genshi.search_path', '').split(':') if p] self.use_package_naming = not search_path try: max_cache_size = int(options.get('genshi.max_cache_size', 25)) diff --git a/genshi/template/tests/eval.py b/genshi/template/tests/eval.py --- a/genshi/template/tests/eval.py +++ b/genshi/template/tests/eval.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 @@ -637,7 +637,7 @@ def test_import_in_def(self): suite = Suite("""def fun(): from itertools import ifilter - return ifilter(None, xrange(3)) + return ifilter(None, range(3)) """) data = Context() suite.execute(data) diff --git a/genshi/template/tests/markup.py b/genshi/template/tests/markup.py --- a/genshi/template/tests/markup.py +++ b/genshi/template/tests/markup.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 @@ -211,23 +211,23 @@ Verify that a code block processing instruction with trailing space does not cause a syntax error (see ticket #127). """ - MarkupTemplate(u""" + MarkupTemplate(""" """) def test_exec_import(self): - tmpl = MarkupTemplate(u""" + tmpl = MarkupTemplate("""
${timedelta(days=2)}
""") - self.assertEqual(u"""
+ self.assertEqual("""
2 days, 0:00:00
""", str(tmpl.generate())) def test_exec_def(self): - tmpl = MarkupTemplate(u""" + tmpl = MarkupTemplate(""" ${foo()}
""") - self.assertEqual(u"""
+ self.assertEqual("""
42
""", str(tmpl.generate())) diff --git a/genshi/template/tests/text.py b/genshi/template/tests/text.py --- a/genshi/template/tests/text.py +++ b/genshi/template/tests/text.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 @@ -53,12 +53,14 @@ def test_latin1_encoded(self): text = u'$foo\xf6$bar'.encode('iso-8859-1') tmpl = OldTextTemplate(text, encoding='iso-8859-1') - self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y'))) + self.assertEqual(u'x\xf6y', + tmpl.generate(foo='x', bar='y').render(encoding=None)) def test_unicode_input(self): text = u'$foo\xf6$bar' tmpl = OldTextTemplate(text) - self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y'))) + self.assertEqual(u'x\xf6y', + tmpl.generate(foo='x', bar='y').render(encoding=None)) def test_empty_lines1(self): tmpl = OldTextTemplate("""Your items: @@ -144,12 +146,14 @@ def test_latin1_encoded(self): text = u'$foo\xf6$bar'.encode('iso-8859-1') tmpl = NewTextTemplate(text, encoding='iso-8859-1') - self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y'))) + self.assertEqual(u'x\xf6y', + tmpl.generate(foo='x', bar='y').render(encoding=None)) def test_unicode_input(self): text = u'$foo\xf6$bar' tmpl = NewTextTemplate(text) - self.assertEqual(u'x\xf6y', unicode(tmpl.generate(foo='x', bar='y'))) + self.assertEqual(u'x\xf6y', + tmpl.generate(foo='x', bar='y').render(encoding=None)) def test_empty_lines1(self): tmpl = NewTextTemplate("""Your items: diff --git a/genshi/template/text.py b/genshi/template/text.py --- a/genshi/template/text.py +++ b/genshi/template/text.py @@ -144,10 +144,10 @@ raise ValueError('delimiers tuple must have exactly four elements') self._delims = delims self._directive_re = re.compile(self._DIRECTIVE_RE % tuple( - map(re.escape, delims) + [re.escape(d) for d in delims] ), re.DOTALL) self._escape_re = re.compile(self._ESCAPE_RE % tuple( - map(re.escape, delims[::2]) + [re.escape(d) for d in delims[::2]] )) delimiters = property(_get_delims, _set_delims, """\ The delimiters for directives and comments. This should be a four item tuple diff --git a/genshi/tests/core.py b/genshi/tests/core.py --- a/genshi/tests/core.py +++ b/genshi/tests/core.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006 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/tests/input.py b/genshi/tests/input.py --- a/genshi/tests/input.py +++ b/genshi/tests/input.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -27,7 +27,7 @@ events = list(XMLParser(StringIO(text))) kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) - self.assertEqual(u'foo bar', data) + self.assertEqual('foo bar', data) self.assertEqual((None, 1, 6), pos) def test_text_node_pos_multi_line(self): @@ -36,7 +36,7 @@ events = list(XMLParser(StringIO(text))) kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) - self.assertEqual(u'foo\nbar', data) + self.assertEqual('foo\nbar', data) self.assertEqual((None, 1, -1), pos) def test_element_attribute_order(self): @@ -45,10 +45,10 @@ kind, data, pos = events[0] self.assertEqual(Stream.START, kind) tag, attrib = data - self.assertEqual(u'elem', tag) - self.assertEqual((u'title', u'baz'), attrib[0]) - self.assertEqual((u'id', u'foo'), attrib[1]) - self.assertEqual((u'class', u'bar'), attrib[2]) + self.assertEqual('elem', tag) + self.assertEqual(('title', 'baz'), attrib[0]) + self.assertEqual(('id', 'foo'), attrib[1]) + self.assertEqual(('class', 'bar'), attrib[2]) def test_unicode_input(self): text = u'
\u2013
' @@ -120,7 +120,7 @@ events = list(HTMLParser(StringIO(text))) kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) - self.assertEqual(u'foo bar', data) + self.assertEqual('foo bar', data) self.assertEqual((None, 1, 6), pos) def test_text_node_pos_multi_line(self): @@ -129,7 +129,7 @@ events = list(HTMLParser(StringIO(text))) kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) - self.assertEqual(u'foo\nbar', data) + self.assertEqual('foo\nbar', data) self.assertEqual((None, 1, 6), pos) def test_input_encoding_text(self): @@ -174,15 +174,15 @@ events = list(HTMLParser(StringIO(text))) kind, (target, data), pos = events[0] self.assertEqual(Stream.PI, kind) - self.assertEqual(u'php', target) - self.assertEqual(u'echo "Foobar"', data) + self.assertEqual('php', target) + self.assertEqual('echo "Foobar"', data) def test_xmldecl(self): text = '' events = list(XMLParser(StringIO(text))) kind, (version, encoding, standalone), pos = events[0] self.assertEqual(Stream.XML_DECL, kind) - self.assertEqual(u'1.0', version) + self.assertEqual('1.0', version) self.assertEqual(None, encoding) self.assertEqual(-1, standalone) @@ -191,8 +191,8 @@ events = list(XMLParser(StringIO(text))) kind, (version, encoding, standalone), pos = events[0] self.assertEqual(Stream.XML_DECL, kind) - self.assertEqual(u'1.0', version) - self.assertEqual(u'utf-8', encoding) + self.assertEqual('1.0', version) + self.assertEqual('utf-8', encoding) self.assertEqual(-1, standalone) def test_xmldecl_standalone(self): @@ -200,7 +200,7 @@ events = list(XMLParser(StringIO(text))) kind, (version, encoding, standalone), pos = events[0] self.assertEqual(Stream.XML_DECL, kind) - self.assertEqual(u'1.0', version) + self.assertEqual('1.0', version) self.assertEqual(None, encoding) self.assertEqual(1, standalone) @@ -209,8 +209,8 @@ events = list(HTMLParser(StringIO(text))) kind, (target, data), pos = events[0] self.assertEqual(Stream.PI, kind) - self.assertEqual(u'php', target) - self.assertEqual(u'echo "Foobar" ?', data) + self.assertEqual('php', target) + self.assertEqual('echo "Foobar" ?', data) def test_out_of_order_tags1(self): text = 'Foobar' diff --git a/genshi/tests/util.py b/genshi/tests/util.py --- a/genshi/tests/util.py +++ b/genshi/tests/util.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006 Edgewall Software +# Copyright (C) 2006,2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -29,8 +29,8 @@ item_a = cache._dict['A'] self.assertEqual('A', item_a.key) self.assertEqual(0, item_a.value) - self.assertEqual(None, item_a.previous) - self.assertEqual(None, item_a.next) + self.assertEqual(None, item_a.prv) + self.assertEqual(None, item_a.nxt) cache['B'] = 1 self.assertEqual(2, len(cache)) @@ -40,12 +40,12 @@ item_b = cache._dict['B'] self.assertEqual('A', item_a.key) self.assertEqual(0, item_a.value) - self.assertEqual(item_b, item_a.previous) - self.assertEqual(None, item_a.next) + self.assertEqual(item_b, item_a.prv) + self.assertEqual(None, item_a.nxt) self.assertEqual('B', item_b.key) self.assertEqual(1, item_b.value) - self.assertEqual(None, item_b.previous) - self.assertEqual(item_a, item_b.next) + self.assertEqual(None, item_b.prv) + self.assertEqual(item_a, item_b.nxt) cache['C'] = 2 self.assertEqual(2, len(cache)) @@ -55,12 +55,12 @@ item_c = cache._dict['C'] self.assertEqual('B', item_b.key) self.assertEqual(1, item_b.value) - self.assertEqual(item_c, item_b.previous) - self.assertEqual(None, item_b.next) + self.assertEqual(item_c, item_b.prv) + self.assertEqual(None, item_b.nxt) self.assertEqual('C', item_c.key) self.assertEqual(2, item_c.value) - self.assertEqual(None, item_c.previous) - self.assertEqual(item_b, item_c.next) + self.assertEqual(None, item_c.prv) + self.assertEqual(item_b, item_c.nxt) def test_getitem(self): cache = LRUCache(2) @@ -76,12 +76,12 @@ item_b = cache._dict['B'] self.assertEqual('A', item_a.key) self.assertEqual(0, item_a.value) - self.assertEqual(None, item_a.previous) - self.assertEqual(item_b, item_a.next) + self.assertEqual(None, item_a.prv) + self.assertEqual(item_b, item_a.nxt) self.assertEqual('B', item_b.key) self.assertEqual(1, item_b.value) - self.assertEqual(item_a, item_b.previous) - self.assertEqual(None, item_b.next) + self.assertEqual(item_a, item_b.prv) + self.assertEqual(None, item_b.nxt) def suite(): diff --git a/genshi/util.py b/genshi/util.py --- a/genshi/util.py +++ b/genshi/util.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2006-2007 Edgewall Software +# Copyright (C) 2006-2009 Edgewall Software # All rights reserved. # # This software is licensed as described in the file COPYING, which @@ -59,7 +59,7 @@ class _Item(object): def __init__(self, key, value): - self.previous = self.next = None + self.prv = self.nxt = None self.key = key self.value = value def __repr__(self): @@ -78,7 +78,7 @@ cur = self.head while cur: yield cur.key - cur = cur.next + cur = cur.nxt def __len__(self): return len(self._dict) @@ -103,10 +103,10 @@ return repr(self._dict) def _insert_item(self, item): - item.previous = None - item.next = self.head + item.prv = None + item.nxt = self.head if self.head is not None: - self.head.previous = item + self.head.prv = item else: self.tail = item self.head = item @@ -117,8 +117,8 @@ olditem = self._dict[self.tail.key] del self._dict[self.tail.key] if self.tail != self.head: - self.tail = self.tail.previous - self.tail.next = None + self.tail = self.tail.prv + self.tail.nxt = None else: self.head = self.tail = None @@ -126,16 +126,16 @@ if self.head == item: return - previous = item.previous - previous.next = item.next - if item.next is not None: - item.next.previous = previous + prv = item.prv + prv.nxt = item.nxt + if item.nxt is not None: + item.nxt.prv = prv else: - self.tail = previous + self.tail = prv - item.previous = None - item.next = self.head - self.head.previous = self.head = item + item.prv = None + item.nxt = self.head + self.head.prv = self.head = item def flatten(items):