Porting zope.tal to Python 3

Marius Gedminas <[email protected]>
Newsgroups gmane.comp.web.zope.devel
Message-ID <20130211184438.GA28162@platonas>
I don't plan to write about every package I port, but there were some
lessons learned from zope.tal that I thought I should mention.

- Running 2to3 on your sources is a good way to identify places that
  need changing, but you'll have to revert most of the actual changes to
  keep it compatible with Python 2.

  I recently learned about a tool called python-modernize[1] that is
  basically 2to3 except it rewrites into a common Python 2 & 3 subset.
  I haven't checked it out yet, but it sounds promising

    [1] http://pypi.python.org/pypi/modernize

- StringIO: while Python-3-style io.StringIO() and io.BytesIO() classes
  exist in Python 2.6+, you can't easily use either them as a
  replacement for StringIO.StringIO or cStringIO.StringIO.  Why?
  Because people tend to mix native (ASCII-only) string literals with
  Unicode objects, and that's a no-no in Python 3 land.

  I didn't like the idea of importing unicode_literals from the
  __future__, or of dropping u'' prefixes everywhere.  Partially because
  I'm not sure that would be enough -- str objects might make it all the
  way though the public API of zope.tal and suddenly code that used to
  work on Python 2 just fine would now explode.  So I went with a
  conditional import -- from cStringIO import StringIO on Python 2 and
  from io import StringIO on Python 3.

- tox/detox make it very easy to add just one more supported Python
  version -- edit tox.ini, run detox, fix tests.  This works with PyPy
  too, not just Python 3.x!

Marius Gedminas
-- 
http://pov.lt/ -- Zope 3/BlueBream consulting and development

_______________________________________________
Zope-Dev maillist  -  [email protected]
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists -
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )
signature.asc (application/pgp-signature, 190 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iD8DBQFRGTwWkVdEXeem148RAlz8AKCJCftjOL3XuOw793C5tflFkwchsACePtEl
YKbsuiizGxwWrUR/DzCAuIw=
=111I
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.