From d509a3825489f792257e4e4149c561f6bda95318 Mon Sep 17 00:00:00 2001 From: Clemens Wolff Date: Tue, 3 Jun 2025 11:59:18 +0200 Subject: [PATCH] Respect override_settings in SilkyConfig --- project/tests/test_config_override.py | 9 +++++++++ silk/config.py | 7 +++++++ 2 files changed, 16 insertions(+) create mode 100644 project/tests/test_config_override.py diff --git a/project/tests/test_config_override.py b/project/tests/test_config_override.py new file mode 100644 index 00000000..dcb52ec4 --- /dev/null +++ b/project/tests/test_config_override.py @@ -0,0 +1,9 @@ +from django.test import TestCase, override_settings + +from silk.config import SilkyConfig + + +class TestOverrideSettings(TestCase): + def test_respects_override_settings(self): + with override_settings(SILKY_INTERCEPT_PERCENT=0): + self.assertEqual(SilkyConfig().SILKY_INTERCEPT_PERCENT, 0) diff --git a/silk/config.py b/silk/config.py index 8b237340..54a215f4 100644 --- a/silk/config.py +++ b/silk/config.py @@ -39,11 +39,13 @@ class SilkyConfig(metaclass=Singleton): def _setup(self): from django.conf import settings + from django.core.signals import setting_changed options = {option: getattr(settings, option) for option in dir(settings) if option.startswith('SILKY')} self.attrs = copy(self.defaults) self.attrs['SILKY_PYTHON_PROFILER_RESULT_PATH'] = settings.MEDIA_ROOT self.attrs.update(options) + setting_changed.connect(self._on_setting_changed) def __init__(self): super().__init__() @@ -54,3 +56,8 @@ def __getattr__(self, item): def __setattribute__(self, key, value): self.attrs[key] = value + + def _on_setting_changed(self, sender, **kwargs): + setting = kwargs.get('setting') + if setting and setting.startswith('SILKY'): + self.attrs[setting] = kwargs.get('value')