|
23 | 23 |
|
24 | 24 | DotenvType = Union[Path, List[Path], Tuple[Path, ...]]
|
25 | 25 |
|
| 26 | +# This is used as default value for `_env_file` in the `BaseSettings` class and |
| 27 | +# `env_file` in `DotEnvSettingsSource` so the default can be distinguished from `None`. |
| 28 | +# See the docstring of `BaseSettings` for more details. |
| 29 | +ENV_FILE_SENTINEL: DotenvType = Path('') |
| 30 | + |
26 | 31 |
|
27 | 32 | class SettingsError(ValueError):
|
28 | 33 | pass
|
@@ -252,12 +257,12 @@ class SecretsSettingsSource(PydanticBaseEnvSettingsSource):
|
252 | 257 | def __init__(
|
253 | 258 | self,
|
254 | 259 | settings_cls: type[BaseSettings],
|
255 |
| - secrets_dir: str | Path | None, |
| 260 | + secrets_dir: str | Path | None = None, |
256 | 261 | case_sensitive: bool | None = None,
|
257 | 262 | env_prefix: str | None = None,
|
258 | 263 | ) -> None:
|
259 | 264 | super().__init__(settings_cls, case_sensitive, env_prefix)
|
260 |
| - self.secrets_dir = secrets_dir |
| 265 | + self.secrets_dir = secrets_dir if secrets_dir is not None else self.config.get('secrets_dir') |
261 | 266 |
|
262 | 267 | def __call__(self) -> dict[str, Any]:
|
263 | 268 | """
|
@@ -345,7 +350,9 @@ def __init__(
|
345 | 350 | env_nested_delimiter: str | None = None,
|
346 | 351 | ) -> None:
|
347 | 352 | super().__init__(settings_cls, case_sensitive, env_prefix)
|
348 |
| - self.env_nested_delimiter = env_nested_delimiter |
| 353 | + self.env_nested_delimiter = ( |
| 354 | + env_nested_delimiter if env_nested_delimiter is not None else self.config.get('env_nested_delimiter') |
| 355 | + ) |
349 | 356 | self.env_prefix_len = len(self.env_prefix)
|
350 | 357 |
|
351 | 358 | self.env_vars = self._load_env_vars()
|
@@ -528,14 +535,16 @@ class DotEnvSettingsSource(EnvSettingsSource):
|
528 | 535 | def __init__(
|
529 | 536 | self,
|
530 | 537 | settings_cls: type[BaseSettings],
|
531 |
| - env_file: DotenvType | None, |
532 |
| - env_file_encoding: str | None, |
| 538 | + env_file: DotenvType | None = ENV_FILE_SENTINEL, |
| 539 | + env_file_encoding: str | None = None, |
533 | 540 | case_sensitive: bool | None = None,
|
534 | 541 | env_prefix: str | None = None,
|
535 | 542 | env_nested_delimiter: str | None = None,
|
536 | 543 | ) -> None:
|
537 |
| - self.env_file = env_file |
538 |
| - self.env_file_encoding = env_file_encoding |
| 544 | + self.env_file = env_file if env_file != ENV_FILE_SENTINEL else settings_cls.model_config.get('env_file') |
| 545 | + self.env_file_encoding = ( |
| 546 | + env_file_encoding if env_file_encoding is not None else settings_cls.model_config.get('env_file_encoding') |
| 547 | + ) |
539 | 548 | super().__init__(settings_cls, case_sensitive, env_prefix, env_nested_delimiter)
|
540 | 549 |
|
541 | 550 | def _load_env_vars(self) -> Mapping[str, str | None]:
|
|
0 commit comments