A Pydantic SettingsSource for the _FILE suffix environment variable convention
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.0a0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 937c94cf96564c33c11e6e64c1c893689ac09eba44bde8daa6727bd39d9879cf |
|
MD5 | f3c0001c570bedcb0813c37ca19e4e51 |
|
BLAKE2b-256 | 96907b0521bc87ece7263382a3984b335553cf996fdf22f3200a6295f40af3e4 |
Hashes for pydantic_settings_file_envar-0.1.0a0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6111606dcdec12207b5d14a0c9fa318201cf761b93716109b8d55ceb47a399c3 |
|
MD5 | 62afa132c4f014750a989c12ac7054ad |
|
BLAKE2b-256 | 8063e2e27972abc86fac3799c801e87431ce35ef9a78f1bd0d155d86dab78709 |