Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydantic_settings_file_envar-0.1.0.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file pydantic_settings_file_envar-0.1.0.tar.gz.

File metadata

File hashes

Hashes for pydantic_settings_file_envar-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4976d10037ba1bc06fd574e2e37da0d73beb145886331752558ce958df2a480a
MD5 c37b266a4c2518ad47a9747c47bef107
BLAKE2b-256 f4e89797ed3d8f83f6fe792dba994169134210f93fd9b110f3e128be1deaac33

See more details on using hashes here.

File details

Details for the file pydantic_settings_file_envar-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pydantic_settings_file_envar-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c50e811ff4b69254a3cdb5ce987589b2d97d576c7170c81747d10f93ee24459b
MD5 eeb3358cf84335e72fcff8e5becf280c
BLAKE2b-256 e80927cc10eed43c15d52c09453e8d19ff97019037481f132974aaea6f44c5dc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page