Python 2.7 backport