Skip to main content

sixer is a tool adding Python 3 support to a Python 2 project.

sixer was written to produces patches to port OpenStack to Python 3.

It uses basic regular expressions to find code which needs to be modified. It emits warnings when code was not patched or looks suspicious.

Usage

sixer.py <directory or filename> <operation>

sixer.py displays the name of patched files. It displays warnings for code unchanged but which looks suspicious.

If you pass a directory, sixer.py searchs for .py files in all subdirectories.

Warning: sixer.py modifies files inplace without asking for confirmation. It’s better to use it in a project managed by a source control manager (ex: git).

Available operations:

  • all

  • basestring

  • iteritems

  • iterkeys

  • itervalues

  • long

  • next

  • raise

  • six_moves

  • stringio

  • unicode

  • urllib

  • xrange

Installation

To install sixer, type:

pip3 install sixer

sixer requires Python 3, it doesn’t work on Python 2.

Operations

  • all:

    • combine all operations all together

  • basestring:

    • replace basestring with six.string_types

  • iteritems:

    • replace dict.iteritems() with six.iteritems(dict)

  • itervalues:

    • replace dict.itervalues() with six.itervalues(dict)

  • iterkeys:

    • replace dict.iterkeys() with six.iterkeys(dict)

    • note: for key in dict.iterkeys(): can usually be simplified to for key in dict:

  • long:

    • replace 123L with 123

    • octal number are unchanged (ex: 010L)

  • next:

    • replace iter.next() with next(iter)

  • raise:

    • replace raise exc[0], exc[1], exc[2] with six.reraise(*exc)

    • replace raise exc_type, exc_value, exc_tb with six.reraise(exc_type, exc_value, exc_tb)

    • replace raise exc, msg with raise exc(msg)

  • six_moves:

    • replace Python 2 imports with imports from six.moves

    • Python 2 modules:

      • BaseHTTPServer

      • ConfigParser

      • Queue

      • __builtin__

      • httplib

      • repr

  • urllib:

    • replace Python 2 urllib and urllib2 with six.moves.urllib

  • stringio:

    • replace StringIO.StringIO with six.StringIO

    • later you may have to replace it with six.StringIO when bytes are expected on Python 3

  • unicode:

    • replace unicode with six.text_type

  • xrange:

    • replace xrange() with range() and add from six.moves import range

    • don’t add the import if all ranges have 1024 items or less

Adding the six import

When an operation uses six, import six may be added. sixer repects OpenStack coding style rules to add the import: imports grouped by standard library, third party and local imports; and imports must be are sorted.

The sixer tool was initially written to produce patches for OpenStack which respects OpenStack coding style, especially the complex rule to group and sort imports.

Limitations

The project is based on regular expressions, it produces false positives (invalid changes). For example, some operations replace patterns in strings, comments or function names even if it doesn’t make sense.

Try also the 2to6 project which may be more reliable.

Tests

To run tests, type tox. Type pip install tox to install the tox program.

Or run tests manually: type python3 tests.py.

Changelog

  • 2015-05-27: Version 0.3.1

    • Fix the “all” operation

    • six_moves knows more modules

    • urllib: add pathname2url, don’t touch urllib2.parse_http_list()

  • 2015-05-27: Version 0.3

    • First command line parameter can now be a filename

    • Add “all”, “basestring”, “iterkeys”, “six_moves”, “stringio” and “urllib” operations

    • Enhance the knownledge tables for modules (stdlib, third parties, applications)

    • Ignore unparsable import lines when adding an import

  • 2015-05-12: Version 0.2, first public release

See also

Release files for sixer 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sixer 0.3.1
File Size Uploaded
sixer-0.3.1.tar.gz 15.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sixer 0.3.1
File Interpreter ABI Platform
sixer-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.8 kB

Release files / sixer-0.3.1.tar.gz

Download URL sixer-0.3.1.tar.gz
Size 15.5 kB
Tags Source
SHA-256 checksum
How to use checksums
72a2806bd099f1a195a993220eacfb2d4abbfb51ee3375699f9e1a6e0c6fa333
BLAKE2b-256 checksum
How to use checksums
12c99ba9602c9f9dc845aa0fe8e39c9601171308776c262419b2d9c908d140c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / sixer-0.3.1-py3-none-any.whl

Download URL sixer-0.3.1-py3-none-any.whl
Size 11.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e70c47ac6090157315eaf7b8786f883176ce959eeb4055c175ced7957f8192e8
BLAKE2b-256 checksum
How to use checksums
334a0d7808394635ccf1506575a4fef47d72ec88ff7811fcb85af9cbe1b98532
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

1.6.1

2 release files

1.6

2 release files

1.5

2 release files

1.4

2 release files

1.3

2 release files

1.2

2 release files

1.1

2 release files

1.0

2 release files

0.8

2 release files

0.7

2 release files

0.6

1 release file

0.5

2 release files

0.4

2 release files

This release

0.3.1 This release

2 release files

0.3

2 release files

0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page