sio2project / oioioi

GNU General Public License v3.0
160 stars 70 forks source link

Print oi module ImportError in debug mode #361

Closed metenn closed 2 months ago

metenn commented 2 months ago

Two days ago I wasted 30 minutes trying to figure out why my URL doesn't register in urls.py, turned out to be an error somewhere else in views.py and there was no indication of it.

Hopefully this will be helpful to someone in the future as it would've been for me at that moment.

Prints only the exception message instead of the whole stack as that would've been annoying in some setups (already this prints about 20 error lines on stock sio2 setup)

twalen commented 2 months ago

Could you also add similar change to oioioi/urls.py

twalen commented 2 months ago

Actually this patch prints a lot of debugging information at this moment:

cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.contestexcl.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'Forum' from partially initialized module 'oioioi.forum.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/forum/models.py)
No module named 'oioioi.ctimes.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.timeline.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.testspackages.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.globalmessage.controllers'
No module named 'oioioi.filetracker.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'Consents' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'PreferencesSaved' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.sioworkers.controllers'
No module named 'oioioi.analytics.controllers'
No module named 'oioioi.celery.controllers'
No module named 'oioioi.status.controllers'
No module named 'oioioi.su.controllers'
No module named 'oioioi.clock.controllers'
No module named 'oioioi.base.controllers'
No module named 'oioioi.maintenancemode.controllers'
No module named 'oioioi.evalmgr.controllers'
No module named 'oioioi.workers.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi._locale.controllers'
/sio2/oioioi/oioioi/base/captcha_check.py:38: CaptchaAudioWarning: Audio playback of captcha is turned off, because no flite executable was found in PATH, and CAPTCHA_FLITE_PATH was not set to any path
  warnings.warn(
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.contestexcl.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'Forum' from partially initialized module 'oioioi.forum.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/forum/models.py)
No module named 'oioioi.ctimes.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.timeline.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.testspackages.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.globalmessage.controllers'
No module named 'oioioi.filetracker.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'Consents' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
cannot import name 'PreferencesSaved' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi.sioworkers.controllers'
No module named 'oioioi.analytics.controllers'
No module named 'oioioi.celery.controllers'
No module named 'oioioi.status.controllers'
No module named 'oioioi.su.controllers'
No module named 'oioioi.clock.controllers'
No module named 'oioioi.base.controllers'
No module named 'oioioi.maintenancemode.controllers'
No module named 'oioioi.evalmgr.controllers'
No module named 'oioioi.workers.controllers'
cannot import name 'UserPreferences' from partially initialized module 'oioioi.base.models' (most likely due to a circular import) (/sio2/oioioi/oioioi/base/models.py)
No module named 'oioioi._locale.controllers'
Watching for file changes with StatReloader
Performing system checks...

DEBUG urls.py: No module named 'oioioi.contestexcl.urls'
DEBUG urls.py: No module named 'oioioi.confirmations.urls'
DEBUG urls.py: No module named 'oioioi.acm.views'
DEBUG urls.py: No module named 'oioioi.suspendjudge.views'
DEBUG urls.py: No module named 'oioioi.globalmessage.views'
DEBUG urls.py: No module named 'oioioi.filetracker.urls'
DEBUG contests.urls: No module named 'oioioi.contestexcl.urls'
DEBUG contests.urls: No module named 'oioioi.confirmations.urls'
DEBUG contests.urls: No module named 'oioioi.acm.urls'
DEBUG contests.urls: No module named 'oioioi.suspendjudge.urls'
DEBUG contests.urls: No module named 'oioioi.globalmessage.urls'
DEBUG contests.urls: No module named 'oioioi.filetracker.urls'
DEBUG contests.urls: No module named 'oioioi.sioworkers.urls'
DEBUG contests.urls: No module named 'oioioi.analytics.urls'
DEBUG contests.urls: No module named 'oioioi.celery.urls'
DEBUG contests.urls: No module named 'oioioi.evalmgr.urls'
DEBUG contests.urls: No module named 'oioioi._locale.urls'
DEBUG urls.py: No module named 'oioioi.sioworkers.views'
DEBUG urls.py: No module named 'oioioi.analytics.views'
DEBUG urls.py: No module named 'oioioi.celery.views'
DEBUG urls.py: No module named 'oioioi.evalmgr.views'
DEBUG urls.py: No module named 'oioioi._locale.views'

(DEBUG lines are just my change to locate the source of the message)

That's a lot. It seems that the current implementation or urls.py is depends on try & catch imports, which is not nice.

Do you think at least some of those errors can be resolved?

twalen commented 2 months ago

@metenn Please let me know if you have time to fix some of the errors that I've mentioned in previous comment. If not I can merge this PR & ticket new issue about reducing number of warnings.

metenn commented 2 months ago

@metenn Please let me know if you have time to fix some of the errors that I've mentioned in previous comment. If not I can merge this PR & ticket new issue about reducing number of warnings.

The debug spam didn't bother me but I could see how this could be an issue (e.g. an error you are be looking for could be blending in with all the others). I'll look into improving the importing mechanism, let's put this on hold for now.

metenn commented 2 months ago

Big thanks to @A-dead-pixel for helping me!