From c49118f15409e9fe947e8a1e1bef681b34e419ab Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Fri, 26 Jun 2026 20:15:47 +0300 Subject: [PATCH] fix: read instance attributes in api_bootstrapper_config The api_bootstrapper_config property built its LitestarConfig from the module-global settings singleton instead of self, so any Settings instance other than the singleton (or any access before the singleton is constructed) silently produced the singleton's values. Switch every field to self.*. Add a regression test that constructs a Settings with non-default service_name/service_version and asserts the config reflects the instance, not the global. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/settings.py | 24 ++++++++++++------------ tests/test_settings.py | 10 ++++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 tests/test_settings.py diff --git a/app/settings.py b/app/settings.py index fb2cfc5..ccf0586 100644 --- a/app/settings.py +++ b/app/settings.py @@ -37,18 +37,18 @@ def db_dsn_parsed(self) -> URL: @property def api_bootstrapper_config(self) -> LitestarConfig: return LitestarConfig( - service_name=settings.service_name, - service_version=settings.service_version, - service_environment=settings.service_environment, - service_debug=settings.service_debug, - opentelemetry_endpoint=settings.opentelemetry_endpoint, - sentry_dsn=settings.sentry_dsn, - cors_allowed_origins=settings.cors_allowed_origins, - cors_allowed_methods=settings.cors_allowed_methods, - cors_allowed_headers=settings.cors_allowed_headers, - cors_exposed_headers=settings.cors_exposed_headers, - logging_buffer_capacity=settings.logging_buffer_capacity, - swagger_offline_docs=settings.swagger_offline_docs, + service_name=self.service_name, + service_version=self.service_version, + service_environment=self.service_environment, + service_debug=self.service_debug, + opentelemetry_endpoint=self.opentelemetry_endpoint, + sentry_dsn=self.sentry_dsn, + cors_allowed_origins=self.cors_allowed_origins, + cors_allowed_methods=self.cors_allowed_methods, + cors_allowed_headers=self.cors_allowed_headers, + cors_exposed_headers=self.cors_exposed_headers, + logging_buffer_capacity=self.logging_buffer_capacity, + swagger_offline_docs=self.swagger_offline_docs, ) diff --git a/tests/test_settings.py b/tests/test_settings.py new file mode 100644 index 0000000..48949de --- /dev/null +++ b/tests/test_settings.py @@ -0,0 +1,10 @@ +from app.settings import Settings + + +def test_api_bootstrapper_config_reads_instance_not_global() -> None: + custom = Settings(service_name="custom-service", service_version="9.9.9") + + config = custom.api_bootstrapper_config + + assert config.service_name == "custom-service" + assert config.service_version == "9.9.9"