From dd2ded732101bfd4c5aef34f790fafe15e160086 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Wed, 2 Sep 2020 20:59:55 -0400 Subject: [PATCH] Update documentation and example on creating a custom provider --- docs/images/providers/abstract_factory.png | Bin 38000 -> 0 bytes docs/images/providers/custom_provider.png | Bin 37001 -> 0 bytes docs/images/providers/overriding_simple.png | Bin 17248 -> 0 bytes .../providers/overriding_users_model.png | Bin 32537 -> 0 bytes docs/main/changelog.rst | 1 + docs/providers/custom.rst | 56 ++++++++++-------- examples/providers/custom_factory.py | 54 +++++++++-------- src/dependency_injector/providers.pyi | 1 + 8 files changed, 62 insertions(+), 50 deletions(-) delete mode 100644 docs/images/providers/abstract_factory.png delete mode 100644 docs/images/providers/custom_provider.png delete mode 100644 docs/images/providers/overriding_simple.png delete mode 100644 docs/images/providers/overriding_users_model.png diff --git a/docs/images/providers/abstract_factory.png b/docs/images/providers/abstract_factory.png deleted file mode 100644 index ede202af7762d06f1f8e895bc1e114b198868865..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38000 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 SWLGfHD=(vbx8TkLpZ^EuqZ!u# diff --git a/docs/images/providers/custom_provider.png b/docs/images/providers/custom_provider.png deleted file mode 100644 index 398e6bfa2c30ceb868ac01987b5db528c5196fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37001 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 diff --git a/docs/images/providers/overriding_users_model.png b/docs/images/providers/overriding_users_model.png deleted file mode 100644 index 16f3ff51452cfe507fc1b90860de90bc44c7eebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32537 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 diff --git a/docs/main/changelog.rst b/docs/main/changelog.rst index f9da42f0..2e482c0e 100644 --- a/docs/main/changelog.rst +++ b/docs/main/changelog.rst @@ -11,6 +11,7 @@ Development version ------------------- - Update providers overriding documentation and rework examples. - Update documentation on injecting provided object attributes, items or method calls. +- Update documentation and example on creating a custom provider. 3.35.1 ------ diff --git a/docs/providers/custom.rst b/docs/providers/custom.rst index 237504c2..0d2ae08f 100644 --- a/docs/providers/custom.rst +++ b/docs/providers/custom.rst @@ -1,35 +1,43 @@ -Writing of custom providers ---------------------------- +Creating a custom providers +=========================== + +.. meta:: + :keywords: Python,DI,Dependency injection,IoC,Inversion of Control,Custom provider, Create + :description: This page demonstrates how to create a custom provider. .. currentmodule:: dependency_injector.providers -List of *Dependency Injector* providers could be widened with custom providers. +You can create a custom provider. -Below are some tips and recommendations that have to be met: +To create a custom provider you need to follow these rules: - 1. Every custom provider has to extend base provider class - - :py:class:`Provider`. - 2. Custom provider's ``__init__()`` could be overridden, but parent's - initializer (:py:meth:`Provider.__init__`) has to be called. - 3. Providing strategy has to be implemented in custom provider's - :py:meth:`Provider.__call__` method. - 4. If custom provider is based on some standard providers, it is better to - use delegation of standard providers, then extending of them. - 5. If custom provider defines any attributes, it is good to list them in - ``__slots__`` attribute (as *Dependency Injector* does). It can save - some memory. - 6. If custom provider deals with injections, it is strongly recommended - to be consistent with :py:class:`Factory`, :py:class:`Singleton` and - :py:class:`Callable` providers style. - -Example: - -.. image:: /images/providers/custom_provider.png - :width: 100% - :align: center +1. New provider class should inherit :py:class:`Provider`. +2. You need to implement the ``Provider._provide()`` method. +3. You need to implement the ``Provider.__deepcopy__()`` method. It should return an + equivalent copy of a provider. All providers must be copied with a ``deepcopy()`` function + from the ``providers`` module. After the a new provider object is created use + ``Provider._copy_overriding()`` method to copy all overriding providers. See the example + below. +4. If the new provider has a ``__init__()`` method, it should call the parent + ``Provider.__init__()``. .. literalinclude:: ../../examples/providers/custom_factory.py :language: python + :lines: 3- +.. note:: + 1. Prefer delegation over inheritance. If you choose between inheriting a ``Factory`` or + inheriting a ``Provider`` and use ``Factory`` internally - the last is better. + 2. When create a new provider follow the ``Factory``-like injections style. Consistency matters. + 3. Use the ``__slots__`` attribute to make sure nothing could be attached to your provider. You + will also save some memory. + +.. note:: + If you don't find needed provider in the ``providers`` module and experience troubles creating + one by your own - open a + `Github Issue `_. + + I'll help you to resolve the issue if that's possible. If the new provider can be useful for + others I'll include it into the ``providers`` module. .. disqus:: diff --git a/examples/providers/custom_factory.py b/examples/providers/custom_factory.py index 01c17425..706ed04c 100644 --- a/examples/providers/custom_factory.py +++ b/examples/providers/custom_factory.py @@ -1,40 +1,42 @@ -"""Custom `Factory` example.""" +"""Custom provider example.""" -import dependency_injector.providers as providers +from dependency_injector import providers -class User: - """Example class User.""" - - -class UsersFactory(providers.Provider): - """Example users factory.""" +class CustomFactory(providers.Provider): __slots__ = ('_factory',) - def __init__(self): - """Initialize instance.""" - self._factory = providers.Factory(User) + def __init__(self, provides, *args, **kwargs): + self._factory = providers.Factory(provides, *args, **kwargs) super().__init__() - def __call__(self, *args, **kwargs): - """Return provided object. + def __deepcopy__(self, memo): + copied = memo.get(id(self)) + if copied is not None: + return copied - Callable interface implementation. - """ - if self.last_overriding is not None: - return self.last_overriding._provide(args, kwargs) + copied = self.__class__( + self._factory.provides, + *providers.deepcopy(self._factory.args, memo), + **providers.deepcopy(self._factory.kwargs, memo), + ) + self._copy_overridings(copied, memo) + + return copied + + def _provide(self, args, kwargs): return self._factory(*args, **kwargs) -# Users factory: -users_factory = UsersFactory() +factory = CustomFactory(object) -# Creating several User objects: -user1 = users_factory() -user2 = users_factory() -# Making some asserts: -assert isinstance(user1, User) -assert isinstance(user2, User) -assert user1 is not user2 +if __name__ == '__main__': + object1 = factory() + assert isinstance(object1, object) + + object2 = factory() + assert isinstance(object1, object) + + assert object1 is not object2 diff --git a/src/dependency_injector/providers.pyi b/src/dependency_injector/providers.pyi index 0617e8f2..c8d97a70 100644 --- a/src/dependency_injector/providers.pyi +++ b/src/dependency_injector/providers.pyi @@ -43,6 +43,7 @@ class Provider(_Provider): def delegate(self) -> Provider: ... @property def provider(self) -> Provider: ... + def _copy_overridings(self, copied: Provider, memo: Optional[Dict[str, Any]]) -> None: ... class Object(Provider, Generic[T]):