From 1fd54927c5fde62d6f580d9d375cf5ec3c022f5c Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Mon, 23 Nov 2015 18:45:04 +0200 Subject: [PATCH] Update writing of custom providers docs --- docs/images/providers/custom_provider.png | Bin 28689 -> 37001 bytes docs/providers/custom.rst | 21 +++++++++++---------- examples/providers/custom_factory.py | 19 ++++++++++++++----- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/docs/images/providers/custom_provider.png b/docs/images/providers/custom_provider.png index 784c90bd2aea7dc0cbfd041c8fe1e1fa9df7fa28..398e6bfa2c30ceb868ac01987b5db528c5196fdf 100644 GIT binary patch literal 37001 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 DVlAv0 diff --git a/docs/providers/custom.rst b/docs/providers/custom.rst index 1b3d0fd9..effd87fa 100644 --- a/docs/providers/custom.rst +++ b/docs/providers/custom.rst @@ -1,27 +1,28 @@ Writing of custom providers ------------------------ +.. module:: dependency_injector.providers + List of *Dependency Injector* providers could be widened with custom providers. Below are some tips and recommendations that have to be met: 1. Every custom provider has to extend base provider class - - ``di.Provider``. - 2. Cusom provider's ``__init__()`` could be overriden with only condition: - parent initializer (``di.Provider.__init__()``) has to be called. + :py:class:`Provider`. + 2. Cusom provider's ``__init__()`` could be overriden, but parent's + initializer (:py:meth:`Provider.__init__`) has to be called. 3. Providing strategy has to be implemented in custom provider's - ``_provide()`` method. All ``*args`` & ``**kwargs`` that will be - recieved by ``di.Provider.__call__()`` will be transefed to custom - provider's ``_provide()``. + :py:meth:`Provider._provide` method. All ``*args`` & ``**kwargs`` + that will be recieved by :py:meth:`Provider.__call__` will be + transefed to custom provider's :py:meth:`Provider._provide`. 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 (e.g. ``di.Factory``, - ``di.Singleton`` providers), it is strongly recommended to be - consistent with ``di.Factory``, ``di.Singleton`` and ``di.Callable`` - providers style. + 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: diff --git a/examples/providers/custom_factory.py b/examples/providers/custom_factory.py index 2264c736..7193fbaa 100644 --- a/examples/providers/custom_factory.py +++ b/examples/providers/custom_factory.py @@ -1,24 +1,33 @@ -"""Custom `di.Factory` example.""" +"""Custom `Factory` example.""" -import dependency_injector as di +from dependency_injector import providers class User(object): """Example class User.""" -class UsersFactory(di.Provider): +class UsersFactory(providers.Provider): """Example users factory.""" __slots__ = ('_factory',) def __init__(self): """Initializer.""" - self._factory = di.Factory(User) + self._factory = providers.Factory(User) super(UsersFactory, self).__init__() def _provide(self, *args, **kwargs): - """Return provided instance.""" + """Return provided instance. + + :param args: tuple of context positional arguments + :type args: tuple[object] + + :param kwargs: dictionary of context keyword arguments + :type kwargs: dict[str, object] + + :rtype: object + """ return self._factory(*args, **kwargs)