Skip to content

Commit bbd623c

Browse files
authored
459 Add default value for environment variable for yaml and ini config files (#461)
* Add tests for partial yaml interpolation * Add tests for partial ini interpolation * Add yaml config env defaults parsing * Implement default interpolation for ini files * Add tests for ini files env interpolation * Update docs * Update docs * Update config docs keywords
1 parent 585c717 commit bbd623c

File tree

5 files changed

+9224
-8591
lines changed

5 files changed

+9224
-8591
lines changed

docs/main/changelog.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ that were made in every particular version.
77
From version 0.7.6 *Dependency Injector* framework strictly
88
follows `Semantic versioning`_
99

10+
Development version
11+
------
12+
- Add support of default value for environment variable in INI and YAML
13+
configuration files with ``${ENV_NAME:default}`` format.
14+
See issue `#459 <https://github.com/ets-labs/python-dependency-injector/issues/459>`_.
15+
Thanks to `Maksym Shemet @hbmshemet <https://github.com/hbmshemet>`_ for suggesting the feature.
16+
1017
4.32.3
1118
------
1219
- This fix a typo in ``di_in_python.rst`` doc.

docs/providers/configuration.rst

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Configuration provider
55

66
.. meta::
77
:keywords: Python,DI,Dependency injection,IoC,Inversion of Control,Configuration,Injection,
8-
Option,Ini,Json,Yaml,Pydantic,Dict,Environment Variable,Load,Read,Get
8+
Option,Ini,Json,Yaml,Pydantic,Dict,Environment Variable,Default,Load,Read,Get
99
:description: Configuration provides configuration options to the other providers. This page
1010
demonstrates how to use Configuration provider to inject the dependencies, load
1111
a configuration from an ini or yaml file, a dictionary, an environment variable,
@@ -43,8 +43,18 @@ where ``examples/providers/configuration/config.ini`` is:
4343
:language: ini
4444

4545
:py:meth:`Configuration.from_ini` method supports environment variables interpolation. Use
46-
``${ENV_NAME}`` format in the configuration file to substitute value of the environment
47-
variable ``ENV_NAME``.
46+
``${ENV_NAME}`` format in the configuration file to substitute value from ``ENV_NAME`` environment
47+
variable.
48+
49+
You can also specify a default value using ``${ENV_NAME:default}`` format. If environment
50+
variable ``ENV_NAME`` is undefined, configuration provider will substitute value ``default``.
51+
52+
.. code-block:: ini
53+
54+
[section]
55+
option1 = {$ENV_VAR}
56+
option2 = {$ENV_VAR}/path
57+
option3 = {$ENV_VAR:default}
4858
4959
Loading from a YAML file
5060
------------------------
@@ -62,12 +72,22 @@ where ``examples/providers/configuration/config.yml`` is:
6272
.. literalinclude:: ../../examples/providers/configuration/config.yml
6373
:language: ini
6474

65-
:py:meth:`Configuration.from_yaml` method uses custom version of ``yaml.SafeLoader``.
75+
:py:meth:`Configuration.from_yaml` method supports environment variables interpolation. Use
76+
``${ENV_NAME}`` format in the configuration file to substitute value from ``ENV_NAME`` environment
77+
variable.
6678

67-
The loader supports environment variables interpolation. Use ``${ENV_NAME}`` format
68-
in the configuration file to substitute value of the environment variable ``ENV_NAME``.
79+
You can also specify a default value using ``${ENV_NAME:default}`` format. If environment
80+
variable ``ENV_NAME`` is undefined, configuration provider will substitute value ``default``.
6981

70-
You can also specify a YAML loader as an argument:
82+
.. code-block:: ini
83+
84+
section:
85+
option1: {$ENV_VAR}
86+
option2: {$ENV_VAR}/path
87+
option3: {$ENV_VAR:default}
88+
89+
:py:meth:`Configuration.from_yaml` method uses custom version of ``yaml.SafeLoader``.
90+
To use another loader use ``loader`` argument:
7191

7292
.. code-block:: python
7393

0 commit comments

Comments
 (0)