Support stringy middlewares

This commit is contained in:
wkoot 2020-05-26 20:42:56 +02:00
parent b1f6d41209
commit 62d121fe68
2 changed files with 27 additions and 0 deletions

View File

@ -5,6 +5,7 @@ from django.utils.translation import gettext_lazy
from mock import patch from mock import patch
from ..utils import camelize, get_model_fields, GraphQLTestCase from ..utils import camelize, get_model_fields, GraphQLTestCase
from ..views import instantiate_middleware
from .models import Film, Reporter from .models import Film, Reporter
@ -36,6 +37,27 @@ def test_camelize():
assert camelize({0: {"field_a": ["errors"]}}) == {0: {"fieldA": ["errors"]}} assert camelize({0: {"field_a": ["errors"]}}) == {0: {"fieldA": ["errors"]}}
def test_instantiate_middleware_input_types():
from django.middleware.security import SecurityMiddleware
from django.middleware.common import CommonMiddleware
from django.middleware.csrf import CsrfViewMiddleware
from django.contrib.messages.middleware import MessageMiddleware
middleware = [
"django.middleware.security.SecurityMiddleware",
CommonMiddleware,
CsrfViewMiddleware(),
"django.contrib.messages.middleware.MessageMiddleware",
]
loaded_middlewares = list(instantiate_middleware(middleware))
assert isinstance(loaded_middlewares[0], SecurityMiddleware)
assert isinstance(loaded_middlewares[1], CommonMiddleware)
assert isinstance(loaded_middlewares[2], CsrfViewMiddleware)
assert isinstance(loaded_middlewares[3], MessageMiddleware)
@pytest.mark.django_db @pytest.mark.django_db
@patch("graphene_django.utils.testing.Client.post") @patch("graphene_django.utils.testing.Client.post")
def test_graphql_test_case_op_name(post_mock): def test_graphql_test_case_op_name(post_mock):

View File

@ -9,6 +9,7 @@ from django.shortcuts import render
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.views.generic import View from django.views.generic import View
from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils.module_loading import import_string
from graphql import get_default_backend from graphql import get_default_backend
from graphql.error import format_error as format_graphql_error from graphql.error import format_error as format_graphql_error
@ -48,6 +49,10 @@ def instantiate_middleware(middlewares):
if inspect.isclass(middleware): if inspect.isclass(middleware):
yield middleware() yield middleware()
continue continue
elif isinstance(middleware, six.string_types):
middleware_class = import_string(middleware)
yield middleware_class()
continue
yield middleware yield middleware