Cryptic errors when using django-nose
07 December 2011
After about 3 days of debugging using
... File "/Users/peterbe/dev/MOZILLA/PTO/pto/urls.py", line 6, in <module> admin.autodiscover() File "/Users/peterbe/dev/MOZILLA/PTO/pto/vendor/src/django/django/contrib/admin/__init__.py", line 26, in autodiscover import_module('%s.admin' % app) File "/Users/peterbe/dev/MOZILLA/PTO/pto/vendor/src/django/django/utils/importlib.py", line 35, in import_module __import__(name) File "/Users/peterbe/dev/MOZILLA/PTO/pto/apps/users/admin.py", line 30, in <module> admin.site.register(UserProfile, UserProfileAdmin) File "/Users/peterbe/dev/MOZILLA/PTO/pto/vendor/src/django/django/contrib/admin/sites.py", line 85, in register raise AlreadyRegistered('The model %s is already registered' % model.__name__) AlreadyRegistered: The model UserProfile is already registered
Turns out to be independent of which Django project I ran and it was something no one else was able to reproduce on any machine with the exact same code.
After 2 days I found that there's a difference between a successful run and a failing run was how I specified (to
nose) which module to load:
./manage.py test users # fails! ./manage.py test users.test # works!
In both cases it finds the same tests. So it would either fail 10 times or work 10 times. Hmmm...
The bridging between
nose and Django is done by awesome django-nose developed here at Mozilla by Django extraordinaire Jeff Balogh and it's a non-trivial piece of code as it depends on some really smart importing tricks and stuff which I haven't even begun to understand.
However, after so many trial and errors I finally discovered that the solution (for me) was to delete the
~/.noserc file. What's strange is that all it contained was:
I might never actually find out what went wrong. Ultimately I think a reason things went wrong was because it incorrectly populated
sys.modules with excessive keys that would cause double imports of
urls.py which in turn runs
admin.autodiscover() but incorrectly does so twice.
Sorry for the rambling. And sorry for not actually finding the real bug. I did spent 2-3 days debugging this non-stop and hopefully some other poor frustrated person is going to see this and also look into the
~/.noserc for ways to fix it maybe.