Configuration providers ----------------------- .. currentmodule:: dependency_injector.providers :py:class:`Configuration` provider provides configuration options to the other providers. .. literalinclude:: ../../examples/providers/configuration/configuration.py :language: python :emphasize-lines: 4,9-10 :lines: 4-14 :linenos: It implements "use first, define later" principle. Loading from ``ini`` file ~~~~~~~~~~~~~~~~~~~~~~~~~ :py:class:`Configuration` provider can load configuration from ``ini`` file using :py:meth:`Configuration.from_ini`: .. literalinclude:: ../../examples/providers/configuration/configuration_ini.py :language: python :lines: 3-5,6- :emphasize-lines: 6 :linenos: where ``examples/providers/configuration/config.ini`` is: .. literalinclude:: ../../examples/providers/configuration/config.ini :language: ini :linenos: :py:meth:`Configuration.from_ini` supports environment variables interpolation. Use ``${ENV_NAME}`` format in the configuration file to substitute value of environment variable ``ENV_NAME``. Loading from ``yaml`` file ~~~~~~~~~~~~~~~~~~~~~~~~~~ :py:class:`Configuration` provider can load configuration from ``yaml`` file using :py:meth:`Configuration.from_yaml`: .. literalinclude:: ../../examples/providers/configuration/configuration_yaml.py :language: python :lines: 3-5,6- :emphasize-lines: 6 :linenos: where ``examples/providers/configuration/config.yml`` is: .. literalinclude:: ../../examples/providers/configuration/config.yml :language: ini :linenos: :py:meth:`Configuration.from_yaml` supports environment variables interpolation. Use ``${ENV_NAME}`` format in the configuration file to substitute value of environment variable ``ENV_NAME``. .. note:: Loading configuration from yaml requires ``PyYAML`` package. You can install `Dependency Injector` with extras ``pip install dependency-injector[yaml]`` or install ``PyYAML`` separately ``pip install pyyaml``. Loading from ``dict`` ~~~~~~~~~~~~~~~~~~~~~ :py:class:`Configuration` provider can load configuration from Python ``dict`` using :py:meth:`Configuration.from_dict`: .. literalinclude:: ../../examples/providers/configuration/configuration_dict.py :language: python :lines: 3-5,6- :emphasize-lines: 6-13 :linenos: Loading from environment variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :py:class:`Configuration` provider can load configuration from environment variable using :py:meth:`Configuration.from_env`: .. literalinclude:: ../../examples/providers/configuration/configuration_env.py :language: python :lines: 5-7,13-21 :emphasize-lines: 6-8 :linenos: Loading from multiple sources ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :py:class:`Configuration` provider can load configuration from multiple sources. Loaded configuration is merged recursively over existing configuration. .. literalinclude:: ../../examples/providers/configuration/configuration_multiple.py :language: python :lines: 3-5,6-14 :emphasize-lines: 6-7 :linenos: where ``examples/providers/configuration/config.local.yml`` is: .. literalinclude:: ../../examples/providers/configuration/config.local.yml :language: ini :linenos: .. disqus::