[Django] #29467: override_settings context manager can leave undesired settings state

26 views
Skip to first unread message

Django

unread,
Jun 3, 2018, 4:25:50 PM6/3/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek | Owner: nobody
Ehlert |
Type: Bug | Status: new
Component: Testing | Version: 2.0
framework | Keywords: settings
Severity: Normal | override_settings
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
When connecting to the {{{setting_changed}}} signal a receiver function
that throws an error, one can break the {{{override_settings}}}
decorator/context manager and leave the current settings in the modified
state. {{{override_settings}}} context manager should be more defensive
inside the "enter" part when the {{{setting_changed}}} signal is sent.

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.

Django

unread,
Jun 3, 2018, 4:48:12 PM6/3/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: nobody
Type: Bug | Status: new
Component: Testing framework | Version: 2.0
Severity: Normal | Resolution:
Keywords: settings | Triage Stage:
override_settings | Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

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>

Django

unread,
Jun 4, 2018, 6:20:20 AM6/4/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: nobody
Type: Bug | Status: new

Component: Testing framework | Version: 2.0
Severity: Normal | Resolution:
Keywords: settings | Triage Stage: Accepted
override_settings |
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Claude Paroz):

* stage: Unreviewed => Accepted


--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:2>

Django

unread,
Jun 4, 2018, 6:31:25 AM6/4/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: Sławek
| Ehlert
Type: Bug | Status: assigned

Component: Testing framework | Version: 2.0
Severity: Normal | Resolution:
Keywords: settings | Triage Stage: Accepted
override_settings |
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Sławek Ehlert):

* status: new => assigned
* owner: nobody => Sławek Ehlert


--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:3>

Django

unread,
Jun 20, 2018, 6:27:00 AM6/20/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: Sławek
| Ehlert
Type: Bug | Status: assigned
Component: Testing framework | Version: 2.0
Severity: Normal | Resolution:
Keywords: settings | Triage Stage: Accepted
override_settings |
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

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>

Django

unread,
Jun 20, 2018, 6:45:54 AM6/20/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: Sławek
| Ehlert
Type: Bug | Status: assigned
Component: Testing framework | Version: 2.0
Severity: Normal | Resolution:
Keywords: settings | Triage Stage: Accepted
override_settings |
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* cc: felixxm (added)


--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:5>

Django

unread,
Jun 21, 2018, 4:05:05 AM6/21/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: Sławek
| Ehlert
Type: Bug | Status: assigned
Component: Testing framework | Version: 2.0
Severity: Normal | Resolution:
Keywords: settings | Triage Stage: Accepted
override_settings |
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson):

* cc: Carlton Gibson (added)
* has_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/29467#comment:6>

Django

unread,
Jul 30, 2018, 4:15:22 PM7/30/18
to django-...@googlegroups.com
#29467: override_settings context manager can leave undesired settings state
-------------------------------------+-------------------------------------
Reporter: Sławek Ehlert | Owner: Sławek
| Ehlert
Type: Bug | Status: closed

Component: Testing framework | Version: 2.0
Severity: Normal | Resolution: fixed

Keywords: settings | Triage Stage: Accepted
override_settings |
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham <timograham@…>):

* 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>

Reply all
Reply to author
Forward
0 new messages