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.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4976d10037ba1bc06fd574e2e37da0d73beb145886331752558ce958df2a480a |
|
MD5 | c37b266a4c2518ad47a9747c47bef107 |
|
BLAKE2b-256 | f4e89797ed3d8f83f6fe792dba994169134210f93fd9b110f3e128be1deaac33 |
Hashes for pydantic_settings_file_envar-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c50e811ff4b69254a3cdb5ce987589b2d97d576c7170c81747d10f93ee24459b |
|
MD5 | eeb3358cf84335e72fcff8e5becf280c |
|
BLAKE2b-256 | e80927cc10eed43c15d52c09453e8d19ff97019037481f132974aaea6f44c5dc |