#36635: Settings._explicit_settings attribute not accessible when using
override_settings
-----------------------------------+--------------------------------------
Reporter: mmdev | Owner: (none)
Type: Uncategorized | Status: new
Component: Testing framework | Version: 5.2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-----------------------------------+--------------------------------------
Description changed by mmdev:
Old description:
> The `Settings._explicit_settings` attribute, which is always populated by
> `Settings.__init__()`, becomes inaccessible when the `override_settings`
> decorator or context manager is used. This causes an `AttributeError`
> when trying to access this attribute, creating inconsistent behavior.
>
> == Steps to Reproduce
>
> As a decorator:
> {{{#!python
> from django.test import override_settings
>
> @override_settings(KEY="VALUE")
> def test_override_settings(settings):
> assert settings._explicit_settings # Raises AttributeError
> }}}
>
> As a context manager:
> {{{#!python
> from django.test import override_settings
> from django.conf import settings
>
> with override_settings(KEY="VALUE"):
> settings._explicit_settings # Raises AttributeError
> }}}
>
> Both cases raise `AttributeError: '_explicit_settings'` but work
> correctly without `override_settings`.
>
> == Expected Behavior
>
> The behavior should be consistent: if `_explicit_settings` is accessible
> without `override_settings`, it should remain accessible when using
> `override_settings` (both as a decorator and context manager). This
> attribute is an internal part of the Settings API and may be needed by
> test code to inspect which settings were explicitly set in the settings
> module.
New description:
The `Settings._explicit_settings` attribute, which is always populated by
`Settings.__init__()`, becomes inaccessible when the `override_settings`
decorator or context manager is used. This causes an `AttributeError` when
trying to access this attribute, creating inconsistent behavior.
== Steps to Reproduce
As a decorator:
{{{#!python
from django.test import override_settings
from django.conf import settings
@override_settings(KEY="VALUE")
def test_override_settings(settings):
assert settings._explicit_settings # Raises AttributeError
}}}
As a context manager:
{{{#!python
from django.test import override_settings
from django.conf import settings
with override_settings(KEY="VALUE"):
settings._explicit_settings # Raises AttributeError
}}}
Both cases raise `AttributeError: '_explicit_settings'` but work correctly
without `override_settings`.
== Expected Behavior
The behavior should be consistent: if `_explicit_settings` is accessible
without `override_settings`, it should remain accessible when using
`override_settings` (both as a decorator and context manager). This
attribute is an internal part of the Settings API and may be needed by
test code to inspect which settings were explicitly set in the settings
module.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/36635#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/01070199a2fe1c3b-4c6ed358-dae3-4efb-bf34-15caa818fc80-000000%40eu-central-1.amazonses.com.