﻿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
31165	Overhaul settings.	orlnub123	nobody	"This overhaul fixes a couple of bugs and makes the code simpler. The bugs it
fixes are:

- Being able to set non-upper attributes directly on the settings object e.g.:
  {{{#!python
  from django.conf import settings

  settings.foo = 'bar'  # Doesn't error
  print(settings.foo)
  }}}

- Being able to delete the same setting multiple times on user configured settings e.g.:
  {{{#!python
  from django.conf import settings

  settings.configure()
  # Doesn't error
  del settings.TEST
  del settings.TEST
  del settings.TEST
  }}}

- `Settings.is_overridden` ignoring set and deleted settings directly on the settings object e.g.:
  {{{#!python
  from django.conf import settings

  assert settings.is_overridden('TEST')
  del settings.TEST
  print(settings.is_overridden('TEST'))  # True; should be False

  assert not settings.is_overridden('TEST2')
  settings.TEST2 = 2
  print(settings.is_overridden('TEST2'))  # False; should be True
  }}}

The biggest change is that now user configured settings are evaluated immediately instead of on-demand via a `__getattr__`. This was done to fix the second bug in the simplest way. If all settings live in the `__dict__`, you don't have to fake attribute deletion."	Bug	closed	Core (Other)	dev	Normal	invalid	settings		Unreviewed	1	0	0	0	0	0
