mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-07 07:00:49 +03:00
Update movie lister example
This commit is contained in:
parent
8fdb190118
commit
83bbbd2be7
|
@ -91,14 +91,46 @@ class DeclarativeContainer(object):
|
|||
def override(container):
|
||||
""":py:class:`DeclarativeContainer` overriding decorator.
|
||||
|
||||
:param catalog: Container that should be overridden by decorated container.
|
||||
:type catalog: :py:class:`DeclarativeContainer`
|
||||
:param container: Container that should be overridden by decorated
|
||||
container.
|
||||
:type container: :py:class:`DeclarativeContainer`
|
||||
|
||||
:return: Declarative container's overriding decorator.
|
||||
:rtype: callable(:py:class:`DeclarativeContainer`)
|
||||
"""
|
||||
def decorator(overriding_container):
|
||||
def _decorator(overriding_container):
|
||||
"""Overriding decorator."""
|
||||
container.override(overriding_container)
|
||||
return overriding_container
|
||||
return decorator
|
||||
return _decorator
|
||||
|
||||
|
||||
def copy(container):
|
||||
""":py:class:`DeclarativeContainer` copying decorator.
|
||||
|
||||
This decorator copy all providers from provided container to decorated one.
|
||||
If one of the decorated container providers matches to source container
|
||||
providers by name, it would be replaced by reference.
|
||||
|
||||
:param container: Container that should be copied by decorated container.
|
||||
:type container :py:class:`DeclarativeContainer`
|
||||
|
||||
:return: Declarative container's copying decorator.
|
||||
:rtype: callable(:py:class:`DeclarativeContainer`)
|
||||
"""
|
||||
def _decorator(copied_container):
|
||||
memo = dict()
|
||||
for name, provider in six.iteritems(copied_container.cls_providers):
|
||||
try:
|
||||
source_provider = getattr(container, name)
|
||||
except AttributeError:
|
||||
pass
|
||||
else:
|
||||
memo[id(source_provider)] = provider
|
||||
|
||||
providers_copy = utils._copy_providers(container.providers, memo)
|
||||
for name, provider in six.iteritems(providers_copy):
|
||||
setattr(copied_container, name, provider)
|
||||
|
||||
return copied_container
|
||||
return _decorator
|
||||
|
|
|
@ -24,9 +24,9 @@ class MyMoviesModule(containers.DeclarativeContainer):
|
|||
"""IoC container for overriding movies module component providers."""
|
||||
|
||||
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
||||
movie_model=MoviesModule.movie_model,
|
||||
csv_file=MOVIES_CSV_PATH,
|
||||
delimeter=',')
|
||||
delimeter=',',
|
||||
**MoviesModule.movie_finder.kwargs)
|
||||
|
||||
|
||||
@injections.inject(MoviesModule.movie_lister)
|
||||
|
|
|
@ -32,8 +32,8 @@ class MyMoviesModule(containers.DeclarativeContainer):
|
|||
"""IoC container for overriding movies module component providers."""
|
||||
|
||||
movie_finder = providers.Factory(finders.SqliteMovieFinder,
|
||||
movie_model=MoviesModule.movie_model,
|
||||
database=ApplicationModule.database)
|
||||
database=ApplicationModule.database,
|
||||
**MoviesModule.movie_finder.kwargs)
|
||||
|
||||
|
||||
@injections.inject(MoviesModule.movie_lister)
|
||||
|
|
|
@ -33,8 +33,8 @@ class DbMoviesModule(MoviesModule):
|
|||
"""IoC container for overriding movies module component providers."""
|
||||
|
||||
movie_finder = providers.Factory(finders.SqliteMovieFinder,
|
||||
movie_model=MoviesModule.movie_model,
|
||||
database=ApplicationModule.database)
|
||||
database=ApplicationModule.database,
|
||||
**MoviesModule.movie_finder.kwargs)
|
||||
|
||||
|
||||
@containers.copy(MoviesModule)
|
||||
|
@ -42,9 +42,9 @@ class CsvMoviesModule(MoviesModule):
|
|||
"""IoC container for overriding movies module component providers."""
|
||||
|
||||
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
||||
movie_model=MoviesModule.movie_model,
|
||||
csv_file=MOVIES_CSV_PATH,
|
||||
delimeter=',')
|
||||
delimeter=',',
|
||||
**MoviesModule.movie_finder.kwargs)
|
||||
|
||||
|
||||
@injections.inject(db_movie_lister=DbMoviesModule.movie_lister)
|
||||
|
|
Loading…
Reference in New Issue
Block a user