# HG changeset patch # User cmlenz # Date 1213024799 0 # Node ID d007a0d7ba8113845394fcd1b064ec7b1ccfe1c2 # Parent 3a456053fa1aa7aea509f0e2e2e60f72c45e3a1f Remove some cruft for supporting Python 2.3. diff --git a/genshi/builder.py b/genshi/builder.py --- a/genshi/builder.py +++ b/genshi/builder.py @@ -68,11 +68,6 @@ Hello, world! """ -try: - set -except NameError: - from sets import Set as set - from genshi.core import Attrs, Markup, Namespace, QName, Stream, \ START, END, TEXT diff --git a/genshi/filters/html.py b/genshi/filters/html.py --- a/genshi/filters/html.py +++ b/genshi/filters/html.py @@ -13,11 +13,6 @@ """Implementation of a number of stream filters.""" -try: - set -except NameError: - from sets import ImmutableSet as frozenset - from sets import Set as set import re from genshi.core import Attrs, QName, stripentities diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py --- a/genshi/filters/i18n.py +++ b/genshi/filters/i18n.py @@ -17,10 +17,6 @@ """ from compiler import ast -try: - frozenset -except NameError: - from sets import ImmutableSet as frozenset from gettext import gettext import re 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 @@ -12,10 +12,6 @@ # history and logs, available at http://genshi.edgewall.org/log/. import doctest -try: - set -except NameError: - from sets import Set as set import unittest from genshi.input import HTML, ParseError diff --git a/genshi/input.py b/genshi/input.py --- a/genshi/input.py +++ b/genshi/input.py @@ -17,10 +17,6 @@ from itertools import chain from xml.parsers import expat -try: - frozenset -except NameError: - from sets import ImmutableSet as frozenset import HTMLParser as html import htmlentitydefs from StringIO import StringIO @@ -133,10 +129,6 @@ parser.UseForeignDTD() parser.ExternalEntityRefHandler = self._build_foreign - # Location reporting is only support in Python >= 2.4 - if not hasattr(parser, 'CurrentLineNumber'): - self._getpos = self._getpos_unknown - self.expat = parser self._queue = [] diff --git a/genshi/output.py b/genshi/output.py --- a/genshi/output.py +++ b/genshi/output.py @@ -16,10 +16,6 @@ """ from itertools import chain -try: - frozenset -except NameError: - from sets import ImmutableSet as frozenset import re from genshi.core import escape, Attrs, Markup, Namespace, QName, StreamEventKind diff --git a/genshi/template/base.py b/genshi/template/base.py --- a/genshi/template/base.py +++ b/genshi/template/base.py @@ -30,11 +30,6 @@ 'TemplateSyntaxError', 'BadDirectiveError'] __docformat__ = 'restructuredtext en' -if sys.version_info < (2, 4): - _ctxt2dict = lambda ctxt: ctxt.frames[0] -else: - _ctxt2dict = lambda ctxt: ctxt - class TemplateError(Exception): """Base exception class for errors related to template processing.""" @@ -299,7 +294,7 @@ if vars: ctxt.push(vars) ctxt.push({}) - suite.execute(_ctxt2dict(ctxt)) + suite.execute(ctxt) if vars: top = ctxt.pop() ctxt.pop() diff --git a/genshi/template/directives.py b/genshi/template/directives.py --- a/genshi/template/directives.py +++ b/genshi/template/directives.py @@ -14,10 +14,6 @@ """Implementation of the various template directives.""" import compiler -try: - frozenset -except NameError: - from sets import ImmutableSet as frozenset from genshi.core import QName, Stream from genshi.path import Path @@ -316,11 +312,7 @@ for event in _apply_directives(stream, directives, ctxt, **vars): yield event ctxt.pop() - try: - function.__name__ = self.name - except TypeError: - # Function name can't be set in Python 2.3 - pass + function.__name__ = self.name # Store the function reference in the bottom context frame so that it # doesn't get popped off before processing the template has finished diff --git a/genshi/template/eval.py b/genshi/template/eval.py --- a/genshi/template/eval.py +++ b/genshi/template/eval.py @@ -17,11 +17,6 @@ from compiler import ast, parse from compiler.pycodegen import ExpressionCodeGenerator, ModuleCodeGenerator import new -try: - set -except NameError: - from sets import ImmutableSet as frozenset - from sets import Set as set from textwrap import dedent from genshi.core import Markup @@ -40,8 +35,6 @@ exec 'from sys import *' in {}, _FakeMapping() except SystemError: has_star_import_bug = True -except TypeError: - pass # Python 2.3 del _FakeMapping def _star_import_patch(mapping, modname): @@ -484,8 +477,8 @@ node = node.__class__(*args) if lineno is not None: node.lineno = lineno - if isinstance(node, (ast.Class, ast.Function, ast.Lambda)) or \ - hasattr(ast, 'GenExpr') and isinstance(node, ast.GenExpr): + if isinstance(node, (ast.Class, ast.Function, ast.Lambda, + ast.GenExpr)): node.filename = '' # workaround for bug in pycodegen return node @@ -520,13 +513,10 @@ # This is a Python 2.4 bug. Only if we have a broken Python # version we have to apply the hack return node - new_node = ast.Discard(ast.CallFunc( + return ast.Discard(ast.CallFunc( ast.Name('_star_import_patch'), [ast.Name('__data__'), ast.Const(node.modname)], None, None - )) - if hasattr(node, 'lineno'): # No lineno in Python 2.3 - new_node.lineno = node.lineno - return new_node + ), lineno=node.lineno) def visitFunction(self, node): args = [] diff --git a/genshi/template/tests/directives.py b/genshi/template/tests/directives.py --- a/genshi/template/tests/directives.py +++ b/genshi/template/tests/directives.py @@ -496,8 +496,7 @@ frames[-1].tb_frame.f_code.co_name) self.assertEqual('test.html', frames[-1].tb_frame.f_code.co_filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(2, frames[-1].tb_lineno) + self.assertEqual(2, frames[-1].tb_lineno) def test_for_with_empty_value(self): """ @@ -970,8 +969,7 @@ self.fail('Expected TemplateSyntaxError') except TemplateSyntaxError, e: self.assertEqual('test.html', e.filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(2, e.lineno) + self.assertEqual(2, e.lineno) class ReplaceDirectiveTestCase(unittest.TestCase): @@ -989,8 +987,7 @@ self.fail('Expected TemplateSyntaxError') except TemplateSyntaxError, e: self.assertEqual('test.html', e.filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(2, e.lineno) + self.assertEqual(2, e.lineno) def test_as_element(self): tmpl = MarkupTemplate("""
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 @@ -18,7 +18,7 @@ import unittest from genshi.core import Markup -from genshi.template.base import Context, _ctxt2dict +from genshi.template.base import Context from genshi.template.eval import Expression, Suite, Undefined, UndefinedError, \ UNDEFINED @@ -241,11 +241,6 @@ self.assertEqual(42, expr.evaluate({'foo': foo, 'bar': {"x": 42}})) def test_lambda(self): - # Define a custom `sorted` function cause the builtin isn't available - # on Python 2.3 - def sorted(items, compfunc): - items.sort(compfunc) - return items data = {'items': [{'name': 'b', 'value': 0}, {'name': 'a', 'value': 1}], 'sorted': sorted} expr = Expression("sorted(items, lambda a, b: cmp(a.name, b.name))") @@ -274,30 +269,27 @@ expr = Expression("[i['name'] for i in items if i['value'] > 1]") self.assertEqual(['b'], expr.evaluate({'items': items})) - if sys.version_info >= (2, 4): - # Generator expressions only supported in Python 2.4 and up - - def test_generator_expression(self): - expr = Expression("list(n for n in numbers if n < 2)") - self.assertEqual([0, 1], expr.evaluate({'numbers': range(5)})) - - expr = Expression("list((i, n + 1) for i, n in enumerate(numbers))") - self.assertEqual([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], - expr.evaluate({'numbers': range(5)})) + def test_generator_expression(self): + expr = Expression("list(n for n in numbers if n < 2)") + self.assertEqual([0, 1], expr.evaluate({'numbers': range(5)})) - expr = Expression("list(offset + n for n in numbers)") - self.assertEqual([2, 3, 4, 5, 6], - expr.evaluate({'numbers': range(5), 'offset': 2})) + expr = Expression("list((i, n + 1) for i, n in enumerate(numbers))") + self.assertEqual([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], + expr.evaluate({'numbers': range(5)})) - def test_generator_expression_with_getattr(self): - items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] - expr = Expression("list(i.name for i in items if i.value > 1)") - self.assertEqual(['b'], expr.evaluate({'items': items})) + expr = Expression("list(offset + n for n in numbers)") + self.assertEqual([2, 3, 4, 5, 6], + expr.evaluate({'numbers': range(5), 'offset': 2})) - def test_generator_expression_with_getitem(self): - items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] - expr = Expression("list(i['name'] for i in items if i['value'] > 1)") - self.assertEqual(['b'], expr.evaluate({'items': items})) + def test_generator_expression_with_getattr(self): + items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] + expr = Expression("list(i.name for i in items if i.value > 1)") + self.assertEqual(['b'], expr.evaluate({'items': items})) + + def test_generator_expression_with_getitem(self): + items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}] + expr = Expression("list(i['name'] for i in items if i['value'] > 1)") + self.assertEqual(['b'], expr.evaluate({'items': items})) if sys.version_info >= (2, 5): def test_conditional_expression(self): @@ -575,7 +567,7 @@ def test_import_star(self): suite = Suite("from itertools import *") data = Context() - suite.execute(_ctxt2dict(data)) + suite.execute(data) assert 'ifilter' in data def test_for(self): 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 @@ -81,8 +81,7 @@ tmpl = MarkupTemplate(xml, filename='test.html') except BadDirectiveError, e: self.assertEqual('test.html', e.filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(1, e.lineno) + self.assertEqual(1, e.lineno) def test_directive_value_syntax_error(self): xml = """

""" @@ -91,8 +90,7 @@ self.fail('Expected SyntaxError') except TemplateSyntaxError, e: self.assertEqual('test.html', e.filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(1, e.lineno) + self.assertEqual(1, e.lineno) def test_expression_syntax_error(self): xml = """

@@ -103,8 +101,7 @@ self.fail('Expected SyntaxError') except TemplateSyntaxError, e: self.assertEqual('test.html', e.filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(2, e.lineno) + self.assertEqual(2, e.lineno) def test_expression_syntax_error_multi_line(self): xml = """

@@ -117,8 +114,7 @@ self.fail('Expected SyntaxError') except TemplateSyntaxError, e: self.assertEqual('test.html', e.filename) - if sys.version_info[:2] >= (2, 4): - self.assertEqual(3, e.lineno) + self.assertEqual(3, e.lineno) def test_markup_noescape(self): """ diff --git a/genshi/tests/input.py b/genshi/tests/input.py --- a/genshi/tests/input.py +++ b/genshi/tests/input.py @@ -28,8 +28,7 @@ kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) self.assertEqual(u'foo bar', data) - if sys.version_info[:2] >= (2, 4): - self.assertEqual((None, 1, 6), pos) + self.assertEqual((None, 1, 6), pos) def test_text_node_pos_multi_line(self): text = '''foo @@ -38,8 +37,7 @@ kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) self.assertEqual(u'foo\nbar', data) - if sys.version_info[:2] >= (2, 4): - self.assertEqual((None, 1, -1), pos) + self.assertEqual((None, 1, -1), pos) def test_element_attribute_order(self): text = '' @@ -123,8 +121,7 @@ kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) self.assertEqual(u'foo bar', data) - if sys.version_info[:2] >= (2, 4): - self.assertEqual((None, 1, 6), pos) + self.assertEqual((None, 1, 6), pos) def test_text_node_pos_multi_line(self): text = '''foo @@ -133,8 +130,7 @@ kind, data, pos = events[1] self.assertEqual(Stream.TEXT, kind) self.assertEqual(u'foo\nbar', data) - if sys.version_info[:2] >= (2, 4): - self.assertEqual((None, 1, 6), pos) + self.assertEqual((None, 1, 6), pos) def test_input_encoding_text(self): text = u'

\xf6
'.encode('iso-8859-1') diff --git a/genshi/util.py b/genshi/util.py --- a/genshi/util.py +++ b/genshi/util.py @@ -203,7 +203,7 @@ If the `keepxmlentities` parameter is provided and is a truth value, the core XML entities (&, ', >, < and ") are left intact. - + >>> stripentities('1 < 2 …', keepxmlentities=True) u'1 < 2 \u2026' """