mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 01:47:36 +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