Refactor movie lister to use wiring

This commit is contained in:
Roman Mogylatov 2020-10-06 15:26:03 -04:00
parent 6dd668ac3d
commit fb5488b050
4 changed files with 28 additions and 23 deletions

View File

@ -39,8 +39,11 @@ The output should be something like this for each command:
.. code-block:: bash .. code-block:: bash
Francis Lawrence movies: [Movie(title='The Hunger Games: Mockingjay - Part 2', year=2015, director='Francis Lawrence')] Francis Lawrence movies:
2016 movies: [Movie(title='Rogue One: A Star Wars Story', year=2016, director='Gareth Edwards'), Movie(title='The Jungle Book', year=2016, director='Jon Favreau')] - Movie(title='The Hunger Games: Mockingjay - Part 2', year=2015, director='Francis Lawrence')
2016 movies:
- Movie(title='Rogue One: A Star Wars Story', year=2016, director='Gareth Edwards')
- Movie(title='The Jungle Book', year=2016, director='Jon Favreau')
Test Test
---- ----
@ -65,11 +68,11 @@ The output should be something like:
Name Stmts Miss Cover Name Stmts Miss Cover
------------------------------------------ ------------------------------------------
movies/__init__.py 0 0 100% movies/__init__.py 0 0 100%
movies/__main__.py 10 10 0% movies/__main__.py 13 13 0%
movies/containers.py 9 0 100% movies/containers.py 9 0 100%
movies/entities.py 7 1 86% movies/entities.py 7 1 86%
movies/finders.py 26 13 50% movies/finders.py 26 13 50%
movies/listers.py 8 0 100% movies/listers.py 8 0 100%
movies/tests.py 24 0 100% movies/tests.py 24 0 100%
------------------------------------------ ------------------------------------------
TOTAL 84 24 71% TOTAL 87 27 69%

View File

@ -1,25 +1,27 @@
"""Main module.""" """Main module."""
from .containers import ApplicationContainer import sys
from dependency_injector.wiring import Provide
from .listers import MovieLister
from .containers import Container
def main(): def main(lister: MovieLister = Provide[Container.lister]):
container = ApplicationContainer() print('Francis Lawrence movies:')
for movie in lister.movies_directed_by('Francis Lawrence'):
print('\t-', movie)
container.config.from_yaml('config.yml') print('2016 movies:')
container.config.finder.type.from_env('MOVIE_FINDER_TYPE') for movie in lister.movies_released_in(2016):
print('\t-', movie)
lister = container.lister()
print(
'Francis Lawrence movies:',
lister.movies_directed_by('Francis Lawrence'),
)
print(
'2016 movies:',
lister.movies_released_in(2016),
)
if __name__ == '__main__': if __name__ == '__main__':
container = Container()
container.config.from_yaml('config.yml')
container.config.finder.type.from_env('MOVIE_FINDER_TYPE')
container.wire(modules=[sys.modules[__name__]])
main() main()

View File

@ -5,7 +5,7 @@ from dependency_injector import containers, providers
from . import finders, listers, entities from . import finders, listers, entities
class ApplicationContainer(containers.DeclarativeContainer): class Container(containers.DeclarativeContainer):
config = providers.Configuration() config = providers.Configuration()

View File

@ -4,12 +4,12 @@ from unittest import mock
import pytest import pytest
from .containers import ApplicationContainer from .containers import Container
@pytest.fixture @pytest.fixture
def container(): def container():
container = ApplicationContainer() container = Container()
container.config.from_dict({ container.config.from_dict({
'finder': { 'finder': {
'type': 'csv', 'type': 'csv',