The escape() function in this file in Django 1.4: /home/user/VirtualEnvs/mezzanine/local/lib/python2.7/site-packages/django/utils/html.py atttempts to use the unicode replace method with byte strings. This causes this exception when running the Mezzanine tests using the newstr object: File "/home/user/VirtualEnvs/mezzanine/local/lib/python2.7/site-packages/django/utils/html.py", line 36, in escape return mark_safe(force_unicode(html).replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"').replace("'", ''')) File "/home/user/VirtualEnvs/mezzanine/local/lib/python2.7/site-packages/future-0.9.0_dev-py2.7.egg/future/builtins/backports/__init__.py", line 145, in wrapper raise TypeError(errmsg.format(mytype)) TypeError: argument can't be Comment to add to prevent Pylint from issuing warnings on ``from future.builtins import *``: # pylint: disable=W0622,W0401 INCOMPATIBLE: array.array() Python 2: >>> array.array(b'b') array.array(b'b') >>> array.array(u'u') TypeError: must be char, not unicode Python 3: >>> array.array(b'b') TypeError: must be a unicode character, not bytes >>> array.array(u'b') array('b') Maybe use on Py2: >>> array.array(u'b'.encode('ascii')) ?? Long int syntax (e.g. 1000000L) is incompatible with Py3. We probably shouldn't shadow int with long on Py2 because then isinstance(1, int) is False Python 2's bytes object is nothing like Python 3's bytes object! Running test_bytes.py from Py3 on Py2 (after fixing imports) gives this: -------------------------------------------------------------- Ran 203 tests in 0.209s FAILED (failures=31, errors=55, skipped=1)