"""`Singleton` - Flask request scope example."""

from dependency_injector import containers, providers
from flask import Flask, current_app


class Service:
    ...


class Container(containers.DeclarativeContainer):

    service_provider = providers.Singleton(Service)


def index_view():
    service_1 = current_app.container.service_provider()
    service_2 = current_app.container.service_provider()
    assert service_1 is service_2
    print(service_1)
    return 'Hello  World!'


def teardown_context(request):
    current_app.container.service_provider.reset()
    return request


container = Container()

app = Flask(__name__)
app.container = container
app.add_url_rule('/', 'index', view_func=index_view)
app.after_request(teardown_context)


if __name__ == '__main__':
    app.run()