mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-06-08 07:33:16 +03:00
Update wording in introduction docs
This commit is contained in:
parent
9bc11a7828
commit
bf356ec565
39
README.rst
39
README.rst
|
@ -48,26 +48,26 @@ What is ``Dependency Injector``?
|
||||||
|
|
||||||
``Dependency Injector`` is a dependency injection framework for Python.
|
``Dependency Injector`` is a dependency injection framework for Python.
|
||||||
|
|
||||||
It helps implementing the dependency injection principle.
|
It helps implement the dependency injection principle.
|
||||||
|
|
||||||
Key features of the ``Dependency Injector``:
|
Key features of the ``Dependency Injector``:
|
||||||
|
|
||||||
- **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``,
|
- **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``,
|
||||||
``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency`` and ``Selector`` providers
|
``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency``, and ``Selector`` providers
|
||||||
that help assembling your objects.
|
that help assemble your objects.
|
||||||
See `Providers <https://python-dependency-injector.ets-labs.org/providers/index.html>`_.
|
See `Providers <https://python-dependency-injector.ets-labs.org/providers/index.html>`_.
|
||||||
- **Overriding**. Can override any provider by another provider on the fly. This helps in testing
|
- **Overriding**. Can override any provider by another provider on the fly. This helps in testing
|
||||||
and configuring dev / stage environment to replace API clients with stubs etc. See
|
and configuring dev/stage environment to replace API clients with stubs etc. See
|
||||||
`Provider overriding <https://python-dependency-injector.ets-labs.org/providers/overriding.html>`_.
|
`Provider overriding <https://python-dependency-injector.ets-labs.org/providers/overriding.html>`_.
|
||||||
- **Configuration**. Reads configuration from ``yaml`` & ``ini`` files, ``pydantic`` settings,
|
- **Configuration**. Reads configuration from ``yaml`` & ``ini`` files, ``pydantic`` settings,
|
||||||
environment variables, and dictionaries.
|
environment variables, and dictionaries.
|
||||||
See `Configuration provider <https://python-dependency-injector.ets-labs.org/providers/configuration.html>`_.
|
See `Configuration provider <https://python-dependency-injector.ets-labs.org/providers/configuration.html>`_.
|
||||||
- **Containers**. Provides declarative and dynamic containers.
|
|
||||||
See `Containers <https://python-dependency-injector.ets-labs.org/containers/index.html>`_.
|
|
||||||
- **Resources**. Helps with initialization and configuring of logging, event loop, thread
|
- **Resources**. Helps with initialization and configuring of logging, event loop, thread
|
||||||
or process pool, etc. Can be used for per-function execution scope in tandem with wiring.
|
or process pool, etc. Can be used for per-function execution scope in tandem with wiring.
|
||||||
See `Resource provider <https://python-dependency-injector.ets-labs.org/providers/resource.html>`_.
|
See `Resource provider <https://python-dependency-injector.ets-labs.org/providers/resource.html>`_.
|
||||||
- **Wiring**. Injects dependencies into functions and methods. Helps integrating with
|
- **Containers**. Provides declarative and dynamic containers.
|
||||||
|
See `Containers <https://python-dependency-injector.ets-labs.org/containers/index.html>`_.
|
||||||
|
- **Wiring**. Injects dependencies into functions and methods. Helps integrate with
|
||||||
other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc.
|
other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc.
|
||||||
See `Wiring <https://python-dependency-injector.ets-labs.org/wiring.html>`_.
|
See `Wiring <https://python-dependency-injector.ets-labs.org/wiring.html>`_.
|
||||||
- **Asynchronous**. Supports asynchronous injections.
|
- **Asynchronous**. Supports asynchronous injections.
|
||||||
|
@ -75,7 +75,7 @@ Key features of the ``Dependency Injector``:
|
||||||
- **Typing**. Provides typing stubs, ``mypy``-friendly.
|
- **Typing**. Provides typing stubs, ``mypy``-friendly.
|
||||||
See `Typing and mypy <https://python-dependency-injector.ets-labs.org/providers/typing_mypy.html>`_.
|
See `Typing and mypy <https://python-dependency-injector.ets-labs.org/providers/typing_mypy.html>`_.
|
||||||
- **Performance**. Fast. Written in ``Cython``.
|
- **Performance**. Fast. Written in ``Cython``.
|
||||||
- **Maturity**. Mature and production-ready. Well-tested, documented and supported.
|
- **Maturity**. Mature and production-ready. Well-tested, documented, and supported.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
@ -115,19 +115,18 @@ Key features of the ``Dependency Injector``:
|
||||||
with container.api_client.override(mock.Mock()):
|
with container.api_client.override(mock.Mock()):
|
||||||
main() # <-- overridden dependency is injected automatically
|
main() # <-- overridden dependency is injected automatically
|
||||||
|
|
||||||
When you call ``main()`` function the ``Service`` dependency is assembled and injected automatically.
|
When you call the ``main()`` function the ``Service`` dependency is assembled and injected automatically.
|
||||||
|
|
||||||
When doing a testing you call the ``container.api_client.override()`` to replace the real API
|
When you do testing, you call the ``container.api_client.override()`` method to replace the real API
|
||||||
client with a mock. When you call ``main()`` the mock is injected.
|
client with a mock. When you call ``main()``, the mock is injected.
|
||||||
|
|
||||||
You can override any provider with another provider.
|
You can override any provider with another provider.
|
||||||
|
|
||||||
It also helps you in configuring project for the different environments: replace an API client
|
It also helps you in a re-configuring project for different environments: replace an API client
|
||||||
with a stub on the dev or stage.
|
with a stub on the dev or stage.
|
||||||
|
|
||||||
With the ``Dependency Injector`` objects assembling is consolidated in the container.
|
With the ``Dependency Injector``, object assembling is consolidated in a container. Dependency injections are defined explicitly.
|
||||||
Dependency injections are defined explicitly.
|
This makes it easier to understand and change how an application works.
|
||||||
This makes easier to understand and change how application works.
|
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/wiki/ets-labs/python-dependency-injector/img/di-readme.svg
|
.. figure:: https://raw.githubusercontent.com/wiki/ets-labs/python-dependency-injector/img/di-readme.svg
|
||||||
:target: https://github.com/ets-labs/python-dependency-injector
|
:target: https://github.com/ets-labs/python-dependency-injector
|
||||||
|
@ -185,27 +184,27 @@ The framework stands on the `PEP20 (The Zen of Python) <https://www.python.org/d
|
||||||
|
|
||||||
You need to specify how to assemble and where to inject the dependencies explicitly.
|
You need to specify how to assemble and where to inject the dependencies explicitly.
|
||||||
|
|
||||||
The power of the framework is in a simplicity.
|
The power of the framework is in its simplicity.
|
||||||
``Dependency Injector`` is a simple tool for the powerful concept.
|
``Dependency Injector`` is a simple tool for the powerful concept.
|
||||||
|
|
||||||
Frequently asked questions
|
Frequently asked questions
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
What is the dependency injection?
|
What is dependency injection?
|
||||||
- dependency injection is a principle that decreases coupling and increases cohesion
|
- dependency injection is a principle that decreases coupling and increases cohesion
|
||||||
|
|
||||||
Why should I do the dependency injection?
|
Why should I do the dependency injection?
|
||||||
- your code becomes more flexible, testable, and clear 😎
|
- your code becomes more flexible, testable, and clear 😎
|
||||||
|
|
||||||
How do I start doing the dependency injection?
|
How do I start applying the dependency injection?
|
||||||
- you start writing the code following the dependency injection principle
|
- you start writing the code following the dependency injection principle
|
||||||
- you register all of your application components and their dependencies in the container
|
- you register all of your application components and their dependencies in the container
|
||||||
- when you need a component, you specify where to inject it or get it from the container
|
- when you need a component, you specify where to inject it or get it from the container
|
||||||
|
|
||||||
What price do I pay and what do I get?
|
What price do I pay and what do I get?
|
||||||
- you need to explicitly specify the dependencies
|
- you need to explicitly specify the dependencies
|
||||||
- it will be an extra work in the beginning
|
- it will be extra work in the beginning
|
||||||
- it will payoff as the project grows
|
- it will payoff as project grows
|
||||||
|
|
||||||
Have a question?
|
Have a question?
|
||||||
- Open a `Github Issue <https://github.com/ets-labs/python-dependency-injector/issues>`_
|
- Open a `Github Issue <https://github.com/ets-labs/python-dependency-injector/issues>`_
|
||||||
|
|
|
@ -65,10 +65,10 @@ It helps implementing the dependency injection principle.
|
||||||
Key features of the ``Dependency Injector``:
|
Key features of the ``Dependency Injector``:
|
||||||
|
|
||||||
- **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``,
|
- **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``,
|
||||||
``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency`` and ``Selector`` providers
|
``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency``, and ``Selector`` providers
|
||||||
that help assembling your objects. See :ref:`providers`.
|
that help assemble your objects. See :ref:`providers`.
|
||||||
- **Overriding**. Can override any provider by another provider on the fly. This helps in testing
|
- **Overriding**. Can override any provider by another provider on the fly. This helps in testing
|
||||||
and configuring dev / stage environment to replace API clients with stubs etc. See
|
and configuring dev/stage environment to replace API clients with stubs etc. See
|
||||||
:ref:`provider-overriding`.
|
:ref:`provider-overriding`.
|
||||||
- **Configuration**. Reads configuration from ``yaml`` & ``ini`` files, ``pydantic`` settings,
|
- **Configuration**. Reads configuration from ``yaml`` & ``ini`` files, ``pydantic`` settings,
|
||||||
environment variables, and dictionaries. See :ref:`configuration-provider`.
|
environment variables, and dictionaries. See :ref:`configuration-provider`.
|
||||||
|
@ -76,12 +76,12 @@ Key features of the ``Dependency Injector``:
|
||||||
or process pool, etc. Can be used for per-function execution scope in tandem with wiring.
|
or process pool, etc. Can be used for per-function execution scope in tandem with wiring.
|
||||||
See :ref:`resource-provider`.
|
See :ref:`resource-provider`.
|
||||||
- **Containers**. Provides declarative and dynamic containers. See :ref:`containers`.
|
- **Containers**. Provides declarative and dynamic containers. See :ref:`containers`.
|
||||||
- **Wiring**. Injects dependencies into functions and methods. Helps integrating with
|
- **Wiring**. Injects dependencies into functions and methods. Helps integrate with
|
||||||
other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See :ref:`wiring`.
|
other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See :ref:`wiring`.
|
||||||
- **Asynchronous**. Supports asynchronous injections. See :ref:`async-injections`.
|
- **Asynchronous**. Supports asynchronous injections. See :ref:`async-injections`.
|
||||||
- **Typing**. Provides typing stubs, ``mypy``-friendly. See :ref:`provider-typing`.
|
- **Typing**. Provides typing stubs, ``mypy``-friendly. See :ref:`provider-typing`.
|
||||||
- **Performance**. Fast. Written in ``Cython``.
|
- **Performance**. Fast. Written in ``Cython``.
|
||||||
- **Maturity**. Mature and production-ready. Well-tested, documented and supported.
|
- **Maturity**. Mature and production-ready. Well-tested, documented, and supported.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
@ -121,9 +121,9 @@ Key features of the ``Dependency Injector``:
|
||||||
with container.api_client.override(mock.Mock()):
|
with container.api_client.override(mock.Mock()):
|
||||||
main() # <-- overridden dependency is injected automatically
|
main() # <-- overridden dependency is injected automatically
|
||||||
|
|
||||||
With the ``Dependency Injector`` objects assembling is consolidated in the container.
|
With the ``Dependency Injector``, object assembling is consolidated in the container.
|
||||||
Dependency injections are defined explicitly.
|
Dependency injections are defined explicitly.
|
||||||
This makes easier to understand and change how application works.
|
This makes it easier to understand and change how the application works.
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/wiki/ets-labs/python-dependency-injector/img/di-readme.svg
|
.. figure:: https://raw.githubusercontent.com/wiki/ets-labs/python-dependency-injector/img/di-readme.svg
|
||||||
:target: https://github.com/ets-labs/python-dependency-injector
|
:target: https://github.com/ets-labs/python-dependency-injector
|
||||||
|
|
|
@ -7,8 +7,8 @@ Introduction
|
||||||
overview of the dependency injection, inversion of
|
overview of the dependency injection, inversion of
|
||||||
control and Dependency Injector framework.
|
control and Dependency Injector framework.
|
||||||
|
|
||||||
Current section of the documentation provides an overview of the
|
The current section of the documentation provides an overview of the
|
||||||
dependency injection, inversion of control and the ``Dependency Injector`` framework.
|
dependency injection, inversion of control, and the ``Dependency Injector`` framework.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
|
@ -2,7 +2,7 @@ Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
``Dependency Injector`` is available on `PyPI <https://pypi.org/project/dependency-injector/>`_.
|
``Dependency Injector`` is available on `PyPI <https://pypi.org/project/dependency-injector/>`_.
|
||||||
To install latest version you can use ``pip``:
|
To install the latest version you can use ``pip``:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ To install latest version you can use ``pip``:
|
||||||
|
|
||||||
Some modules of the ``Dependency Injector`` are implemented as C extensions.
|
Some modules of the ``Dependency Injector`` are implemented as C extensions.
|
||||||
``Dependency Injector`` is distributed as a pre-compiled wheels. Wheels are
|
``Dependency Injector`` is distributed as a pre-compiled wheels. Wheels are
|
||||||
available for all supported Python versions on Linux, Windows and MacOS.
|
available for all supported Python versions on Linux, Windows, and MacOS.
|
||||||
Linux distribution uses `manylinux <https://github.com/pypa/manylinux>`_.
|
Linux distribution uses `manylinux <https://github.com/pypa/manylinux>`_.
|
||||||
|
|
||||||
If there is no appropriate wheel for your environment (Python version and OS)
|
If there is no appropriate wheel for your environment (Python version and OS)
|
||||||
|
@ -23,20 +23,20 @@ To verify the installed version:
|
||||||
|
|
||||||
>>> import dependency_injector
|
>>> import dependency_injector
|
||||||
>>> dependency_injector.__version__
|
>>> dependency_injector.__version__
|
||||||
'4.37.0'
|
'4.39.0'
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
When add ``Dependency Injector`` to the ``requirements.txt`` don't forget to pin version
|
When adding ``Dependency Injector`` to ``pyproject.toml`` or ``requirements.txt``
|
||||||
to the current major:
|
don't forget to pin the version to the current major:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
dependency-injector>=4.0,<5.0
|
dependency-injector>=4.0,<5.0
|
||||||
|
|
||||||
*Next major version can be incompatible.*
|
*The next major version can be incompatible.*
|
||||||
|
|
||||||
All releases are available on `PyPI release history page <https://pypi.org/project/dependency-injector/#history>`_.
|
All releases are available on the `PyPI release history page <https://pypi.org/project/dependency-injector/#history>`_.
|
||||||
Each release has appropriate tag. The tags are available on
|
Each release has an appropriate tag. The tags are available on the
|
||||||
`GitHub releases page <https://github.com/ets-labs/python-dependency-injector/releases>`_.
|
`GitHub releases page <https://github.com/ets-labs/python-dependency-injector/releases>`_.
|
||||||
|
|
||||||
.. disqus::
|
.. disqus::
|
||||||
|
|
|
@ -11,10 +11,10 @@ Key features
|
||||||
Key features of the ``Dependency Injector``:
|
Key features of the ``Dependency Injector``:
|
||||||
|
|
||||||
- **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``,
|
- **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``,
|
||||||
``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency`` and ``Selector`` providers
|
``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency``, and ``Selector`` providers
|
||||||
that help assembling your objects. See :ref:`providers`.
|
that help assemble your objects. See :ref:`providers`.
|
||||||
- **Overriding**. Can override any provider by another provider on the fly. This helps in testing
|
- **Overriding**. Can override any provider by another provider on the fly. This helps in testing
|
||||||
and configuring dev / stage environment to replace API clients with stubs etc. See
|
and configuring dev/stage environment to replace API clients with stubs etc. See
|
||||||
:ref:`provider-overriding`.
|
:ref:`provider-overriding`.
|
||||||
- **Configuration**. Reads configuration from ``yaml`` & ``ini`` files, ``pydantic`` settings,
|
- **Configuration**. Reads configuration from ``yaml`` & ``ini`` files, ``pydantic`` settings,
|
||||||
environment variables, and dictionaries. See :ref:`configuration-provider`.
|
environment variables, and dictionaries. See :ref:`configuration-provider`.
|
||||||
|
@ -22,12 +22,12 @@ Key features of the ``Dependency Injector``:
|
||||||
or process pool, etc. Can be used for per-function execution scope in tandem with wiring.
|
or process pool, etc. Can be used for per-function execution scope in tandem with wiring.
|
||||||
See :ref:`resource-provider`.
|
See :ref:`resource-provider`.
|
||||||
- **Containers**. Provides declarative and dynamic containers. See :ref:`containers`.
|
- **Containers**. Provides declarative and dynamic containers. See :ref:`containers`.
|
||||||
- **Wiring**. Injects dependencies into functions and methods. Helps integrating with
|
- **Wiring**. Injects dependencies into functions and methods. Helps integrate with
|
||||||
other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See :ref:`wiring`.
|
other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See :ref:`wiring`.
|
||||||
- **Asynchronous**. Supports asynchronous injections. See :ref:`async-injections`.
|
- **Asynchronous**. Supports asynchronous injections. See :ref:`async-injections`.
|
||||||
- **Typing**. Provides typing stubs, ``mypy``-friendly. See :ref:`provider-typing`.
|
- **Typing**. Provides typing stubs, ``mypy``-friendly. See :ref:`provider-typing`.
|
||||||
- **Performance**. Fast. Written in ``Cython``.
|
- **Performance**. Fast. Written in ``Cython``.
|
||||||
- **Maturity**. Mature and production-ready. Well-tested, documented and supported.
|
- **Maturity**. Mature and production-ready. Well-tested, documented, and supported.
|
||||||
|
|
||||||
The framework stands on the `PEP20 (The Zen of Python) <https://www.python.org/dev/peps/pep-0020/>`_ principle:
|
The framework stands on the `PEP20 (The Zen of Python) <https://www.python.org/dev/peps/pep-0020/>`_ principle:
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ The framework stands on the `PEP20 (The Zen of Python) <https://www.python.org/d
|
||||||
|
|
||||||
You need to specify how to assemble and where to inject the dependencies explicitly.
|
You need to specify how to assemble and where to inject the dependencies explicitly.
|
||||||
|
|
||||||
The power of the framework is in a simplicity.
|
The power of the framework is in its simplicity.
|
||||||
``Dependency Injector`` is a simple tool for the powerful concept.
|
``Dependency Injector`` is a simple tool for the powerful concept.
|
||||||
|
|
||||||
.. disqus::
|
.. disqus::
|
||||||
|
|
Loading…
Reference in New Issue
Block a user