Update example of writing custom providers

This commit is contained in:
Roman Mogilatov 2017-05-08 17:07:54 +03:00
parent e8bd524b6d
commit d8d910d342
3 changed files with 7 additions and 12 deletions

View File

@ -16,6 +16,7 @@ Development version
- Add ``Provider.last_overriding`` read-only property that points to last - Add ``Provider.last_overriding`` read-only property that points to last
overriding provider, if any. If target provider is not overridden, ``None`` overriding provider, if any. If target provider is not overridden, ``None``
would be returned. would be returned.
- Update example of writing custom providers.
3.4.3 3.4.3
----- -----

View File

@ -12,9 +12,7 @@ Below are some tips and recommendations that have to be met:
2. Cusom provider's ``__init__()`` could be overriden, but parent's 2. Cusom provider's ``__init__()`` could be overriden, but parent's
initializer (:py:meth:`Provider.__init__`) has to be called. initializer (:py:meth:`Provider.__init__`) has to be called.
3. Providing strategy has to be implemented in custom provider's 3. Providing strategy has to be implemented in custom provider's
:py:meth:`Provider._provide` method. All ``*args`` & ``**kwargs`` :py:meth:`Provider.__call__` method.
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 4. If custom provider is based on some standard providers, it is better to
use delegation of standard providers, then extending of them. use delegation of standard providers, then extending of them.
5. If custom provider defines any attributes, it is good to list them in 5. If custom provider defines any attributes, it is good to list them in

View File

@ -17,17 +17,13 @@ class UsersFactory(providers.Provider):
self._factory = providers.Factory(User) self._factory = providers.Factory(User)
super(UsersFactory, self).__init__() super(UsersFactory, self).__init__()
def _provide(self, *args, **kwargs): def __call__(self, *args, **kwargs):
"""Return provided instance. """Return provided object.
:param args: tuple of context positional arguments Callable interface implementation.
:type args: tuple[object]
:param kwargs: dictionary of context keyword arguments
:type kwargs: dict[str, object]
:rtype: object
""" """
if self.last_overriding is not None:
return self.last_overriding._provide(args, kwargs)
return self._factory(*args, **kwargs) return self._factory(*args, **kwargs)