Edgewall Software

Changeset 1143


Ignore:
Timestamp:
Oct 25, 2010, 12:48:15 AM (13 years ago)
Author:
hodgestar
Message:

add support for python 3 to remaining genshi.template components:

  • minor changes to track encoding=None API change in core genshi modules.
  • genshi/template/directives:
    • slightly odd syntax changes to make the 2to3 .next() fixer pick up *stream.next()
    • minor test fix for change in behaviour of division (/) in Python 3.
  • genshi/template/loader:
    • add 'b' to file modes to ensure it's loaded as bytes in Python 3.
  • use not isinstance(s, unicode) instead of isinstance(s, str) since the former is correctly converted by 2to3.
Location:
branches/experimental/py3k/genshi/template
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/experimental/py3k/genshi/template/base.py

    r1120 r1143  
    1616from collections import deque
    1717import os
    18 from StringIO import StringIO
    1918import sys
    2019
     20from genshi.compat import StringIO, BytesIO
    2121from genshi.core import Attrs, Stream, StreamEventKind, START, TEXT, _ensure
    2222from genshi.input import ParseError
     
    399399        self._prepared = False
    400400
    401         if isinstance(source, basestring):
    402             source = StringIO(source)
    403         else:
    404             source = source
     401        if not isinstance(source, Stream) and not hasattr(source, 'read'):
     402            if isinstance(source, unicode):
     403                source = StringIO(source)
     404            else:
     405                source = BytesIO(source)
    405406        try:
    406407            self._stream = self._parse(source, encoding)
  • branches/experimental/py3k/genshi/template/directives.py

    r1129 r1143  
    623623            raise TemplateRuntimeError('"when" directives can only be used '
    624624                                       'inside a "choose" directive',
    625                                        self.filename, *stream.next()[2][1:])
     625                                       self.filename, *(stream.next())[2][1:])
    626626        if info[0]:
    627627            return []
     
    629629            raise TemplateRuntimeError('either "choose" or "when" directive '
    630630                                       'must have a test expression',
    631                                        self.filename, *stream.next()[2][1:])
     631                                       self.filename, *(stream.next())[2][1:])
    632632        if info[1]:
    633633            value = info[2]
     
    662662            raise TemplateRuntimeError('an "otherwise" directive can only be '
    663663                                       'used inside a "choose" directive',
    664                                        self.filename, *stream.next()[2][1:])
     664                                       self.filename, *(stream.next())[2][1:])
    665665        if info[0]:
    666666            return []
  • branches/experimental/py3k/genshi/template/loader.py

    r1120 r1143  
    4747    >>> import tempfile
    4848    >>> fd, path = tempfile.mkstemp(suffix='.html', prefix='template')
    49     >>> os.write(fd, '<p>$var</p>')
     49    >>> os.write(fd, u'<p>$var</p>'.encode('utf-8'))
    5050    11
    5151    >>> os.close(fd)
     
    284284        def _load_from_directory(filename):
    285285            filepath = os.path.join(path, filename)
    286             fileobj = open(filepath, 'U')
     286            fileobj = open(filepath, 'rbU')
    287287            mtime = os.path.getmtime(filepath)
    288288            def _uptodate():
  • branches/experimental/py3k/genshi/template/plugin.py

    r1082 r1143  
    4545        self.options = options
    4646
    47         self.default_encoding = options.get('genshi.default_encoding', 'utf-8')
     47        self.default_encoding = options.get('genshi.default_encoding', None)
    4848        auto_reload = options.get('genshi.auto_reload', '1')
    4949        if isinstance(auto_reload, basestring):
  • branches/experimental/py3k/genshi/template/tests/directives.py

    r1120 r1143  
    11381138        </div>""")
    11391139        self.assertEqual("""<div>
    1140           84 42
    1141         </div>""", tmpl.generate(x=42).render(encoding=None))
     1140          84 %s
     1141        </div>""" % (84 / 2), tmpl.generate(x=42).render(encoding=None))
    11421142
    11431143    def test_semicolon_escape(self):
  • branches/experimental/py3k/genshi/template/tests/loader.py

    r1120 r1143  
    348348
    349349    def test_load_with_default_encoding(self):
    350         f = open(os.path.join(self.dirname, 'tmpl.html'), 'w')
     350        f = open(os.path.join(self.dirname, 'tmpl.html'), 'wb')
    351351        try:
    352352            f.write(u'<div>\xf6</div>'.encode('iso-8859-1'))
     
    357357
    358358    def test_load_with_explicit_encoding(self):
    359         f = open(os.path.join(self.dirname, 'tmpl.html'), 'w')
     359        f = open(os.path.join(self.dirname, 'tmpl.html'), 'wb')
    360360        try:
    361361            f.write(u'<div>\xf6</div>'.encode('iso-8859-1'))
  • branches/experimental/py3k/genshi/template/tests/markup.py

    r1088 r1143  
    1616import pickle
    1717import shutil
    18 from StringIO import StringIO
    1918import sys
    2019import tempfile
    2120import unittest
    2221
     22from genshi.compat import BytesIO, StringIO
    2323from genshi.core import Markup
    2424from genshi.input import XML
     
    4444        stream = XML('<root>$var</root>')
    4545        tmpl = MarkupTemplate(stream)
    46         buf = StringIO()
     46        buf = BytesIO()
    4747        pickle.dump(tmpl, buf, 2)
    4848        buf.seek(0)
  • branches/experimental/py3k/genshi/template/tests/plugin.py

    r835 r1143  
    3131    def test_init_no_options(self):
    3232        plugin = MarkupTemplateEnginePlugin()
    33         self.assertEqual('utf-8', plugin.default_encoding)
     33        self.assertEqual(None, plugin.default_encoding)
    3434        self.assertEqual('html', plugin.default_format)
    3535        self.assertEqual(None, plugin.default_doctype)
     
    166166        plugin = MarkupTemplateEnginePlugin()
    167167        tmpl = plugin.load_template(PACKAGE + '.templates.functions')
    168         output = plugin.render({'snippet': '<b>Foo</b>'}, template=tmpl)
     168        output = plugin.render({'snippet': u'<b>Foo</b>'}, template=tmpl)
    169169        self.assertEqual("""<div>
    170170False
     
    179179    def test_init_no_options(self):
    180180        plugin = TextTemplateEnginePlugin()
    181         self.assertEqual('utf-8', plugin.default_encoding)
     181        self.assertEqual(None, plugin.default_encoding)
    182182        self.assertEqual('text', plugin.default_format)
    183183
  • branches/experimental/py3k/genshi/template/text.py

    r1088 r1143  
    163163
    164164        source = source.read()
    165         if isinstance(source, str):
     165        if not isinstance(source, unicode):
    166166            source = source.decode(encoding or 'utf-8', 'replace')
    167167        offset = 0
     
    280280
    281281        source = source.read()
    282         if isinstance(source, str):
     282        if not isinstance(source, unicode):
    283283            source = source.decode(encoding or 'utf-8', 'replace')
    284284        offset = 0
Note: See TracChangeset for help on using the changeset viewer.