mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-12 01:20:51 +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):
|
def override(container):
|
||||||
""":py:class:`DeclarativeContainer` overriding decorator.
|
""":py:class:`DeclarativeContainer` overriding decorator.
|
||||||
|
|
||||||
:param catalog: Container that should be overridden by decorated container.
|
:param container: Container that should be overridden by decorated
|
||||||
:type catalog: :py:class:`DeclarativeContainer`
|
container.
|
||||||
|
:type container: :py:class:`DeclarativeContainer`
|
||||||
|
|
||||||
:return: Declarative container's overriding decorator.
|
:return: Declarative container's overriding decorator.
|
||||||
:rtype: callable(:py:class:`DeclarativeContainer`)
|
:rtype: callable(:py:class:`DeclarativeContainer`)
|
||||||
"""
|
"""
|
||||||
def decorator(overriding_container):
|
def _decorator(overriding_container):
|
||||||
"""Overriding decorator."""
|
"""Overriding decorator."""
|
||||||
container.override(overriding_container)
|
container.override(overriding_container)
|
||||||
return 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."""
|
"""IoC container for overriding movies module component providers."""
|
||||||
|
|
||||||
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
||||||
movie_model=MoviesModule.movie_model,
|
|
||||||
csv_file=MOVIES_CSV_PATH,
|
csv_file=MOVIES_CSV_PATH,
|
||||||
delimeter=',')
|
delimeter=',',
|
||||||
|
**MoviesModule.movie_finder.kwargs)
|
||||||
|
|
||||||
|
|
||||||
@injections.inject(MoviesModule.movie_lister)
|
@injections.inject(MoviesModule.movie_lister)
|
||||||
|
|
|
@ -32,8 +32,8 @@ class MyMoviesModule(containers.DeclarativeContainer):
|
||||||
"""IoC container for overriding movies module component providers."""
|
"""IoC container for overriding movies module component providers."""
|
||||||
|
|
||||||
movie_finder = providers.Factory(finders.SqliteMovieFinder,
|
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)
|
@injections.inject(MoviesModule.movie_lister)
|
||||||
|
|
|
@ -33,8 +33,8 @@ class DbMoviesModule(MoviesModule):
|
||||||
"""IoC container for overriding movies module component providers."""
|
"""IoC container for overriding movies module component providers."""
|
||||||
|
|
||||||
movie_finder = providers.Factory(finders.SqliteMovieFinder,
|
movie_finder = providers.Factory(finders.SqliteMovieFinder,
|
||||||
movie_model=MoviesModule.movie_model,
|
database=ApplicationModule.database,
|
||||||
database=ApplicationModule.database)
|
**MoviesModule.movie_finder.kwargs)
|
||||||
|
|
||||||
|
|
||||||
@containers.copy(MoviesModule)
|
@containers.copy(MoviesModule)
|
||||||
|
@ -42,9 +42,9 @@ class CsvMoviesModule(MoviesModule):
|
||||||
"""IoC container for overriding movies module component providers."""
|
"""IoC container for overriding movies module component providers."""
|
||||||
|
|
||||||
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
||||||
movie_model=MoviesModule.movie_model,
|
|
||||||
csv_file=MOVIES_CSV_PATH,
|
csv_file=MOVIES_CSV_PATH,
|
||||||
delimeter=',')
|
delimeter=',',
|
||||||
|
**MoviesModule.movie_finder.kwargs)
|
||||||
|
|
||||||
|
|
||||||
@injections.inject(db_movie_lister=DbMoviesModule.movie_lister)
|
@injections.inject(db_movie_lister=DbMoviesModule.movie_lister)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user