Merge pull request #27 from loft-orbital/chore/django-2-support

feat: add Django 2 compatibility
This commit is contained in:
Thomas Leonard 2023-07-31 12:39:07 +02:00 committed by GitHub
commit 67cd040983
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 21 additions and 13 deletions

View File

@ -11,6 +11,10 @@ jobs:
django: ["3.2", "4.1", "4.2"] django: ["3.2", "4.1", "4.2"]
python-version: ["3.8", "3.9", "3.10"] python-version: ["3.8", "3.9", "3.10"]
include: include:
- django: "2.2"
python-version: "3.10"
- django: "2.2"
python-version: "3.11"
- django: "3.2" - django: "3.2"
python-version: "3.7" python-version: "3.7"
- django: "4.1" - django: "4.1"

View File

@ -1,9 +1,3 @@
# For backwards compatibility, we import JSONField to have it available for import via
# this compat module (https://github.com/graphql-python/graphene-django/issues/1428).
# Django's JSONField is available in Django 3.2+ (the minimum version we support)
from django.db.models import JSONField
class MissingType: class MissingType:
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
pass pass
@ -18,5 +12,12 @@ try:
HStoreField, HStoreField,
RangeField, RangeField,
) )
try:
from django.db.models import JSONField
except ImportError:
from django.contrib.postgres.fields import JSONField
except ImportError: except ImportError:
IntegerRangeField, ArrayField, HStoreField, RangeField = (MissingType,) * 4 IntegerRangeField, ArrayField, HStoreField, RangeField, JSONField = (
MissingType,
) * 5

View File

@ -37,7 +37,7 @@ except ImportError:
from graphql import assert_valid_name as assert_name from graphql import assert_valid_name as assert_name
from graphql.pyutils import register_description from graphql.pyutils import register_description
from .compat import ArrayField, HStoreField, RangeField from .compat import ArrayField, HStoreField, RangeField, JSONField
from .fields import DjangoListField, DjangoConnectionField from .fields import DjangoListField, DjangoConnectionField
from .settings import graphene_settings from .settings import graphene_settings
from .utils.str_converters import to_const from .utils.str_converters import to_const
@ -471,7 +471,7 @@ def convert_postgres_array_to_list(field, registry=None):
@convert_django_field.register(HStoreField) @convert_django_field.register(HStoreField)
@convert_django_field.register(models.JSONField) @convert_django_field.register(JSONField)
def convert_json_field_to_string(field, registry=None): def convert_json_field_to_string(field, registry=None):
return JSONString( return JSONString(
description=get_django_field_description(field), required=not field.null description=get_django_field_description(field), required=not field.null

View File

@ -11,7 +11,7 @@ from pytest import raises
import graphene import graphene
from graphene.relay import Node from graphene.relay import Node
from ..compat import IntegerRangeField, MissingType from ..compat import IntegerRangeField, MissingType, JSONField
from ..fields import DjangoConnectionField from ..fields import DjangoConnectionField
from ..types import DjangoObjectType from ..types import DjangoObjectType
from ..utils import DJANGO_FILTER_INSTALLED from ..utils import DJANGO_FILTER_INSTALLED
@ -133,7 +133,7 @@ def test_should_query_postgres_fields():
class Event(models.Model): class Event(models.Model):
ages = IntegerRangeField(help_text="The age ranges") ages = IntegerRangeField(help_text="The age ranges")
data = models.JSONField(help_text="Data") data = JSONField(help_text="Data")
store = HStoreField() store = HStoreField()
tags = ArrayField(models.CharField(max_length=50)) tags = ArrayField(models.CharField(max_length=50))

View File

@ -20,7 +20,7 @@ tests_require = [
"coveralls", "coveralls",
"mock", "mock",
"pytz", "pytz",
"django-filter>=22.1", "django-filter>=21.1",
"pytest-django>=4.5.2", "pytest-django>=4.5.2",
] + rest_framework_require ] + rest_framework_require
@ -65,7 +65,7 @@ setup(
"graphene @ git+https://github.com/graphql-python/graphene.git@ee1ff975d71f6590eb6933d76d12054c9839774a#egg=graphene", "graphene @ git+https://github.com/graphql-python/graphene.git@ee1ff975d71f6590eb6933d76d12054c9839774a#egg=graphene",
"graphql-core>=3.1.0,<4", "graphql-core>=3.1.0,<4",
"graphql-relay @ git+https://github.com/loft-orbital/graphql-relay-py.git@loft-v3.2.0-1#egg=graphql-relay", "graphql-relay @ git+https://github.com/loft-orbital/graphql-relay-py.git@loft-v3.2.0-1#egg=graphql-relay",
"Django>=3.2", "Django>=2.2.13",
"promise>=2.1", "promise>=2.1",
"text-unidecode", "text-unidecode",
], ],

View File

@ -1,5 +1,6 @@
[tox] [tox]
envlist = envlist =
py{37,38,39,310}-django22,
py{37,38,39,310}-django32, py{37,38,39,310}-django32,
py{38,39,310}-django{41,42,main}, py{38,39,310}-django{41,42,main},
py311-django{41,42,main} py311-django{41,42,main}
@ -15,6 +16,7 @@ python =
[gh-actions:env] [gh-actions:env]
DJANGO = DJANGO =
2.2: django22
3.2: django32 3.2: django32
4.1: django41 4.1: django41
4.2: django42 4.2: django42
@ -29,6 +31,7 @@ setenv =
deps = deps =
-e.[test] -e.[test]
psycopg2-binary psycopg2-binary
django22: Django==2.2.13
django32: Django>=3.2,<4.0 django32: Django>=3.2,<4.0
django41: Django>=4.1,<4.2 django41: Django>=4.1,<4.2
django42: Django>=4.2,<4.3 django42: Django>=4.2,<4.3