id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 21502,"Django 1.6 upgrade: ""cannot import name BaseHandler""",Erik Evenson,nobody,"I am trying to upgrade from Django 1.5.5 to Django 1.6. Everything tests fine, but when I try to run my django project, I get the following error: {{{ ValueError: Unable to configure handler 'mail_admins': Cannot resolve 'vbenergyzone.core.utils.log.StaffSuperuserEmailHandler': cannot import name BaseHandler }}} Also: http://stackoverflow.com/questions/20167580/django-1-6-upgrade-cannot-import-name-basehandler. Here is what I have tried: - I have removed my custom logging handler code completely. The project runs fine without any errors. - I have replaced my custom logging handler code and replaced it with the default handler code. I get the same error. - I have tried Django 1.6c1 and get the same error. Thanks! Here is my stacktrace: {{{ 20:29:03 web.1 | started with pid 1501 20:29:03 worker.1 | started with pid 1504 20:29:03 web.1 | 2013-11-23 20:29:03 [1503] [INFO] Starting gunicorn 18.0 20:29:03 web.1 | 2013-11-23 20:29:03 [1503] [INFO] Listening at: http://192.168.50.4:5000 (1503) 20:29:03 web.1 | 2013-11-23 20:29:03 [1503] [INFO] Using worker: sync 20:29:03 web.1 | 2013-11-23 20:29:03 [1518] [INFO] Booting worker with pid: 1518 20:29:04 web.1 | 2013-11-23 14:29:04 [1518] [ERROR] Exception in worker process: 20:29:04 web.1 | Traceback (most recent call last): 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/arbiter.py"", line 495, in spawn_worker 20:29:04 web.1 | worker.init_process() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/workers/base.py"", line 106, in init_process 20:29:04 web.1 | self.wsgi = self.app.wsgi() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/app/base.py"", line 114, in wsgi 20:29:04 web.1 | self.callable = self.load() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py"", line 62, in load 20:29:04 web.1 | return self.load_wsgiapp() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py"", line 49, in load_wsgiapp 20:29:04 web.1 | return util.import_app(self.app_uri) 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/util.py"", line 354, in import_app 20:29:04 web.1 | __import__(module) 20:29:04 web.1 | File ""/vagrant/vbenergyzone/wsgi.py"", line 23, in 20:29:04 web.1 | from django.core.wsgi import get_wsgi_application 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/core/wsgi.py"", line 1, in 20:29:04 web.1 | from django.core.handlers.wsgi import WSGIHandler 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py"", line 11, in 20:29:04 web.1 | from django.core.handlers import base 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/core/handlers/base.py"", line 12, in 20:29:04 web.1 | from django.db import connections, transaction 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/db/__init__.py"", line 83, in 20:29:04 web.1 | signals.request_started.connect(reset_queries) 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py"", line 88, in connect 20:29:04 web.1 | if settings.DEBUG: 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/conf/__init__.py"", line 54, in __getattr__ 20:29:04 web.1 | self._setup(name) 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/conf/__init__.py"", line 50, in _setup 20:29:04 web.1 | self._configure_logging() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/conf/__init__.py"", line 80, in _configure_logging 20:29:04 web.1 | logging_config_func(self.LOGGING) 20:29:04 web.1 | File ""/usr/lib/python2.7/logging/config.py"", line 777, in dictConfig 20:29:04 web.1 | dictConfigClass(config).configure() 20:29:04 web.1 | File ""/usr/lib/python2.7/logging/config.py"", line 575, in configure 20:29:04 web.1 | '%r: %s' % (name, e)) 20:29:04 web.1 | ValueError: Unable to configure handler 'mail_admins': Cannot resolve 'vbenergyzone.core.utils.log.StaffSuperuserEmailHandler': cannot import name BaseHandler 20:29:04 web.1 | Traceback (most recent call last): 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/arbiter.py"", line 495, in spawn_worker 20:29:04 web.1 | worker.init_process() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/workers/base.py"", line 106, in init_process 20:29:04 web.1 | self.wsgi = self.app.wsgi() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/app/base.py"", line 114, in wsgi 20:29:04 web.1 | self.callable = self.load() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py"", line 62, in load 20:29:04 web.1 | return self.load_wsgiapp() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py"", line 49, in load_wsgiapp 20:29:04 web.1 | return util.import_app(self.app_uri) 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/gunicorn/util.py"", line 354, in import_app 20:29:04 web.1 | __import__(module) 20:29:04 web.1 | File ""/vagrant/vbenergyzone/wsgi.py"", line 23, in 20:29:04 web.1 | from django.core.wsgi import get_wsgi_application 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/core/wsgi.py"", line 1, in 20:29:04 web.1 | from django.core.handlers.wsgi import WSGIHandler 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py"", line 11, in 20:29:04 web.1 | from django.core.handlers import base 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/core/handlers/base.py"", line 12, in 20:29:04 web.1 | from django.db import connections, transaction 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/db/__init__.py"", line 83, in 20:29:04 web.1 | signals.request_started.connect(reset_queries) 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py"", line 88, in connect 20:29:04 web.1 | if settings.DEBUG: 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/conf/__init__.py"", line 54, in __getattr__ 20:29:04 web.1 | self._setup(name) 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/conf/__init__.py"", line 50, in _setup 20:29:04 web.1 | self._configure_logging() 20:29:04 web.1 | File ""/home/vagrant/.virtualenvs/VBEZ/local/lib/python2.7/site-packages/django/conf/__init__.py"", line 80, in _configure_logging 20:29:04 web.1 | logging_config_func(self.LOGGING) 20:29:04 web.1 | File ""/usr/lib/python2.7/logging/config.py"", line 777, in dictConfig 20:29:04 web.1 | dictConfigClass(config).configure() 20:29:04 web.1 | File ""/usr/lib/python2.7/logging/config.py"", line 575, in configure 20:29:04 web.1 | '%r: %s' % (name, e)) 20:29:04 web.1 | ValueError: Unable to configure handler 'mail_admins': Cannot resolve 'vbenergyzone.core.utils.log.StaffSuperuserEmailHandler': cannot import name BaseHandler }}} Here is my logging configuration: {{{#!python LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse' } }, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'handlers': { 'null': { 'level': 'DEBUG', 'class': 'django.utils.log.NullHandler', }, 'console':{ 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'mail_admins': { 'level': 'ERROR', # 'class': 'django.utils.log.AdminEmailHandler', 'class': 'vbenergyzone.core.utils.log.StaffSuperuserEmailHandler', 'filters': [], } }, 'loggers': { 'django': { 'handlers': ['null'], 'propagate': True, 'level': 'INFO', }, 'django.request': { 'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': True, }, 'vbenergyzone': { 'handlers': ['console', 'mail_admins'], 'level': 'INFO', } } } }}} Here is my custom logger: {{{#!python """""" Logging utilities """""" import logging import traceback from django.contrib.sites.models import Site from django.views.debug import get_exception_reporter_filter from vbenergyzone.core import send_message # ============================================================================== class StaffSuperuserEmailHandler(logging.Handler): def emit(self, record): try: request = record.request domain = Site.objects.get_current().domain subject = 'User %s experienced an error on %s: %s' % \ (request.user, domain, record.getMessage()) filter = get_exception_reporter_filter(request) request_repr = filter.get_request_repr(request) except Exception: subject = '%s: %s' % ( record.levelname, record.getMessage(), ) request = None request_repr = ""Request repr() unavailable."" if record.exc_info: exc_info = record.exc_info stack_trace = \ '\n'.join(traceback.format_exception(*record.exc_info)) else: exc_info = (None, record.getMessage(), None) stack_trace = 'No stack trace available' context_object = { 'message': record.getMessage(), 'request': request, 'request_repr': request_repr, 'stack_trace': stack_trace, } send_message( context_object=context_object, html_template='core/email/staff_super_email_handler.html', send_to_staff_and_superusers=True, subject=self.format_subject(subject), text_template='core/email/staff_super_email_handler.txt', ) def format_subject(self, subject): """""" Escape CR and LF characters, and limit length. RFC 2822's hard limit is 998 characters per line. So, minus ""Subject: "" the actual subject must be no longer than 989 characters. """""" formatted_subject = subject.replace('\n', '\\n').replace('\r', '\\r') return formatted_subject[:989] }}}",Uncategorized,closed,Uncategorized,1.6,Normal,duplicate,,Baptiste Mispelon,Unreviewed,0,0,0,0,0,0