|
1 | 1 | from pathlib import Path |
2 | 2 |
|
3 | 3 | from azure.identity import DefaultAzureCredential |
4 | | -from pydantic import SecretStr |
5 | | -from pydantic.alias_generators import to_pascal |
| 4 | +from pydantic import Field, SecretStr |
6 | 5 | from pydantic_settings import ( |
7 | 6 | AzureKeyVaultSettingsSource, |
8 | 7 | BaseSettings, |
9 | | - DotEnvSettingsSource, |
10 | | - EnvSettingsSource, |
11 | 8 | PydanticBaseSettingsSource, |
12 | 9 | SettingsConfigDict, |
13 | 10 | ) |
14 | 11 |
|
15 | 12 | from python_archetype.common.application_environment import ApplicationEnvironment |
16 | 13 |
|
| 14 | +current_path = Path(__file__).parent.resolve() |
| 15 | + |
17 | 16 |
|
18 | 17 | class ApplicationSettings(BaseSettings): |
19 | | - model_config = SettingsConfigDict(alias_generator=to_pascal, extra="ignore") |
| 18 | + model_config = SettingsConfigDict( |
| 19 | + extra="ignore", |
| 20 | + env_nested_delimiter="__", |
| 21 | + env_file=( |
| 22 | + str(current_path / ".env"), |
| 23 | + str(current_path / f".env.{ApplicationEnvironment.get_current()}"), |
| 24 | + ), |
| 25 | + ) |
20 | 26 |
|
21 | 27 | logging_level: str |
22 | 28 | cosmos_db_no_sql_url: str |
23 | | - cosmos_db_no_sql_key: SecretStr |
| 29 | + cosmos_db_no_sql_key: SecretStr = Field(alias="CosmosDbNoSqlKey") |
24 | 30 | cosmos_db_no_sql_database: str |
25 | 31 |
|
26 | 32 | @classmethod |
27 | 33 | def settings_customise_sources( |
28 | 34 | cls, |
29 | 35 | settings_cls: type[BaseSettings], |
30 | 36 | init_settings: PydanticBaseSettingsSource, # noqa: ARG003 |
31 | | - env_settings: PydanticBaseSettingsSource, # noqa: ARG003 |
32 | | - dotenv_settings: PydanticBaseSettingsSource, # noqa: ARG003 |
| 37 | + env_settings: PydanticBaseSettingsSource, |
| 38 | + dotenv_settings: PydanticBaseSettingsSource, |
33 | 39 | file_secret_settings: PydanticBaseSettingsSource, # noqa: ARG003 |
34 | 40 | ) -> tuple[PydanticBaseSettingsSource, ...]: |
35 | | - env = EnvSettingsSource( |
36 | | - settings_cls, |
37 | | - env_nested_delimiter="__", |
38 | | - ) |
39 | | - current_path = Path(__file__).parent.resolve() |
40 | | - dotenv = DotEnvSettingsSource( |
41 | | - settings_cls, |
42 | | - env_file=[ |
43 | | - str(current_path / ".env"), |
44 | | - str(current_path / f".env.{ApplicationEnvironment.get_current()}"), |
45 | | - ], |
46 | | - env_nested_delimiter=":", |
47 | | - case_sensitive=True, |
48 | | - ) |
49 | | - settings = (env, dotenv) |
| 41 | + settings = (env_settings, dotenv_settings) |
50 | 42 |
|
51 | 43 | if ApplicationEnvironment.get_current() != ApplicationEnvironment.LOCAL: |
52 | 44 | azure_key_vault = AzureKeyVaultSettingsSource( |
53 | 45 | settings_cls, |
54 | | - dotenv()["AzureKeyVaultUrl"], |
| 46 | + dotenv_settings()["azure_key_vault_url"], |
55 | 47 | DefaultAzureCredential(), |
56 | 48 | ) |
57 | | - settings += (azure_key_vault,) |
| 49 | + settings = (azure_key_vault, *settings) |
58 | 50 |
|
59 | 51 | return settings |
0 commit comments