Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/examples/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ and powered by *Dependency Injector* framework.
movie_lister
services_miniapp
bundles_miniapp
use_cases_miniapp
57 changes: 57 additions & 0 deletions docs/examples/use_cases_miniapp.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
Use cases mini application example
----------------------------------

.. currentmodule:: dependency_injector.providers

"Use cases" miniapp demonstrate usage of :py:class:`DependenciesContainer`
provider.

Example application
~~~~~~~~~~~~~~~~~~~

"Use cases" mini application has next structure:

.. code-block:: bash

use_cases/
example/ <-- Example package
__init__.py
adapters.py
use_cases.py
containers.py <-- Dependency injection containers
run.py <-- Entrypoint


IoC containers
~~~~~~~~~~~~~~

Listing of ``use_cases/containers.py``:

.. literalinclude:: ../../examples/miniapps/use_cases/containers.py
:language: python
:linenos:

Run application
~~~~~~~~~~~~~~~

Listing of ``run.py``:

.. literalinclude:: ../../examples/miniapps/use_cases/run.py
:language: python
:linenos:

Instructions for running:

.. code-block:: bash

python run.py prod [email protected] # Running in "production" environment
python run.py test [email protected] # Running in "testing" environment

Links
~~~~~

+ `Dependency Injector <https://github.com/ets-labs/python-dependency-injector/>`_
+ `Full example sources <https://github.com/ets-labs/python-dependency-injector/tree/master/examples/miniapps/use_cases>`_


.. disqus::
9 changes: 9 additions & 0 deletions docs/main/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ that were made in every particular version.
From version 0.7.6 *Dependency Injector* framework strictly
follows `Semantic versioning`_


3.10.0
------
- Add ``DependenciesContainer`` provider.
- Add "use_cases" example miniapp.
- Update documentation requirements to use fixed version of
``sphinxcontrib-disqus``.


3.9.1
-----
- Fix docs build problem (``sphinx`` is frozen on ``1.5.6`` version because of
Expand Down
9 changes: 9 additions & 0 deletions examples/miniapps/use_cases/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Dependency Injector Use Cases example
=====================================

Instructions for running

.. code-block:: bash

python run.py prod [email protected] # Running in "production" environment
python run.py test [email protected] # Running in "testing" environment
30 changes: 30 additions & 0 deletions examples/miniapps/use_cases/containers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""Dependency injection containers for 'Use Cases' example application."""

from dependency_injector import containers, providers

from example.adapters import SmtpEmailSender, EchoEmailSender
from example.use_cases import SignupUseCase


class Adapters(containers.DeclarativeContainer):
"""Adapters container."""

email_sender = providers.Singleton(SmtpEmailSender)


class TestAdapters(containers.DeclarativeContainer):
"""Adapters container.

This container is used for testing purposes.
"""

email_sender = providers.Singleton(EchoEmailSender)


class UseCases(containers.DeclarativeContainer):
"""Use cases container."""

adapters = providers.DependenciesContainer()

signup = providers.Factory(SignupUseCase,
email_sender=adapters.email_sender)
1 change: 1 addition & 0 deletions examples/miniapps/use_cases/example/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Example top-level package."""
25 changes: 25 additions & 0 deletions examples/miniapps/use_cases/example/adapters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""Example adapters package."""


class EmailSender(object):
"""Abstract email sender."""

def send(self, to, body):
"""Send email to specified email."""
raise NotImplementedError()


class SmtpEmailSender(object):
"""SMTP email sender uses SMTP protocol for sending emails."""

def send(self, to, body):
"""Send email to specified email."""
# Send email via SMTP


class EchoEmailSender(object):
"""Echo email sender prints emails to stdout."""

def send(self, to, body):
"""Send email to specified email."""
print('Sending email to "{0}", body = "{1}"'.format(to, body))
22 changes: 22 additions & 0 deletions examples/miniapps/use_cases/example/use_cases.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""Example use cases package."""


class UseCase(object):
"""Abstract use case."""

def execute(self):
"""Execute use case handling."""
raise NotImplementedError()


class SignupUseCase(object):
"""Sign up use cases registers users."""

def __init__(self, email_sender):
"""Initializer."""
self.email_sender = email_sender

def execute(self, email):
"""Execute use case handling."""
print('Sign up user {0}'.format(email))
self.email_sender.send(email, 'Welcome, "{}"'.format(email))
19 changes: 19 additions & 0 deletions examples/miniapps/use_cases/run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""Run 'Use Cases' example application."""

import sys

from containers import Adapters, TestAdapters, UseCases


if __name__ == '__main__':
environment, email = sys.argv[1:]

if environment == 'prod':
adapters = Adapters()
elif environment == 'test':
adapters = TestAdapters()

use_cases = UseCases(adapters=adapters)

use_case = use_cases.signup()
use_case.execute(email)
4 changes: 2 additions & 2 deletions requirements-doc.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
sphinx==1.5.6
sphinx_rtd_theme>=0.2.5b1
sphinx
-e git://github.com/rmk135/sphinxcontrib-disqus.git#egg=sphinxcontrib-disqus
sphinx_autobuild
sphinxcontrib-disqus
autodoc
Loading