Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Adds a proper interpolation mechanism that can substitute variables in the middle of values of other variables.
The current "proxy" mechanism, where a variable is substituted when set to a name of another variable prefixed with a dollar sign (
VAR_A=$VAR_B
) is retained, and used by default. The interpolation mechanism has to be explicitly enabled by settingEnv.interpolation
toTrue
. This is done to ensure backward compatibility with all previous versions, except forv0.11.0
andv0.11.1
that have been yanked from PyPI.This is meant to be a properly implemented "variable expansion" mechanism that can be toggled on and off, as was intended in #468 and #419.
It does not re-introduce issues that caused #485 and #490.
In addition to the instance-wide
Env.interpolation
setting, each method that retrieves a value from the environment got optional parameterinterpolate
that can enable or disable interpolation independently from theEnv.interpolation
. Wheninterpolate
parameter is not passed as an argument,Env.interpolation
is used. This will let users handle special cases, where they need to selectively enable or disable the new interpolation mechanism.When a variable referenced in a value of another variable is not set, an
ImproperlyConfigured
exception is raised. It can be disabled (missing variables will be ignored) by settingEnv.raise_on_missing
toFalse
. Could not figure out a better name for now. If you have an idea - let me know.When a variable references itself in its value, an
ImproperlyConfigured
exception is raised.Variables prefixed with
\$
instead of$
are ignored.Every interpolated value is cached (up to 128 recently used variables).