Load pydantic settings from files named by _FILE suffix environment variables
Project description
pydantic-settings-file-envar
Support for loading pydantic-settings from files, using the _FILE
environment variable suffix pattern commonly used in container images,
especially official Docker images.
If you have a setting called foo
, by default pydantic-settings
will load it
from an environment variable FOO
. With pydantic-settings-file-envar
, if an
environment variable FOO_FILE=/a/b/foo
is set, the secret's value will be
loaded from the file at /a/b/foo
.
Note that pydantic-settings has built-in support for loading secrets from files, so that may be all you need. It's different from the
_FILE
envar pattern in that it expects a specific directory to be specified, which contains appropriately-named secret files.
Install
$ pip install pydantic-settings-file-envar
Usage
To use _FILE
envar settings, override the settings_customise_sources()
class
method of your settings class to include the FileSuffixEnvSettingsSource
this
package provides:
from pydantic_settings_file_envar import FileSuffixEnvSettingsSource
# ...
class ExampleSettings(BaseSettings):
threshold: int
launch_code: str
@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, ...]:
# Adding FileSuffixEnvSettingsSource enables _FILE envars
return (init_settings, env_settings, FileSuffixEnvSettingsSource(settings_cls))
If you place it after the default env_settings
source, _FILE
environment
variable will only be used if a regular environment variable is not set. The
pydantic-settings docs have more details on configuring settings sources.
Example program & Docker image
The ./example dir contains an example command-line program that
loads settings using regular or _FILE
envars.
Try it like this:
$ cd example
$ poetry install --with local
$ poetry shell
$ echo -n secret-from-file > /tmp/secret
$ THRESHOLD=9000 LAUNCH_CODE_FILE=/tmp/secret file-envar-example
Loaded settings: threshold=9000 launch_code='secret-from-file'
Or the Docker image:
$ # build the example image
$ docker buildx bake example
[+] Building 5.2s (12/12) FINISHED ...
=> => naming to docker.io/library/file-envar-example
$ echo -n secret-from-file > /tmp/secret
$ docker container run --rm -v /tmp:/secrets -e THRESHOLD=9000 -e LAUNCH_CODE_FILE=/secrets/secret file-envar-example
Loaded settings: threshold=9000 launch_code='secret-from-file'
Developing
See docs/dev.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pydantic_settings_file_envar-0.1.0a1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6614f0bc11d703ec4e906c9525fff0f4c22cba2dbbe02c630a062a3cfc869b0b |
|
MD5 | f97f51d5bee7516742c9ea628f3c39c3 |
|
BLAKE2b-256 | 4f48d99503b1bb933381d8f490152c7eb99c1ae97480172faa67dd4240a4d372 |
Hashes for pydantic_settings_file_envar-0.1.0a1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d579608b0ff1ebf954a9502dd24b529f299a356b0e10a642ae63ce238014750 |
|
MD5 | ff57019abbbeea27639d761c310569af |
|
BLAKE2b-256 | 45af07e77baf33a2d4a6a3ea0ad3ca4c26e0471db04aa7beae9a1d2630921e7c |