Skip to content

Commit

Permalink
Update movie lister example
Browse files Browse the repository at this point in the history
  • Loading branch information
rmk135 committed May 29, 2016
1 parent d07066c commit 667e55e
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 12 deletions.
40 changes: 36 additions & 4 deletions dependency_injector/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,46 @@ def override(cls, overriding):
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
4 changes: 2 additions & 2 deletions examples/miniapps/movie_lister/app_csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions examples/miniapps/movie_lister/app_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 4 additions & 4 deletions examples/miniapps/movie_lister/app_db_csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@ 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)
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)
Expand Down

0 comments on commit 667e55e

Please sign in to comment.