mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-29 04:53:59 +03:00
Add example of catalog copying into MovieLister example
This commit is contained in:
parent
7cdeede38a
commit
f89ba4c5a9
76
examples/stories/movie_lister/apps_db_csv.py
Normal file
76
examples/stories/movie_lister/apps_db_csv.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
"""A naive example of dependency injection in Python.
|
||||||
|
|
||||||
|
Example implementation of dependency injection in Python from Martin Fowler's
|
||||||
|
article about dependency injection and inversion of control:
|
||||||
|
|
||||||
|
http://www.martinfowler.com/articles/injection.html
|
||||||
|
|
||||||
|
This mini application uses ``movies`` library, that is configured to work with
|
||||||
|
csv file movies database.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
from dependency_injector import catalogs
|
||||||
|
from dependency_injector import providers
|
||||||
|
from dependency_injector import injections
|
||||||
|
|
||||||
|
from movies import MoviesModule
|
||||||
|
from movies import finders
|
||||||
|
|
||||||
|
from settings import MOVIES_CSV_PATH
|
||||||
|
from settings import MOVIES_DB_PATH
|
||||||
|
|
||||||
|
|
||||||
|
class ApplicationModule(catalogs.DeclarativeCatalog):
|
||||||
|
"""Catalog of application component providers."""
|
||||||
|
|
||||||
|
database = providers.Singleton(sqlite3.connect, MOVIES_DB_PATH)
|
||||||
|
|
||||||
|
|
||||||
|
@catalogs.copy(MoviesModule)
|
||||||
|
class DbMoviesModule(MoviesModule):
|
||||||
|
"""Customized catalog of movies module component providers."""
|
||||||
|
|
||||||
|
movie_finder = providers.Factory(finders.SqliteMovieFinder,
|
||||||
|
*MoviesModule.movie_finder.injections,
|
||||||
|
database=ApplicationModule.database)
|
||||||
|
|
||||||
|
|
||||||
|
@catalogs.copy(MoviesModule)
|
||||||
|
class CsvMoviesModule(MoviesModule):
|
||||||
|
"""Customized catalog of movies module component providers."""
|
||||||
|
|
||||||
|
movie_finder = providers.Factory(finders.CsvMovieFinder,
|
||||||
|
*MoviesModule.movie_finder.injections,
|
||||||
|
csv_file=MOVIES_CSV_PATH,
|
||||||
|
delimeter=',')
|
||||||
|
|
||||||
|
|
||||||
|
@injections.inject(db_movie_lister=DbMoviesModule.movie_lister)
|
||||||
|
@injections.inject(csv_movie_lister=CsvMoviesModule.movie_lister)
|
||||||
|
def main(db_movie_lister, csv_movie_lister):
|
||||||
|
"""Main function.
|
||||||
|
|
||||||
|
This program prints info about all movies that were directed by different
|
||||||
|
persons and then prints all movies that were released in 2015.
|
||||||
|
|
||||||
|
:param db_movie_lister: Database movie lister instance
|
||||||
|
:type db_movie_lister: movies.listers.MovieLister
|
||||||
|
|
||||||
|
:param csv_movie_lister: Database movie lister instance
|
||||||
|
:type csv_movie_lister: movies.listers.MovieLister
|
||||||
|
"""
|
||||||
|
print db_movie_lister.movies_directed_by('Francis Lawrence')
|
||||||
|
print db_movie_lister.movies_directed_by('Patricia Riggen')
|
||||||
|
print db_movie_lister.movies_directed_by('JJ Abrams')
|
||||||
|
print db_movie_lister.movies_released_in(2015)
|
||||||
|
|
||||||
|
print csv_movie_lister.movies_directed_by('Francis Lawrence')
|
||||||
|
print csv_movie_lister.movies_directed_by('Patricia Riggen')
|
||||||
|
print csv_movie_lister.movies_directed_by('JJ Abrams')
|
||||||
|
print csv_movie_lister.movies_released_in(2015)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user