WIP: Python 3 compatibility
This MR tries to make Gaudi a Python-3-first project, supporting Python 3 primarily, and adding Python 2.6+ compatibility where needed. This is mostly done with 'pure' Python, e.g. try/except
when importing a module that's changed between the two versions, but I've also used the six module occassionally, when it's cleaner.
As one might expect, there are quite a few changes. I've tried my best to separate each 'class' of change into individual commits, so although there are a lot of commits, each one is pretty small and should be reasonably self-contained.
So far, on my development machine, Gaudi successfully builds against LCG_91python3
, and a majority of the test cases pass. There are a couple of common features amongst the failing tests:
- The behaviour of the
pprint
module is different in Python 3, as it now tries to wrap strings as well as other objects; - The behaviour of
print
is different with respect to flushing.
This causes the test out not to match the references. Number 2 we can fix with some liberal applications of print(..., flush=True)
, but number 1 is more annoying.
Otherwise, there are several corner-cases that need individual attention. Good test coverage is cruicial in a smooth 2-to-3 transition, and it's easy to miss things (e.g. the change in behaviour of integer division).
I'll keep working on this MR to reduce the number of failing tests. For now, I intend to regularly rebase this MR, so that when I find something that's in a similar class to a commit I've already made, I can just update that commit, rather than create a new one.
Merge request reports
Activity
added lhcb-gaudi-head-py3 label
- [2017-12-16 00:03] Validation started with lhcb-gaudi-head-py3#5
- [2017-12-17 00:03] Validation started with lhcb-gaudi-head-py3#6
- [2017-12-18 00:05] Validation started with lhcb-gaudi-head-py3#7
- [2017-12-19 00:04] Validation started with lhcb-gaudi-head-py3#8
- [2017-12-20 00:04] Validation started with lhcb-gaudi-head-py3#9
- [2017-12-21 00:04] Automatic merge failed in lhcb-gaudi-head-py3#10
- [2017-12-22 00:05] Automatic merge failed in lhcb-gaudi-head-py3#11
- [2017-12-23 00:03] Automatic merge failed in lhcb-gaudi-head-py3#12
- [2017-12-24 00:04] Automatic merge failed in lhcb-gaudi-head-py3#13
- [2017-12-25 00:03] Automatic merge failed in lhcb-gaudi-head-py3#14
- [2017-12-26 00:03] Automatic merge failed in lhcb-gaudi-head-py3#15
- [2017-12-27 00:03] Automatic merge failed in lhcb-gaudi-head-py3#16
- [2017-12-28 00:04] Automatic merge failed in lhcb-gaudi-head-py3#17
- [2017-12-29 00:03] Automatic merge failed in lhcb-gaudi-head-py3#18
- [2017-12-30 00:03] Automatic merge failed in lhcb-gaudi-head-py3#19
- [2017-12-31 00:04] Automatic merge failed in lhcb-gaudi-head-py3#20
- [2018-01-02 00:04] Automatic merge failed in lhcb-gaudi-head-py3#21
- [2018-01-03 00:03] Automatic merge failed in lhcb-gaudi-head-py3#22
- [2018-01-04 00:04] Automatic merge failed in lhcb-gaudi-head-py3#23
- [2018-01-05 00:04] Automatic merge failed in lhcb-gaudi-head-py3#24
- [2018-01-06 00:05] Automatic merge failed in lhcb-gaudi-head-py3#25
- [2018-01-07 00:05] Automatic merge failed in lhcb-gaudi-head-py3#26
- [2018-01-08 00:04] Automatic merge failed in lhcb-gaudi-head-py3#27
- [2018-01-09 00:03] Automatic merge failed in lhcb-gaudi-head-py3#28
- [2018-01-10 00:03] Automatic merge failed in lhcb-gaudi-head-py3#29
- [2018-01-11 00:03] Validation started with lhcb-gaudi-head-py3#30
- [2018-01-12 00:04] Validation started with lhcb-gaudi-head-py3#31
- [2018-01-13 00:03] Validation started with lhcb-gaudi-head-py3#32
- [2018-01-14 00:04] Validation started with lhcb-gaudi-head-py3#33
- [2018-01-15 00:03] Validation started with lhcb-gaudi-head-py3#34
- [2018-01-16 00:04] Validation started with lhcb-gaudi-head-py3#35
- [2018-01-17 00:05] Validation started with lhcb-gaudi-head-py3#36
- [2018-01-18 00:05] Validation started with lhcb-gaudi-head-py3#37
- [2018-01-19 00:03] Validation started with lhcb-gaudi-head-py3#38
- [2018-01-20 00:04] Validation started with lhcb-gaudi-head-py3#39
- [2018-01-20 00:41] Validation started with lhcb-gaudi-head-py3#39
- [2018-01-20 00:55] Validation started with lhcb-gaudi-head-py3#39
- [2018-01-20 01:30] Validation started with lhcb-gaudi-head-py3#39
- [2018-01-20 10:14] Validation started with lhcb-gaudi-head-py3#39
- [2018-01-21 00:03] Validation started with lhcb-gaudi-head-py3#40
- [2018-01-22 00:03] Validation started with lhcb-gaudi-head-py3#41
- [2018-01-23 00:04] Validation started with lhcb-gaudi-head-py3#42
- [2018-01-24 00:03] Validation started with lhcb-gaudi-head-py3#43
- [2018-01-25 00:03] Validation started with lhcb-gaudi-head-py3#44
- [2018-01-26 00:04] Automatic merge failed in lhcb-gaudi-head-py3#45
- [2018-01-27 00:03] Automatic merge failed in lhcb-gaudi-head-py3#46
- [2018-01-28 00:04] Automatic merge failed in lhcb-gaudi-head-py3#47
- [2018-01-29 00:04] Automatic merge failed in lhcb-gaudi-head-py3#48
- [2018-01-30 00:05] Automatic merge failed in lhcb-gaudi-head-py3#49
- [2018-01-31 00:03] Automatic merge failed in lhcb-gaudi-head-py3#50
- [2018-02-01 00:03] Automatic merge failed in lhcb-gaudi-head-py3#51
- [2018-02-02 00:05] Automatic merge failed in lhcb-gaudi-head-py3#52
- [2018-02-03 00:03] Automatic merge failed in lhcb-gaudi-head-py3#53
- [2018-02-04 00:03] Automatic merge failed in lhcb-gaudi-head-py3#54
- [2018-02-05 00:04] Automatic merge failed in lhcb-gaudi-head-py3#55
- [2018-02-06 00:02] Automatic merge failed in lhcb-gaudi-head-py3#56
- [2018-02-07 00:03] Automatic merge failed in lhcb-gaudi-head-py3#57
- [2018-02-08 00:03] Automatic merge failed in lhcb-gaudi-head-py3#58
- [2018-02-09 00:04] Automatic merge failed in lhcb-gaudi-head-py3#59
- [2018-02-10 00:04] Automatic merge failed in lhcb-gaudi-head-py3#60
- [2018-02-11 00:03] Automatic merge failed in lhcb-gaudi-head-py3#61
- [2018-02-12 00:04] Automatic merge failed in lhcb-gaudi-head-py3#62
- [2018-02-13 00:03] Automatic merge failed in lhcb-gaudi-head-py3#63
- [2018-02-14 00:03] Automatic merge failed in lhcb-gaudi-head-py3#64
- [2018-02-15 00:04] Automatic merge failed in lhcb-gaudi-head-py3#65
- [2018-02-16 00:03] Automatic merge failed in lhcb-gaudi-head-py3#66
- [2018-02-17 00:03] Automatic merge failed in lhcb-gaudi-head-py3#67
- [2018-02-18 00:03] Automatic merge failed in lhcb-gaudi-head-py3#68
- [2018-02-18 00:48] Automatic merge failed in lhcb-gaudi-head-py3#68
- [2018-02-18 01:45] Automatic merge failed in lhcb-gaudi-head-py3#68
- [2018-02-19 00:03] Automatic merge failed in lhcb-gaudi-head-py3#69
- [2018-02-20 00:04] Automatic merge failed in lhcb-gaudi-head-py3#70
- [2018-02-21 00:03] Automatic merge failed in lhcb-gaudi-head-py3#71
- [2018-02-22 01:03] Automatic merge failed in lhcb-gaudi-head-py3#72
- [2018-02-23 01:02] Automatic merge failed in lhcb-gaudi-head-py3#73
- [2018-02-24 01:02] Automatic merge failed in lhcb-gaudi-head-py3#74
- [2018-02-25 01:04] Automatic merge failed in lhcb-gaudi-head-py3#75
- [2018-02-26 01:02] Automatic merge failed in lhcb-gaudi-head-py3#76
- [2018-02-27 01:03] Automatic merge failed in lhcb-gaudi-head-py3#77
- [2018-02-28 01:03] Automatic merge failed in lhcb-gaudi-head-py3#78
- [2018-03-01 00:03] Automatic merge failed in lhcb-gaudi-head-py3#79
- [2018-03-02 00:04] Automatic merge failed in lhcb-gaudi-head-py3#80
- [2018-03-03 00:02] Automatic merge failed in lhcb-gaudi-head-py3#81
- [2018-03-04 00:04] Automatic merge failed in lhcb-gaudi-head-py3#82
- [2018-03-05 00:03] Automatic merge failed in lhcb-gaudi-head-py3#83
- [2018-03-06 00:03] Automatic merge failed in lhcb-gaudi-head-py3#84
- [2018-03-07 00:04] Automatic merge failed in lhcb-gaudi-head-py3#85
- [2018-03-08 00:04] Automatic merge failed in lhcb-gaudi-head-py3#86
- [2018-03-09 00:05] Automatic merge failed in lhcb-gaudi-head-py3#87
- [2018-03-10 00:06] Automatic merge failed in lhcb-gaudi-head-py3#88
- [2018-03-11 00:05] Automatic merge failed in lhcb-gaudi-head-py3#89
- [2018-03-12 00:05] Automatic merge failed in lhcb-gaudi-head-py3#90
- [2018-03-13 00:05] Automatic merge failed in lhcb-gaudi-head-py3#91
- [2018-03-14 00:03] Automatic merge failed in lhcb-gaudi-head-py3#92
- [2018-03-15 00:04] Automatic merge failed in lhcb-gaudi-head-py3#93
- [2018-03-16 00:04] Automatic merge failed in lhcb-gaudi-head-py3#94
- [2018-03-17 00:04] Automatic merge failed in lhcb-gaudi-head-py3#95
- [2018-03-18 00:05] Automatic merge failed in lhcb-gaudi-head-py3#96
- [2018-03-19 00:05] Automatic merge failed in lhcb-gaudi-head-py3#97
- [2018-03-20 00:06] Automatic merge failed in lhcb-gaudi-head-py3#98
- [2018-03-21 00:04] Automatic merge failed in lhcb-gaudi-head-py3#99
- [2018-03-22 00:04] Automatic merge failed in lhcb-gaudi-head-py3#100
- [2018-03-23 00:06] Automatic merge failed in lhcb-gaudi-head-py3#101
- [2018-03-24 00:04] Automatic merge failed in lhcb-gaudi-head-py3#102
- [2018-03-25 00:03] Automatic merge failed in lhcb-gaudi-head-py3#103
- [2018-03-26 00:04] Automatic merge failed in lhcb-gaudi-head-py3#104
- [2018-03-27 00:05] Automatic merge failed in lhcb-gaudi-head-py3#105
- [2018-03-28 00:03] Automatic merge failed in lhcb-gaudi-head-py3#106
- [2018-03-29 00:05] Automatic merge failed in lhcb-gaudi-head-py3#107
- [2018-03-30 00:06] Automatic merge failed in lhcb-gaudi-head-py3#108
- [2018-03-31 00:04] Automatic merge failed in lhcb-gaudi-head-py3#109
- [2018-04-01 00:05] Automatic merge failed in lhcb-gaudi-head-py3#110
- [2018-04-02 00:04] Automatic merge failed in lhcb-gaudi-head-py3#111
- [2018-04-03 00:04] Automatic merge failed in lhcb-gaudi-head-py3#112
- [2018-04-04 00:05] Automatic merge failed in lhcb-gaudi-head-py3#113
- [2018-04-05 00:04] Automatic merge failed in lhcb-gaudi-head-py3#114
- [2018-04-06 00:05] Validation started with lhcb-gaudi-head-py3#115
- [2018-04-07 00:03] Validation started with lhcb-gaudi-head-py3#116
- [2018-04-08 00:04] Validation started with lhcb-gaudi-head-py3#117
- [2018-04-09 00:05] Validation started with lhcb-gaudi-head-py3#118
- [2018-04-10 00:03] Validation started with lhcb-gaudi-head-py3#119
- [2018-04-11 00:06] Automatic merge failed in lhcb-gaudi-head-py3#120
- [2018-04-11 01:33] Automatic merge failed in lhcb-gaudi-head-py3#120
- [2018-04-12 00:04] Automatic merge failed in lhcb-gaudi-head-py3#121
- [2018-04-13 00:04] Automatic merge failed in lhcb-gaudi-head-py3#122
- [2018-04-14 00:03] Automatic merge failed in lhcb-gaudi-head-py3#123
- [2018-04-15 00:04] Automatic merge failed in lhcb-gaudi-head-py3#124
- [2018-04-16 00:03] Automatic merge failed in lhcb-gaudi-head-py3#125
- [2018-04-17 00:03] Automatic merge failed in lhcb-gaudi-head-py3#126
- [2018-04-18 00:04] Automatic merge failed in lhcb-gaudi-head-py3#127
- [2018-04-19 00:04] Automatic merge failed in lhcb-gaudi-head-py3#128
- [2018-04-20 00:05] Automatic merge failed in lhcb-gaudi-head-py3#129
- [2018-04-21 00:04] Automatic merge failed in lhcb-gaudi-head-py3#130
- [2018-04-22 00:04] Automatic merge failed in lhcb-gaudi-head-py3#131
- [2018-04-23 00:03] Automatic merge failed in lhcb-gaudi-head-py3#132
- [2018-04-24 00:03] Automatic merge failed in lhcb-gaudi-head-py3#133
- [2018-04-25 00:04] Automatic merge failed in lhcb-gaudi-head-py3#134
- [2018-04-26 00:04] Automatic merge failed in lhcb-gaudi-head-py3#135
- [2018-04-27 00:05] Automatic merge failed in lhcb-gaudi-head-py3#136
- [2018-04-28 00:03] Automatic merge failed in lhcb-gaudi-head-py3#137
- [2018-04-29 00:04] Automatic merge failed in lhcb-gaudi-head-py3#138
- [2018-04-30 00:04] Automatic merge failed in lhcb-gaudi-head-py3#139
- [2018-05-01 00:03] Automatic merge failed in lhcb-gaudi-head-py3#140
- [2018-05-02 00:04] Automatic merge failed in lhcb-gaudi-head-py3#141
- [2018-05-03 00:03] Automatic merge failed in lhcb-gaudi-head-py3#142
- [2018-05-04 00:04] Automatic merge failed in lhcb-gaudi-head-py3#143
- [2018-05-05 00:04] Automatic merge failed in lhcb-gaudi-head-py3#144
- [2018-05-06 00:05] Automatic merge failed in lhcb-gaudi-head-py3#145
- [2018-05-07 00:05] Automatic merge failed in lhcb-gaudi-head-py3#146
- [2018-05-08 00:05] Automatic merge failed in lhcb-gaudi-head-py3#147
- [2018-05-09 00:06] Automatic merge failed in lhcb-gaudi-head-py3#148
- [2018-05-10 00:05] Automatic merge failed in lhcb-gaudi-head-py3#149
- [2018-05-10 03:04] Automatic merge failed in lhcb-gaudi-head-py3#149
- [2018-05-11 00:05] Automatic merge failed in lhcb-gaudi-head-py3#150
- [2018-05-12 00:05] Automatic merge failed in lhcb-gaudi-head-py3#151
- [2018-05-13 00:04] Automatic merge failed in lhcb-gaudi-head-py3#152
- [2018-05-14 00:03] Automatic merge failed in lhcb-gaudi-head-py3#153
- [2018-05-15 00:06] Automatic merge failed in lhcb-gaudi-head-py3#154
- [2018-05-16 00:05] Automatic merge failed in lhcb-gaudi-head-py3#155
- [2018-05-17 00:04] Automatic merge failed in lhcb-gaudi-head-py3#156
- [2018-05-18 00:05] Automatic merge failed in lhcb-gaudi-head-py3#157
- [2018-05-19 00:03] Automatic merge failed in lhcb-gaudi-head-py3#158
- [2018-05-20 00:05] Automatic merge failed in lhcb-gaudi-head-py3#159
- [2018-05-21 00:04] Automatic merge failed in lhcb-gaudi-head-py3#160
- [2018-05-22 00:03] Automatic merge failed in lhcb-gaudi-head-py3#161
- [2018-05-23 00:06] Automatic merge failed in lhcb-gaudi-head-py3#162
- [2018-05-24 00:03] Automatic merge failed in lhcb-gaudi-head-py3#163
- [2018-05-25 00:03] Automatic merge failed in lhcb-gaudi-head-py3#164
- [2018-05-26 00:04] Automatic merge failed in lhcb-gaudi-head-py3#165
- [2018-05-27 00:05] Automatic merge failed in lhcb-gaudi-head-py3#166
- [2018-05-28 00:03] Automatic merge failed in lhcb-gaudi-head-py3#167
- [2018-05-29 00:05] Automatic merge failed in lhcb-gaudi-head-py3#168
- [2018-05-30 00:03] Automatic merge failed in lhcb-gaudi-head-py3#169
- [2018-05-31 00:04] Automatic merge failed in lhcb-gaudi-head-py3#170
- [2018-06-01 00:05] Automatic merge failed in lhcb-gaudi-head-py3#171
- [2018-06-02 00:04] Automatic merge failed in lhcb-gaudi-head-py3#172
- [2018-06-03 00:03] Automatic merge failed in lhcb-gaudi-head-py3#173
- [2018-06-04 00:04] Automatic merge failed in lhcb-gaudi-head-py3#174
- [2018-06-05 00:03] Automatic merge failed in lhcb-gaudi-head-py3#175
- [2018-06-06 00:05] Automatic merge failed in lhcb-gaudi-head-py3#176
Edited by Software for LHCbadded 30 commits
- 8f1d20bf - Use Python 2.6+ compatible import.
- 6a66ccd7 - Use Python 2.6+ compatible lambda syntax.
- 06c02d49 - Use Python 3 compatible metaclass syntax and function attribute accessors.
- 14790e3e - Define hash on classes that only define eq.
- 7f46e0f5 - saxutils requires a str, not a bytes.
- c3644168 - Do not mutate dictionaries whilst iterating over them.
- 2c0c5456 - Use Python 3 compatible iteration methods.
-
034b6b42 - Use Python 3 compatible
except
syntax. - 877daec9 - Use more idiomatic check for dictionary key membership.
- 427cbe83 - Use Python 3 compatible file reading.
- 03187dc8 - Use Python 3 compatible lists of string and number types.
- dcb4dd3d - Use Python 3 compatible long type.
- ee707047 - Use Python 3 compatible printing.
- 817bb599 - Ensure prints are flushed when necessary.
- 26cf0cdc - Use Python 3 compatible absolute imports.
- c82b5e1c - Use a more robust dynamic import method.
- 2daef19c - Decode bytes objects to strings.
- 82868053 - Nicer exception logging.
- a0a6ae35 - Handle missing atexit._exithandlers.
- e53eb353 - Set Boost Python library name based on found Python version.
- ec72b46d - Add missing import.
- c1edcc8a - Do not create init.py files in pycache/.
- d674e0eb - Pass UTF-8 encoded bytes to hashlib.sha1.
- 3d0cd632 - Use Python 3 compatible boolean cast method.
- f8b4711a - Use Python 3 compatible exception classes.
- 21958312 - Use version-agnostic Boost Python variable.
- 0aeb2449 - Don't use xrange.
- 2261b90b - More useful assertion messages.
- e67ec569 - Use sorting method compatible with both iterators and lists.
- da3dbec2 - Use Python 3 compatible new call.
Toggle commit listThe nightlies are failing because of zip-related problems. I've not had these locally after running
make
and thenmake install
. Is there some other command that creates the zip files?edit: the target is
make post-install
.Edited by Alex PearceToday's nightly failed in a far more spectacular way than yesterday's, much earlier. I changed very little yesterday, it should just affect the Python module zipping.
Could something else have gone wrong?
added 139 commits
-
2aff52cb...58146ecb - 83 commits from branch
gaudi:master
-
b1432c4c - Use Python 3 compatible
except
syntax. - 172ff933 - Use Python 3 compatible printing and importing.
- cd6e40c1 - Use Python 3 compatible map and filter methods.
- 6a4d330e - Python 3 compatibility for the cPickle module.
- 06be7055 - Typo.
- 7ff14d4f - Use *args and **kwargs rather than apply.
- ffda3a2d - filter is not subscriptable in Python 3.
- 719db193 - Use Python 3 compatible exec.
- 12aaa4f8 - Use Python 3 compatible octal notation.
- 8d342275 - Use Python 3 compatible floor division.
- f6ab2396 - Use Python 3 compatible maketrans and translate methods.
- f1ed1ca2 - Hacks to get Gaudi building under Python 3.
- 80188f60 - Use Python 3 compatible exception raising syntax.
- 7676890d - Use Python 3 compatible printing.
- d73939d4 - Only worry about loop variable clean-up in Python 2.
- 0eedb79f - Use Python 3 compatible execfile.
- fe9d0ced - Use more idiomatic check for dictionary key membership.
- adf4d60a - Use Python 3 compatible string instance checking.
- 702f649c - Use Python 3 compatible absolute imports.
- 57947ea2 - More hacks to get Gaudi building under Python 3.
- 096a05f6 - Be compatible with the CPython's Python 3 API.
- f458109f - Avoid unused variable warnings when compiling for Python 3.
- d27aa92e - Use Python 3 compatible printing.
-
cb372fd1 - Decode
bytes
objects to UTF-8str
objects. - 17ac6408 - Use Python 3 compatible iteration methods.
- 79aee8b6 - Use Python 2.6+ compatible import.
- 08784124 - Use Python 2.6+ compatible lambda syntax.
- ec3ced48 - Use Python 3 compatible metaclass syntax and function attribute accessors.
- 186cbf04 - Define hash on classes that only define eq.
- 80f526b6 - saxutils requires a str, not a bytes.
- ca9a5a10 - Do not mutate dictionaries whilst iterating over them.
- 7917859f - Use Python 3 compatible iteration methods.
-
37ec41e5 - Use Python 3 compatible
except
syntax. - eb90390a - Use more idiomatic check for dictionary key membership.
- 5ae0fd40 - Use Python 3 compatible file reading.
- 0d391def - Use Python 3 compatible lists of string and number types.
- 5d77c7f1 - Use Python 3 compatible long type.
- 2c6532d6 - Use Python 3 compatible printing.
- 4a9bfd6c - Ensure prints are flushed when necessary.
- 673456ef - Use Python 3 compatible absolute imports.
- 3f23fed1 - Use a more robust dynamic import method.
- de7e7ff9 - Decode bytes objects to strings.
- 942982e5 - Nicer exception logging.
- 0719a677 - Handle missing atexit._exithandlers.
- 3ea82b7e - Set Boost Python library name based on found Python version.
- 71a24826 - Add missing import.
- ee9720bc - Do not create init.py files in pycache/.
- ed387325 - Pass UTF-8 encoded bytes to hashlib.sha1.
- f9df2dbf - Use Python 3 compatible boolean cast method.
- 660c68b8 - Use Python 3 compatible exception classes.
- d0b49727 - Use version-agnostic Boost Python variable.
- c905032d - Don't use xrange.
- cbb6d8fa - More useful assertion messages.
- f2eb8357 - Use sorting method compatible with both iterators and lists.
- 0674199b - Use Python 3 compatible new call.
- ca0d14cf - Treat files as byte streams.
Toggle commit list-
2aff52cb...58146ecb - 83 commits from branch
The latest nightly is failing in ways that I think are unrelated to my changes, for example:
/build/jenkins-build/workspace/nightly-builds/build/build/GAUDI/GAUDI_HEAD/GaudiKernel/GaudiKernel/StatusCode.h:101:22: error: no member named 'exchange' in namespace 'std' ... /build/jenkins-build/workspace/nightly-builds/build/build/GAUDI/GAUDI_HEAD/GaudiKernel/GaudiKernel/TypeNameString.h:37:42: error: no template named 'enable_if_t' in namespace 'std'
I'm not sure where these are coming from. They don't appear in other slots.
mentioned in merge request !606 (merged)
added 261 commits
-
ca0d14cf...9eca68f7 - 207 commits from branch
gaudi:master
-
0d290126 - Use Python 3 compatible
except
syntax. - 750dfa93 - Use Python 3 compatible printing and importing.
- c9c5d6c0 - Use Python 3 compatible map and filter methods.
- 213a6b82 - Python 3 compatibility for the cPickle module.
- 59faca3f - Use *args and **kwargs rather than apply.
- b2e914af - Use Python 3 compatible exec.
- f378e818 - Use Python 3 compatible octal notation.
- acf5fc6a - Use Python 3 compatible floor division.
- 3ae81e66 - Use Python 3 compatible maketrans and translate methods.
- 32d33dba - Hacks to get Gaudi building under Python 3.
- 03985dcd - Use Python 3 compatible exception raising syntax.
- 66f4d532 - Use Python 3 compatible printing.
- 694d1240 - Only worry about loop variable clean-up in Python 2.
- 420dd3b2 - Use Python 3 compatible execfile.
- 3d7309be - Use more idiomatic check for dictionary key membership.
- e520ad40 - Use Python 3 compatible string instance checking.
- da032b1c - Use Python 3 compatible absolute imports.
- 2cbc6411 - More hacks to get Gaudi building under Python 3.
- fb258753 - Be compatible with the CPython's Python 3 API.
- 4f15fda4 - Avoid unused variable warnings when compiling for Python 3.
- dc20fdf8 - Use Python 3 compatible printing.
-
914a78dd - Decode
bytes
objects to UTF-8str
objects. - 7dd12d24 - Use Python 3 compatible iteration methods.
- 405fbcca - Use Python 2.6+ compatible import.
- d661e801 - Use Python 2.6+ compatible lambda syntax.
- 5c5f8723 - Use Python 3 compatible metaclass syntax and function attribute accessors.
- 544d1550 - Define hash on classes that only define eq.
- c68aa624 - saxutils requires a str, not a bytes.
- 9a19cb64 - Do not mutate dictionaries whilst iterating over them.
- cc109085 - Use Python 3 compatible iteration methods.
-
d5782c6e - Use Python 3 compatible
except
syntax. - 10719576 - Use more idiomatic check for dictionary key membership.
- 3d832729 - Use Python 3 compatible file reading.
- 612a1d23 - Use Python 3 compatible lists of string and number types.
- 7276e9d1 - Use Python 3 compatible long type.
- eb654695 - Use Python 3 compatible printing.
- 0dee1649 - Ensure prints are flushed when necessary.
- d6e1ed5e - Use Python 3 compatible absolute imports.
- a3c975f1 - Use a more robust dynamic import method.
- 5fa2b2fe - Decode bytes objects to strings.
- c8c5b7dd - Nicer exception logging.
- bded4ca5 - Handle missing atexit._exithandlers.
- dde0f70b - Set Boost Python library name based on found Python version.
- 86714efa - Add missing import.
- 3956a48e - Do not create init.py files in pycache/.
- 96ee36cd - Pass UTF-8 encoded bytes to hashlib.sha1.
- f49a0fd9 - Use Python 3 compatible boolean cast method.
- 470ab7c2 - Use Python 3 compatible exception classes.
- 7dce2393 - Use version-agnostic Boost Python variable.
- b9b88e71 - Don't use xrange.
- 82f72909 - More useful assertion messages.
- 05739cf2 - Use sorting method compatible with both iterators and lists.
- 2e0ae7c7 - Use Python 3 compatible new call.
- a6c2cd93 - Treat files as byte streams.
Toggle commit list-
ca0d14cf...9eca68f7 - 207 commits from branch
added 337 commits
-
9ba6930d...7caef2ec - 282 commits from branch
gaudi:master
- 1d0fc56e - Use Python 3 compatible `except` syntax.
- d92c6f25 - Use Python 3 compatible printing and importing.
- bde74c52 - Use Python 3 compatible map and filter methods.
- 8928c1e6 - Python 3 compatibility for the cPickle module.
- cbef8cb0 - Use *args and **kwargs rather than apply.
- 11e2e292 - Use Python 3 compatible exec.
- 39be99ac - Use Python 3 compatible octal notation.
- 5da8d878 - Use Python 3 compatible floor division.
- e8046488 - Use Python 3 compatible maketrans and translate methods.
- fb0560c1 - Hacks to get Gaudi building under Python 3.
- 3429795a - Use Python 3 compatible exception raising syntax.
- 50bb468e - Use Python 3 compatible printing.
- 14bf2b2d - Only worry about loop variable clean-up in Python 2.
- ac9c4d0d - Use Python 3 compatible execfile.
- 91cc62f3 - Use more idiomatic check for dictionary key membership.
- 93ab4568 - Use Python 3 compatible string instance checking.
- 9342c0be - Use Python 3 compatible absolute imports.
- fcbde55f - More hacks to get Gaudi building under Python 3.
- 475419f8 - Be compatible with the CPython's Python 3 API.
- d6aea624 - Avoid unused variable warnings when compiling for Python 3.
- 7e11f0ac - Use Python 3 compatible printing.
- fe529484 - Decode `bytes` objects to UTF-8 `str` objects.
- b16516c8 - Use Python 3 compatible iteration methods.
- d0c5d96a - Use Python 2.6+ compatible import.
- 18e7679e - Use Python 2.6+ compatible lambda syntax.
- 92707466 - Use Python 3 compatible metaclass syntax and function attribute accessors.
- cc5949b9 - Define __hash__ on classes that only define __eq__.
- c342d02c - saxutils requires a str, not a bytes.
- 494dce15 - Do not mutate dictionaries whilst iterating over them.
- d89e5af7 - Use Python 3 compatible iteration methods.
- a21a2b2a - Use Python 3 compatible `except` syntax.
- 1df82d2c - Use more idiomatic check for dictionary key membership.
- 98e75268 - Use Python 3 compatible file reading.
- fd1035d0 - Use Python 3 compatible lists of string and number types.
- 176431cc - Use Python 3 compatible long type.
- b637cbf1 - Use Python 3 compatible printing.
- 8332dc95 - Ensure prints are flushed when necessary.
- 6f4a0516 - Use Python 3 compatible absolute imports.
- 9434fb43 - Use a more robust dynamic import method.
- e3c0561b - Decode bytes objects to strings.
- 25957268 - Nicer exception logging.
- 839e9217 - Handle missing atexit._exithandlers.
- 954cc754 - Set Boost Python library name based on found Python version.
- 759ff0b5 - Add missing import.
- b156ffd8 - Do not create __init__.py files in __pycache__/.
- e0c16e4c - Pass UTF-8 encoded bytes to hashlib.sha1.
- 189434f7 - Use Python 3 compatible boolean cast method.
- d2be0699 - Use Python 3 compatible exception classes.
- 8b4163c1 - Use version-agnostic Boost Python variable.
- 7cfb0638 - Don't use xrange.
- b935977f - More useful assertion messages.
- acd40e31 - Use sorting method compatible with both iterators and lists.
- 75ca8874 - Use Python 3 compatible __new__ call.
- 1a1f1729 - Treat files as byte streams.
- ac5a3d91 - Don't require Python 2.7.
Toggle commit list-
9ba6930d...7caef2ec - 282 commits from branch
added 142 commits
-
e334bd90...75830ca3 - 86 commits from branch
gaudi:master
- 702f37dd - Use Python 3 compatible `except` syntax.
- c522ada4 - Use Python 3 compatible printing and importing.
- fb91a36b - Use Python 3 compatible map and filter methods.
- b5d0fb7a - Python 3 compatibility for the cPickle module.
- f91f4072 - Use *args and **kwargs rather than apply.
- 8ff19358 - Use Python 3 compatible exec.
- b18ec813 - Use Python 3 compatible octal notation.
- a9be3d4d - Use Python 3 compatible floor division.
- 4ea33ad7 - Use Python 3 compatible maketrans and translate methods.
- aaf2817b - Hacks to get Gaudi building under Python 3.
- 69395ae3 - Use Python 3 compatible exception raising syntax.
- 2c6c49a7 - Use Python 3 compatible printing.
- bdba77c7 - Only worry about loop variable clean-up in Python 2.
- 8ea553d8 - Use Python 3 compatible execfile.
- 36251f3d - Use more idiomatic check for dictionary key membership.
- f8e65227 - Use Python 3 compatible string instance checking.
- b096fbd9 - Use Python 3 compatible absolute imports.
- f1224765 - More hacks to get Gaudi building under Python 3.
- 16c5f6c7 - Be compatible with the CPython's Python 3 API.
- 1717e8f3 - Avoid unused variable warnings when compiling for Python 3.
- 0dd8c161 - Use Python 3 compatible printing.
- 72162280 - Decode `bytes` objects to UTF-8 `str` objects.
- bc7a3c74 - Use Python 3 compatible iteration methods.
- f09ff8ca - Use Python 2.6+ compatible import.
- 0634cd8d - Use Python 2.6+ compatible lambda syntax.
- 78d4c444 - Use Python 3 compatible metaclass syntax and function attribute accessors.
- db507905 - Define __hash__ on classes that only define __eq__.
- a68b2f0c - saxutils requires a str, not a bytes.
- 6e684289 - Do not mutate dictionaries whilst iterating over them.
- 795ce287 - Use Python 3 compatible iteration methods.
- 2b3a4269 - Use Python 3 compatible `except` syntax.
- 04f6ed4c - Use more idiomatic check for dictionary key membership.
- 382392f4 - Use Python 3 compatible file reading.
- 84efd158 - Use Python 3 compatible lists of string and number types.
- ac98bfbb - Use Python 3 compatible long type.
- 4d0a659d - Use Python 3 compatible printing.
- a7ffeda0 - Ensure prints are flushed when necessary.
- 7e2bf81b - Use Python 3 compatible absolute imports.
- f92746f4 - Use a more robust dynamic import method.
- 8e1a56bd - Decode bytes objects to strings.
- de4f3233 - Nicer exception logging.
- 2f8282e0 - Handle missing atexit._exithandlers.
- 184365f8 - Set Boost Python library name based on found Python version.
- 18d1b32c - Add missing import.
- e84824a3 - Do not create __init__.py files in __pycache__/.
- d0c6b22b - Pass UTF-8 encoded bytes to hashlib.sha1.
- b82f4639 - Use Python 3 compatible boolean cast method.
- 35f72150 - Use Python 3 compatible exception classes.
- 563de9a4 - Use version-agnostic Boost Python variable.
- f16d9ddf - Don't use xrange.
- 31d710f1 - More useful assertion messages.
- 90458296 - Use sorting method compatible with both iterators and lists.
- d8ba8f07 - Use Python 3 compatible __new__ call.
- 8d00715f - Treat files as byte streams.
- 651b67f9 - Don't require Python 2.7.
- ee3245ef - TEST: Don't require RELAX.
Toggle commit list-
e334bd90...75830ca3 - 86 commits from branch
mentioned in issue #56 (closed)
@apearce Are you still actively working on this?
The short answer is no.
I got to the point of having Gaudi build and run, but I don't have the expertise to get all of the tests passing. I think most of changes needed for Python 3 compatibility are there, it just needs a final push.
I am interested in resuming work on it if there is interest in getting this through.
Edited by Alex Pearce