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
File details
Details for the file pydantic_settings_file_envar-0.1.0.tar.gz
.
File metadata
- Download URL: pydantic_settings_file_envar-0.1.0.tar.gz
- Upload date:
- Size: 3.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4976d10037ba1bc06fd574e2e37da0d73beb145886331752558ce958df2a480a |
|
MD5 | c37b266a4c2518ad47a9747c47bef107 |
|
BLAKE2b-256 | f4e89797ed3d8f83f6fe792dba994169134210f93fd9b110f3e128be1deaac33 |
File details
Details for the file pydantic_settings_file_envar-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: pydantic_settings_file_envar-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/4.0.2 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c50e811ff4b69254a3cdb5ce987589b2d97d576c7170c81747d10f93ee24459b |
|
MD5 | eeb3358cf84335e72fcff8e5becf280c |
|
BLAKE2b-256 | e80927cc10eed43c15d52c09453e8d19ff97019037481f132974aaea6f44c5dc |