Example:
{{{
## settings
SETTING_A = 'A'
SETTING_B = 'B'
## usage
from django.test import override_settings
from django.conf import settings
from django.core import signals
def setting_changed_receiver(*args, **kwargs):
if kwargs['setting'] == 'SETTING_B':
raise Exception("I'm here for the lulz")
signals.setting_changed.connect(setting_changed_receiver)
try:
with override_settings(SETTING_A='X', SETTING_B='X'):
pass
except:
pass
print(settings.SETTING_A)
print(settings.SETTING_B)
}}}
prints out:
{{{
X
X
}}}
instead of the expected:
{{{
A
B
}}}
This may have some repercussions while running tests, since one failing
test can influence a different, unrelated one.
--
Ticket URL: <https://code.djangoproject.com/ticket/29467>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Comment (by Sławek Ehlert):
You can see what kind of troubles it may cause in
https://code.djangoproject.com/ticket/29449#comment:2
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:1>
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:2>
* status: new => assigned
* owner: nobody => Sławek Ehlert
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:3>
Comment (by Sławek Ehlert):
I've opened https://github.com/django/django/pull/10068 to address this
issue.
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:4>
* cc: felixxm (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:5>
* cc: Carlton Gibson (added)
* has_patch: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:6>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"c6238bf02b7ca5cf0f31f893a951f257dc557600" c6238bf0]:
{{{
#!CommitTicketReference repository=""
revision="c6238bf02b7ca5cf0f31f893a951f257dc557600"
Fixed #29467 -- Made override_settings handle errors in setting_changed
signal receivers.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:7>