from django.utils.functional import SimpleLazyObject

from .enabledproviders import get_enabled_providers


def socialauth_providers_middleware(get_response):
    """Sets request.socialauth attribute with dict of setup social auth providers."""

    def middleware(request):
        def lazily_get_enabled_providers():
            return get_enabled_providers(request.cache_versions)

        request.socialauth = SimpleLazyObject(lazily_get_enabled_providers)
        return get_response(request)

    return middleware