Skip to content

Commit f1e2ad8

Browse files
committed
chore: release v3.1.0
1 parent b849728 commit f1e2ad8

5 files changed

Lines changed: 51 additions & 22 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
## [3.1.0] - 2026-06-10
10+
11+
### Added
12+
13+
- Multi mode now automatically falls back to `DEFAULT_KEY` (`"default"`) when no active or default configuration is explicitly set.
14+
915
## [3.0.0] - 2026-06-10
1016

1117
### Breaking Changes

pydantic_settings_manager/manager.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -143,26 +143,34 @@ def settings(self) -> T:
143143

144144
target_key = self._active_key if self._active_key is not None else self._default_key
145145

146-
if target_key is not None:
147-
# Resolve alias if target_key is an alias
148-
resolved_key = self._resolve_alias(target_key)
149-
150-
if resolved_key not in self._cache:
151-
# Show both original and resolved key in error message if different
152-
if target_key != resolved_key:
153-
raise ValueError(
154-
f"Key '{target_key}' (resolved to '{resolved_key}') "
155-
f"does not exist in settings map"
156-
)
157-
else:
158-
raise ValueError(f"Key '{target_key}' does not exist in settings map")
159-
160-
return self._cache[resolved_key]
146+
if target_key is None:
147+
target_key = DEFAULT_KEY
161148

162-
raise ValueError(
163-
"No active or default configuration is set. Set `manager.active_key`, "
164-
"add `default` to user_config, or call `get_settings(<name>)`."
165-
)
149+
# Resolve alias if target_key is an alias
150+
resolved_key = self._resolve_alias(target_key)
151+
152+
if resolved_key not in self._cache:
153+
if (
154+
self._active_key is None
155+
and self._default_key is None
156+
and target_key == DEFAULT_KEY
157+
):
158+
raise ValueError(
159+
"No active or default configuration is set, "
160+
f"and fallback key '{DEFAULT_KEY}' does not exist in settings map. "
161+
"Set `manager.active_key`, add `default` to user_config, "
162+
"or use 'default' as a config key."
163+
)
164+
# Show both original and resolved key in error message if different
165+
if target_key != resolved_key:
166+
raise ValueError(
167+
f"Key '{target_key}' (resolved to '{resolved_key}') "
168+
f"does not exist in settings map"
169+
)
170+
else:
171+
raise ValueError(f"Key '{target_key}' does not exist in settings map")
172+
173+
return self._cache[resolved_key]
166174

167175
@property
168176
def user_config(self) -> dict[str, Any]:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "pydantic-settings-manager"
3-
version = "3.0.0"
3+
version = "3.1.0"
44
description = "A library for managing Pydantic settings objects"
55
authors = [
66
{ name = "kiarina", email = "kiarinadawa@gmail.com" }

tests/test_manager.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,25 @@ def test_no_default_and_no_active_key_raises_on_settings() -> None:
197197
"production": {"debug": False},
198198
},
199199
}
200-
with pytest.raises(ValueError, match="No active or default configuration is set"):
200+
with pytest.raises(
201+
ValueError,
202+
match="No active or default configuration is set, and fallback key 'default'",
203+
):
201204
_ = manager.settings
202205

203206

207+
def test_no_default_falls_back_to_default_key() -> None:
208+
manager = SettingsManager(ExampleSettings, multi=True)
209+
manager.user_config = {
210+
"configs": {
211+
"default": {"debug": True},
212+
"production": {"debug": False},
213+
},
214+
}
215+
# Should fallback to DEFAULT_KEY ("default")
216+
assert manager.settings.debug is True
217+
218+
204219
# Multi Mode Tests
205220

206221

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)