Skip to main content

tempenv

pypi Build Status codecov Code Style

Manage environment variables in a temporary scope.

Some products use environment variables as a primary means to supply credentials. To ensure the lifetime of exposed credentials is short, wrap them in a TemporaryEnvironment so that they are automatically destroyed on scope exit.

You can:

  • Set or unset environment variables inside a with code block,
  • Get a warning if the code block modifies one of the environment variables,
  • Optionally bypass restoration of the original environment variable value if the code block modifies the environment variable.

Install

Install the latest version of tempenv:

pip install tempenv

Examples

Each of these examples can be found in the tests.

Set some environment variables temporarily: (see tests/example_set_test.py):

def test_set(self):
    user_before = os.environ.get("USER")
    with TemporaryEnvironment({"USER": "nobody", "OTHER": "foo"}):
        assert os.environ.get("USER") == "nobody"
        assert os.environ.get("OTHER") == "foo"
    assert os.environ.get("USER") == user_before

Changing the value to None will unset the environment variable during the code block (see tests/example_unset_test.py):

def test_unset(self):
    os.environ["DEBUG"] = "1"
    with TemporaryEnvironment({"DEBUG": None}):
        assert "DEBUG" not in os.environ
    assert "DEBUG" in os.environ

Changing a temporary environment variable during the scope will cause a warning (see tests/example_overwrite_test.py):

def test_overwritten_in_context(self):
    with self.assertWarnsRegex(EnvironmentVariableChangedWarning, "FOO"):
        with TemporaryEnvironment({"FOO": "BAR"}):
            os.environ["FOO"] = "SAM"

If you set the optional argument restore_if_changed=False then a change during the scope of the TemporaryEnvironment will not issue a warning and will not restore to the original value (see tests/example_ignore_test.py):

def test_ignored_overwrite_in_context(self):
    os.environ["FOO"] = "BAR"
    with TemporaryEnvironment({"FOO": "SAM"}, restore_if_changed=False):
        os.environ["FOO"] = "DEAN"
    assert os.environ["FOO"] == "DEAN"

You can use TemporaryEnvironment in a unittest scope as follows (see tests/example_unittest_test.py):

@TemporaryEnvironment({"USER": "Crowley"})
def test_check(self):
    assert os.environ.get("USER") == "Crowley"

License

Released under the Apache Software License, Version 2.0 (see LICENSE):

   Copyright (C) 2019 - 2022 James E. King III (@jeking3) <jking@apache.org>

Bugs

Please report any bugs that you find on GitHub. Or, even better, fork the repository on GitHub and create a pull request (PR). We welcome all changes, big or small, and we will help you make the PR if you are new to git (just ask on the issue and/or see CONTRIBUTING.rst).

Release files for tempenv 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tempenv 2.1.0
File Size Uploaded
tempenv-2.1.0.tar.gz 10.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tempenv 2.1.0
File Interpreter ABI Platform
tempenv-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.9 kB

Release files / tempenv-2.1.0.tar.gz

Download URL tempenv-2.1.0.tar.gz
Size 10.4 kB
Tags Source
SHA-256 checksum
How to use checksums
45439419d9ff63a338af323f01d69fa20627bab94f37605ef7f47b7bc7f17b96
BLAKE2b-256 checksum
How to use checksums
7aafac55e665dafa99311d1397b1a28c0ce289c987e3afbbd24b7a18a3084bbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.21

Release files / tempenv-2.1.0-py3-none-any.whl

Download URL tempenv-2.1.0-py3-none-any.whl
Size 9.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eb19bec4f516e551cd0ce33b1d69993261986cfd503d09a4f2201560f9c31a4e
BLAKE2b-256 checksum
How to use checksums
d08141ae0ee580b5436f9e9c39c537aed7cf37fc47f5fd07fe574af254235259
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.21

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page