Na bestudering van de code lijkt het erop dat er een fout is opgetreden bij het verwijzen naar die import. Ik keek in het bestand /lib/python3.2/site-packages/django/utils/six.py en vond waar de verwijzing was naar de module moves.zip_longest.
Eerst was deze referentie:
moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
Wat betekent dat het de _MovedItems-klasse aanriep, en hier is het met de verwijzing naar mijn module die brak.
class _MovedItems(_LazyModule):
"""Lazy loading of moved objects"""
_moved_attributes = [
MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest")
class MovedAttribute(_LazyDescr):
def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
super(MovedAttribute, self).__init__(name)
if PY3:
if new_mod is None:
new_mod = name
self.mod = new_mod
if new_attr is None:
if old_attr is None:
new_attr = name
else:
new_attr = old_attr
self.attr = new_attr
Die erft dan van de klasse _LazyDescr, maar dat is een klein klein object. Ik weet niet waar het mis is gegaan, als je de tuple die wordt doorgegeven aan de MovedAttribute-constructor toewijst, wordt de oude versie correct toegewezen aan de nieuwe. Ik weet niet zeker waarom het niet werkt, maar als je de import-instructie in het compiler.py-bestand verwijdert en itertools zip_longest gewoon rechtstreeks aanroept, werkt het allemaal.
Hier is hoe dat eruit ziet. Als je Python 3 gebruikt, bewerk dan het bestand /lib/python3.2/site-packages/mysql/connector/django/compiler.py en wijzig regel 6 hiervan:
from django.utils.six.moves import zip_longest as six_zip_longest
naar dit:
from itertools import zip_longest