[openstack-dev] [swift] Plan to port Swift to Python 3
vstinner at redhat.com
Thu Oct 8 14:58:15 UTC 2015
Good news, we made good progress last weeks on porting Swift to Python
3, a few changes were merged and all dependencies now work on Python 3.
We only need two more simple changes to have a working pyhon34 check job:
* "py3: Update pbr and dnspython requirements"
* "py3: Add py34 test environment to tox"
With these changes, it will be possible to make the python34 check job
voting to avoid Python 3 regressions. It's very important to avoid
regressions, so we cannot go backward again in Python 3 support.
On IRC, it was said that it's better to merge Python 3 changes at the
beginning of the Mitaka cycle, because Python 3 requires a lot of small
changes which can likely introduce (subtle) bugs, and it's better to
catch them early during the development cycle.
John Dickinson prefers incremental and small changes, whereas clayg
looks to like giant patches to fix all Python 3 issues at once to avoid
conflicts in other (non-Python3) changes. (Sorry, if I didn't summarized
correctly the discussion we had yesterday.)
The problem is that it's hard to fix "all" Python 3 issues in a single
patch, the patch would be super giant and just impossible to review.
It's also annoying to have to write dozens of small patches: we loose
time on merge conflicts, rebasing, random gate failures, etc.
I proposed a first patch serie of 6 changes to fix a lot of simple
Python 3 issues "at once":
* "py3: Replace unicode with six.text_type"
* "py3: Replace urllib imports with six.moves.urllib"
* "py3: Use six.reraise() to reraise an exception"
* "py3: Replace gen.next() with next(gen)"
* "Replace itertools.ifilter with six.moves.filter"
* "py3: Replace basestring with six.string_types"
The overall diff is impressive: "61 files changed, 233 insertions(+),
189 deletions(-)" ... but each change is quite simple. It's only one
pattern replaced with a different pattern. For example, replace
"unicode" with "six.text_type" (and add "import six" if needed). So
these changes should be easy to review.
With a working (and voting?) python34 check job and these 6 changes, it
will be (much) easier to work on porting Swift to Python 3. Following
patches will be validated by the python34 check job, shorter and
restricted to a few files.
More information about the OpenStack-dev