Opened 4 months ago

Last modified 4 months ago

#21634 new Cleanup/optimization

Lis of installed apps set to empty when ImproperlyConfigured exception is raised

Reported by: nikolay.v.golub@… Owned by: nobody
Component: Core (Management commands) Version: 1.6
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


This code in at line 104

Code highlighting:

      # Find the installed apps
      from django.conf import settings
          apps = settings.INSTALLED_APPS
      except ImproperlyConfigured:
          # Still useful for commands that do not require functional settings,
          # like startproject or help
          apps = []

Says, that apps will be set to [] if ImproperlyConfigured exception is raised. This leads to misunderstanding, when error raised for wrong configuration of 3rd-party application.

Also this code contradicts PEP-20:

  • Explicit is better than implicit
  • Errors should never pass silently

For example if you use South, and have any 3rd party app, that can raise ImproperlyConfigured exception you will get following error when you'll try to migrate apps db schema:

Unknown command: 'migrate'
Type ' help' for usage.

What purpose of this catching? If something is improperly configured, maybe user should know about it?

Please, review this ticket and remove this catching.

Attachments (0)

Change History (2)

comment:1 Changed 4 months ago by nikolay.v.golub@…

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

comment:2 Changed 4 months ago by claudep

  • Triage Stage changed from Unreviewed to Accepted

As you can read in the comment, the purpose is to allow to run some commands even when settings are not yet properly configured. It's obvious that when you run startproject, no suitable settings will be available.

In [a098bee1b9fa4df] (#19724), we already improved the message for the help command in the case ImproperlyConfigured exception is raised. So I suggest to extend a similar handling for all commands.

Add Comment

Modify Ticket

Change Properties
<Author field>
as new
The owner will be changed from nobody to anonymous. Next status will be 'assigned'
as The resolution will be set. Next status will be 'closed'

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.