From 433a7d8bcbdb0790bf7852bf7eb08e2542ea9921 Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Mon, 18 Sep 2023 17:53:04 +0800 Subject: [PATCH 1/3] Fix test Client headers for Django 4.2 --- graphene_django/utils/testing.py | 9 ++++++++- graphene_django/utils/utils.py | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/graphene_django/utils/testing.py b/graphene_django/utils/testing.py index ad9ff35f8..6cd0e3ba3 100644 --- a/graphene_django/utils/testing.py +++ b/graphene_django/utils/testing.py @@ -4,6 +4,7 @@ from django.test import Client, TestCase, TransactionTestCase from graphene_django.settings import graphene_settings +from graphene_django.utils.utils import _DJANGO_VERSION_AT_LEAST_4_2 DEFAULT_GRAPHQL_URL = "/graphql" @@ -55,8 +56,14 @@ def graphql_query( else: body["variables"] = {"input": input_data} if headers: + header_params = ( + {"headers": headers} if _DJANGO_VERSION_AT_LEAST_4_2 else headers + ) resp = client.post( - graphql_url, json.dumps(body), content_type="application/json", **headers + graphql_url, + json.dumps(body), + content_type="application/json", + **header_params ) else: resp = client.post( diff --git a/graphene_django/utils/utils.py b/graphene_django/utils/utils.py index d7993e7b2..3b295cd99 100644 --- a/graphene_django/utils/utils.py +++ b/graphene_django/utils/utils.py @@ -1,5 +1,6 @@ import inspect +import pkg_resources from django.db import connection, models, transaction from django.db.models.manager import Manager from django.utils.encoding import force_str @@ -145,3 +146,14 @@ def bypass_get_queryset(resolver): """ resolver._bypass_get_queryset = True return resolver + + +def __django_version(): + return pkg_resources.get_distribution("django").parsed_version + + +def __parse_version(v): + return pkg_resources.parse_version(v) + + +_DJANGO_VERSION_AT_LEAST_4_2 = __django_version() >= __parse_version("4.2") From b4c427bb1081a6c495e89cfb33eccb87246497d6 Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Mon, 18 Sep 2023 18:00:10 +0800 Subject: [PATCH 2/3] Lazy import pkg_resources since it could be quite heavy --- graphene_django/utils/utils.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/graphene_django/utils/utils.py b/graphene_django/utils/utils.py index 3b295cd99..4c97c8d68 100644 --- a/graphene_django/utils/utils.py +++ b/graphene_django/utils/utils.py @@ -1,6 +1,5 @@ import inspect -import pkg_resources from django.db import connection, models, transaction from django.db.models.manager import Manager from django.utils.encoding import force_str @@ -149,11 +148,15 @@ def bypass_get_queryset(resolver): def __django_version(): - return pkg_resources.get_distribution("django").parsed_version + from pkg_resources import get_distribution + + return get_distribution("django").parsed_version def __parse_version(v): - return pkg_resources.parse_version(v) + from pkg_resources import parse_version + + return parse_version(v) _DJANGO_VERSION_AT_LEAST_4_2 = __django_version() >= __parse_version("4.2") From a4b7b40aea44429920371ab5d5ccceae296482c1 Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Mon, 18 Sep 2023 23:13:22 +0800 Subject: [PATCH 3/3] Remove use of pkg_resources altogether --- graphene_django/utils/utils.py | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/graphene_django/utils/utils.py b/graphene_django/utils/utils.py index 4c97c8d68..364eff9b4 100644 --- a/graphene_django/utils/utils.py +++ b/graphene_django/utils/utils.py @@ -1,5 +1,6 @@ import inspect +import django from django.db import connection, models, transaction from django.db.models.manager import Manager from django.utils.encoding import force_str @@ -147,16 +148,6 @@ def bypass_get_queryset(resolver): return resolver -def __django_version(): - from pkg_resources import get_distribution - - return get_distribution("django").parsed_version - - -def __parse_version(v): - from pkg_resources import parse_version - - return parse_version(v) - - -_DJANGO_VERSION_AT_LEAST_4_2 = __django_version() >= __parse_version("4.2") +_DJANGO_VERSION_AT_LEAST_4_2 = django.VERSION[0] > 4 or ( + django.VERSION[0] >= 4 and django.VERSION[1] >= 2 +)