The original reasons for supporting it have not been met, or shown to be untrue:
Reason: It won't be much of a maintenance burden.
Current State: It requires a notable amount of effort to maintain compatibility.
Note: This was the main reason support was originally included, the idea being that if the maintenance burden became too high, support would be dropped. The other reasons for support were noted as secondary benefits rather than standalone reasons to support 2.7.
Reason: It will allow pyIATI to be seamlessly integrated into old tools.
Current State: The tools where it has been integrated have involved major revisions. Where it is yet to be integrated, it is reasonably practicable that the pyIATI functionality could be separated from the legacy parts of the system. The legacy systems could even be updated to work with Python 3.
Reason: There will be lots of other people using this to integrate with Python 2.7 code.
Current State: There have not been a large number of people doing this. Also, people should be encouraged to transition away from Python 2, not stick with it!
It restricts the use of beneficial language features introduced with Python 3. This makes the pyIATI codebase:
More confusing (2 ways of doing the same thing)
Harder to maintain (more lines of code, more conditionals, fewer modern language features)
Less specific (unable to use capabilities such as the improved builtin exception hierarchy)
More error prone (certain language features and library calls in Python 3 make particular categories of bug less likely)
lxml (the underlying XML-handling library used by pyIATI) differs in functionality between Python 2 and Python 3.
The longer support is maintained, the more legacy code there will be that needs migrating away. It's a change that will need to happen eventually, so the sooner the better.
[x] Remove from Travis
[x] Remove from setup.py
[x] Remove from other places it's mentioned
[x] Replace instances where six is used with the Python 3 equivalent
[x] Replace instances where future is used with the Python 3 equivalent
[x] Do a global search for the following terms and remove / update code as appropriate to remove custom workarounds for 2.7:
[x] compatibility
[x] python2/3
[x] python2
[x] python 2
[x] sys.version
[x] Skim through all the code to see if there are any other keywords to look for, or compatibility lines that have no notes against them
pyIATI should drop support for Python 2.7.
2.7 support should be dropped because:
setup.py
six
is used with the Python 3 equivalentfuture
is used with the Python 3 equivalentcompatibility
python2/3
python2
python 2
sys.version