Skip to content

Commit 87cc181

Browse files
authored
support endpoint_url in AWSSecretsManagerSettingsSource
During testing and development phases, I use a `motoserver` docker container to interact with my AWS resources of my application locally. I was able to connect with `motoserver` by using the following code: ```python @classmethod def settings_customise_sources( cls, settings_cls: type[BaseSettings], init_settings: PydanticBaseSettingsSource, env_settings: PydanticBaseSettingsSource, dotenv_settings: PydanticBaseSettingsSource, file_secret_settings: PydanticBaseSettingsSource, ) -> tuple[PydanticBaseSettingsSource, ...]: aws_secrets_manager_settings = AWSSecretsManagerSettingsSource( settings_cls, secret_id=os.getenv('APP_SECRETS_MANAGER_SECRET'), region_name=os.getenv('AWS_DEFAULT_REGION'), endpoint_url=os.getenv('AWS_SECRETS_MANAGER_ENDPOINT'), env_prefix='', env_nested_delimiter='__', case_sensitive=True, ) return ( init_settings, env_settings, dotenv_settings, file_secret_settings, aws_secrets_manager_settings, ) ``` My proposal keeps the original behavior in the `AWSSecretsManagerSettingsSource` class and add a more complete configuration to interact with the AWS Secrets Manager provider.
1 parent 1967d6f commit 87cc181

File tree

1 file changed

+4
-2
lines changed
  • pydantic_settings/sources/providers

1 file changed

+4
-2
lines changed

pydantic_settings/sources/providers/aws.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,21 @@ def __init__(
3737
settings_cls: type[BaseSettings],
3838
secret_id: str,
3939
region_name: str | None = None,
40+
endpoint_url: str | None = None,
4041
case_sensitive: bool | None = True,
4142
env_prefix: str | None = None,
43+
env_nested_delimiter: str | None = '--',
4244
env_parse_none_str: str | None = None,
4345
env_parse_enums: bool | None = None,
4446
) -> None:
4547
import_aws_secrets_manager()
46-
self._secretsmanager_client = boto3_client('secretsmanager', region_name=region_name) # type: ignore
48+
self._secretsmanager_client = boto3_client('secretsmanager', region_name=region_name, endpoint_url=endpoint_url) # type: ignore
4749
self._secret_id = secret_id
4850
super().__init__(
4951
settings_cls,
5052
case_sensitive=case_sensitive,
5153
env_prefix=env_prefix,
52-
env_nested_delimiter='--',
54+
env_nested_delimiter=env_nested_delimiter,
5355
env_ignore_empty=False,
5456
env_parse_none_str=env_parse_none_str,
5557
env_parse_enums=env_parse_enums,

0 commit comments

Comments
 (0)