"""
Middleware classes used throughout the project.

See https://docs.djangoproject.com/en/2.1/topics/http/middleware/
"""

class SetApplicationName(object):
    """
    Set request.current_app to the name of the app the current
    view belongs to.  This ends up being the first component
    of the package name.

    See:
    https://stackoverflow.com/questions/12596722/django-identify-app-in-template
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        return self.get_response(request)

    def process_view(self, request, view_func, view_args, view_kwargs):
        request.current_app = view_func.__module__.split('.')[0]
