From 46935b31529ef0be6ac99e10ac0c75ede7912954 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Sun, 30 Aug 2020 22:01:24 -0400 Subject: [PATCH] Edit providers delegation section --- docs/images/providers/factory_delegation.png | Bin 21993 -> 0 bytes docs/providers/factory.rst | 44 ++------- docs/providers/images/factory_delegation.png | Bin 0 -> 18306 bytes examples/providers/factory_delegation.py | 89 +++++------------- examples/providers/factory_init_injections.py | 3 +- .../factory_init_injections_underlying.py | 8 +- 6 files changed, 35 insertions(+), 109 deletions(-) delete mode 100644 docs/images/providers/factory_delegation.png create mode 100644 docs/providers/images/factory_delegation.png diff --git a/docs/images/providers/factory_delegation.png b/docs/images/providers/factory_delegation.png deleted file mode 100644 index e9a741dc8dcb8760b5bd5313b61ca608fa995638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21993 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 P{RazEYZKB{@1*|%R^`kc diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst index af45fc5a..88dd68f8 100644 --- a/docs/providers/factory.rst +++ b/docs/providers/factory.rst @@ -77,48 +77,20 @@ If ```` is found the underlying provider will receive the .. _factory_providers_delegation: -Factory providers delegation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Passing providers to the objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:py:class:`Factory` provider could be delegated to any other provider via any -kind of injection. +When you need to inject the provider itself, but not the result of its call, use the ``.provider`` +attribute of the provider that you're going to inject. -As it was mentioned earlier, if :py:class:`Factory` is -injectable value, it will be called every time when injection needs to be -done. But sometimes there is a need to inject :py:class:`Factory` provider -itself (not a result of its call) as a dependency. Such injections are called -- *delegated provider injections*. - -Saying in other words, delegation of factories - is a way to inject factories -themselves, instead of results of their calls. - -:py:class:`Factory` delegation is performed by wrapping delegated -:py:class:`Factory` into special provider type - :py:class:`Delegate`, that -just returns wrapped :py:class:`Factory`. - -Actually, there are three ways for creating factory delegates: - -+ ``DelegatedFactory(...)`` - use special type of factory - - :py:class:`DelegatedFactory`. Such factories are always injected as - delegates ("as is"). -+ ``Delegate(Factory(...))`` - obviously wrapping factory into - :py:class:`Delegate` provider. -+ ``Factory(...).delegate()`` - calling factory :py:meth:`Factory.delegate` - method, that returns delegate wrapper for current factory. -+ ``Factory(...).provider`` - getting factory :py:attr:`Factory.provider` - attribute, that returns delegate wrapper for current factory (alias of - ``Factory(...).delegate()`` method). - -Example: - -.. image:: /images/providers/factory_delegation.png - :width: 85% - :align: center +.. image:: images/factory_delegation.png .. literalinclude:: ../../examples/providers/factory_delegation.py :language: python + :lines: 3- + :emphasize-lines: 25 -.. _factory_providers_specialization: +.. note:: Any provider has a ``.provider`` attribute. Factory providers specialization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/providers/images/factory_delegation.png b/docs/providers/images/factory_delegation.png new file mode 100644 index 0000000000000000000000000000000000000000..4def0d0826b8eca367af48f82615162a2084139d GIT binary patch literal 18306 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 L)Qj#udhtI1pVNW4 literal 0 HcmV?d00001 diff --git a/examples/providers/factory_delegation.py b/examples/providers/factory_delegation.py index 0aee54d3..f6bc02d1 100644 --- a/examples/providers/factory_delegation.py +++ b/examples/providers/factory_delegation.py @@ -1,82 +1,37 @@ """`Factory` providers delegation example.""" -import collections +from typing import Callable, List -import dependency_injector.providers as providers - - -Photo = collections.namedtuple('Photo', []) +from dependency_injector import providers class User: - """Example user model.""" - - def __init__(self, photos_factory): - """Initialize instance.""" - self.photos_factory = photos_factory - self._main_photo = None - - @property - def main_photo(self): - """Return user's main photo.""" - if not self._main_photo: - self._main_photo = self.photos_factory() - return self._main_photo + def __init__(self, uid: int) -> None: + self.uid = uid -# Defining User and Photo factories using DelegatedFactory provider: -photos_factory = providers.DelegatedFactory(Photo) -users_factory = providers.Factory( - User, - photos_factory=photos_factory, -) +class UserRepository: + def __init__(self, user_factory: Callable[..., User]) -> None: + self.user_factory = user_factory -# or using Delegate(Factory(...)) + def get_all(self) -> List[User]: + return [ + self.user_factory(**user_data) + for user_data in [{'uid': 1}, {'uid': 2}] + ] -photos_factory = providers.Factory(Photo) -users_factory = providers.Factory( - User, - photos_factory=providers.Delegate(photos_factory), + +user_factory = providers.Factory(User) +user_repository_factory = providers.Factory( + UserRepository, + user_factory=user_factory.provider, ) -# or using Factory(...).delegate() +if __name__ == '__main__': + user_repository = user_repository_factory() -photos_factory = providers.Factory(Photo) -users_factory = providers.Factory( - User, - photos_factory=photos_factory.delegate(), -) + user1, user2 = user_repository.get_all() - -# Creating several User objects: -user1 = users_factory() -user2 = users_factory() - -# Same as: -# user1 = User(photos_factory=photos_factory) -# user2 = User(photos_factory=photos_factory) - -# Making some asserts: -assert isinstance(user1.main_photo, Photo) -assert isinstance(user2.main_photo, Photo) - -# or using Factory(...).provider - -photos_factory = providers.Factory(Photo) -users_factory = providers.Factory( - User, - photos_factory=photos_factory.provider, -) - -# Creating several User objects: -user1 = users_factory() -user2 = users_factory() - -# Same as: -# user1 = User(photos_factory=photos_factory) -# user2 = User(photos_factory=photos_factory) - -# Making some asserts: -assert isinstance(user1.main_photo, Photo) -assert isinstance(user2.main_photo, Photo) + assert user1.uid == 1 + assert user2.uid == 2 diff --git a/examples/providers/factory_init_injections.py b/examples/providers/factory_init_injections.py index ed37fd09..682ace80 100644 --- a/examples/providers/factory_init_injections.py +++ b/examples/providers/factory_init_injections.py @@ -8,8 +8,7 @@ class Photo: class User: - - def __init__(self, uid: int, main_photo: Photo): + def __init__(self, uid: int, main_photo: Photo) -> None: self.uid = uid self.main_photo = main_photo diff --git a/examples/providers/factory_init_injections_underlying.py b/examples/providers/factory_init_injections_underlying.py index 98a386a7..cf49388e 100644 --- a/examples/providers/factory_init_injections_underlying.py +++ b/examples/providers/factory_init_injections_underlying.py @@ -4,22 +4,22 @@ from dependency_injector import providers class Regularizer: - def __init__(self, alpha: float): + def __init__(self, alpha: float) -> None: self.alpha = alpha class Loss: - def __init__(self, regularizer: Regularizer): + def __init__(self, regularizer: Regularizer) -> None: self.regularizer = regularizer class ClassificationTask: - def __init__(self, loss: Loss): + def __init__(self, loss: Loss) -> None: self.loss = loss class Algorithm: - def __init__(self, task: ClassificationTask): + def __init__(self, task: ClassificationTask) -> None: self.task = task