refactor: read settings directly instead of getattr with a second default

About 85 call sites read a setting as getattr(settings, "NAME", fallback),
each carrying its own copy of the default. Every one of those names is a
field with a default on the model, so the fallback could never apply to
the real settings object; it only masked drift. Two had drifted:

- OPENAI_PROMPT_CACHE_KEY defaults to True on the model but the reader
  fell back to False, and two test stubs relied on that.
- SharePoint's MICROSOFT_AUTHORITY fallback to
  https://login.microsoftonline.com/<tenant> never fired, because the
  attribute always exists (as None), so MSAL got authority=None. The
  connector now derives the tenant authority when the setting is unset,
  as its test always assumed.

Four places read EMBEDDINGS_KEY straight from os.environ, skipping the
"None"/"" normalisation the model applies; they read the setting now.
Test stubs that replaced a module's settings with a SimpleNamespace list
every setting the code under test reads.
This commit is contained in:
arc53-machine committed 2026-09-17 11:14:34 +01:00
1 parent d70644743b
commit f882ef49a7
46 files changed
+111 -113

No files matched your search

+1 -1
View File
@@ -277,7 +277,7 @@ def _delegation_enabled() -> bool:
with a ``MagicMock``, whose every attribute is a truthy object, and
``bool()`` on that would silently route them through the broker.
"""
return getattr(settings, "EMBEDDINGS_DELEGATE_TO_WORKER", False) is True
return settings.EMBEDDINGS_DELEGATE_TO_WORKER is True
def get_embeddings(
+2 -2
View File
@@ -173,8 +173,8 @@ class DelegatedEmbeddings:
the full timeout at once -- at the shipped 60s and 96 WSGI threads, an
API that serves nothing at all, health checks included.
"""
queue = getattr(settings, "EMBEDDINGS_QUEUE", "embeddings")
timeout = getattr(settings, "EMBEDDINGS_DELEGATE_TIMEOUT", 60)
queue = settings.EMBEDDINGS_QUEUE
timeout = settings.EMBEDDINGS_DELEGATE_TIMEOUT
remaining = self._cooldown_remaining()
if remaining > 0:
+5 -5
View File
@@ -188,8 +188,8 @@ def _describe_from_repo(repo: str) -> Optional[EmbeddingModel]:
def _apply_overrides(spec: EmbeddingModel) -> EmbeddingModel:
"""Let ``EMBEDDINGS_POOLING``/``EMBEDDINGS_NORMALIZE`` win over any source."""
pooling = getattr(settings, "EMBEDDINGS_POOLING", None)
normalize = getattr(settings, "EMBEDDINGS_NORMALIZE", None)
pooling = settings.EMBEDDINGS_POOLING
normalize = settings.EMBEDDINGS_NORMALIZE
changes = {}
if isinstance(pooling, str) and pooling.strip().lower() in ("cls", "mean"):
changes["pooling"] = pooling.strip().lower()
@@ -289,10 +289,10 @@ class EmbeddingsWrapper:
try:
_register(self.spec)
init_kwargs = {"model_name": self.spec.repo}
threads = getattr(settings, "EMBEDDINGS_THREADS", None)
threads = settings.EMBEDDINGS_THREADS
if isinstance(threads, int) and threads > 0:
init_kwargs["threads"] = threads
cache_dir = getattr(settings, "EMBEDDINGS_CACHE_DIR", None)
cache_dir = settings.EMBEDDINGS_CACHE_DIR
if cache_dir:
init_kwargs["cache_dir"] = cache_dir
self.model = TextEmbedding(**init_kwargs)
@@ -331,7 +331,7 @@ class EmbeddingsWrapper:
if not documents:
return []
batch_size: Optional[int] = None
raw = getattr(settings, "EMBEDDINGS_MODEL_BATCH_SIZE", None)
raw = settings.EMBEDDINGS_MODEL_BATCH_SIZE
if isinstance(raw, int) and not isinstance(raw, bool) and raw > 0:
batch_size = raw
+1 -1
View File
@@ -59,7 +59,7 @@ def resolve_pool_max_size() -> int:
"""
from docsgpt.core.settings import settings
value = getattr(settings, "PGVECTOR_POOL_MAX_SIZE", DEFAULT_POOL_MAX_SIZE)
value = settings.PGVECTOR_POOL_MAX_SIZE
if isinstance(value, int) and not isinstance(value, bool) and value >= 0:
return value
return DEFAULT_POOL_MAX_SIZE
+2 -2
View File
@@ -54,9 +54,9 @@ class PGVectorStore(BaseVectorStore):
# Use provided connection string or fall back to settings.
# If PGVECTOR_CONNECTION_STRING is not set but POSTGRES_URI is,
# reuse the same cluster — normalize from SQLAlchemy dialect to libpq form.
self._connection_string = connection_string or getattr(settings, 'PGVECTOR_CONNECTION_STRING', None)
self._connection_string = connection_string or settings.PGVECTOR_CONNECTION_STRING
if not self._connection_string and getattr(settings, 'POSTGRES_URI', None):
if not self._connection_string and settings.POSTGRES_URI:
from docsgpt.core.db_uri import normalize_pgvector_connection_string
self._connection_string = normalize_pgvector_connection_string(settings.POSTGRES_URI)