Skip to content

Commit 8eaa2cf

Browse files
committed
Fixed compatibility with Django 1.6, 1.7, 1.8 and 1.9
1 parent 35d7832 commit 8eaa2cf

23 files changed

+100
-51
lines changed

.travis.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,20 @@ after_success:
7373
fi
7474
env:
7575
matrix:
76-
- TEST_TYPE=build DJANGO_VERSION=1.8
77-
- TEST_TYPE=build DJANGO_VERSION=1.9
76+
- TEST_TYPE=build
7877
global:
7978
secure: SQC0eCWCWw8bZxbLE8vQn+UjJOp3Z1m779s9SMK3lCLwJxro/VCLBZ7hj4xsrq1MtcFO2U2Kqf068symw4Hr/0amYI3HFTCFiwXAC3PAKXeURca03eNO2heku+FtnQcOjBanExTsIBQRLDXMOaUkf3MIztpLJ4LHqMfUupKmw9YSB0v40jDbSN8khBnndFykmOnVVHznFp8USoN5F0CiPpnfEvHnJkaX76lNf7Kc9XNShBTTtJsnsHMhuYQeInt0vg9HSjoIYC38Tv2hmMj1myNdzyrHF+LgRjI6ceGi50ApAnGepXC/DNRhXROfECKez+LON/ZSqBGdJhUILqC8A4WmWmIjNcwitVFp3JGBqO7LULS0BI96EtSLe8rD1rkkdTbjivajkbykM1Q0Tnmg1adzGwLxRUbTq9tJQlTTkHBCuXIkpKb1mAtb/TY7A6BqfnPi2xTc/++qEawUG7ePhscdTj0IBrUfZsUNUYZqD8E8XbSWKIuS3SHE+cZ+s/kdAsm4q+FFAlpZKOYGxIkwvgyfu4/Plfol4b7X6iAP9J3r1Kv0DgBVFst5CXEwzZs19/g0CgokQbCXf1N+xeNnUELl6/fImaR3RKP22EaABoil4z8vzl4EqxqVoH1nfhE+WlpryXsuSaF/1R+WklR7aQ1FwoCk8V8HxM2zrj4tI8k=
8079
matrix:
8180
fast_finish: true
8281
include:
82+
- python: '2.7'
83+
env: DJANGO_VERSION=1.6
84+
- python: '2.7'
85+
env: DJANGO_VERSION=1.7
86+
- python: '2.7'
87+
env: DJANGO_VERSION=1.8
88+
- python: '2.7'
89+
env: DJANGO_VERSION=1.9
8390
- python: '2.7'
8491
env: TEST_TYPE=build_website
8592
- python: '2.7'

graphene/contrib/django/compat.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django.db import models
2+
3+
try:
4+
UUIDField = models.UUIDField
5+
except AttributeError:
6+
# Improved compatibility for Django 1.6
7+
class UUIDField(object):
8+
pass
9+
10+
try:
11+
from django.db.models.related import RelatedObject
12+
except:
13+
# Improved compatibility for Django 1.6
14+
class RelatedObject(object):
15+
pass

graphene/contrib/django/converter.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
from django.db import models
22

3-
from .utils import import_single_dispatch
43
from ...core.types.scalars import ID, Boolean, Float, Int, String
4+
from .compat import RelatedObject, UUIDField
5+
from .utils import get_related_model, import_single_dispatch
56

67
singledispatch = import_single_dispatch()
78

8-
try:
9-
UUIDField = models.UUIDField
10-
except AttributeError:
11-
# Improved compatibility for Django 1.6
12-
class UUIDField(object):
13-
pass
14-
159

1610
@singledispatch
1711
def convert_django_field(field):
@@ -65,12 +59,20 @@ def convert_field_to_float(field):
6559
@convert_django_field.register(models.ManyToOneRel)
6660
def convert_field_to_list_or_connection(field):
6761
from .fields import DjangoModelField, ConnectionOrListField
68-
model_field = DjangoModelField(field.related_model)
62+
model_field = DjangoModelField(get_related_model(field))
63+
return ConnectionOrListField(model_field)
64+
65+
66+
# For Django 1.6
67+
@convert_django_field.register(RelatedObject)
68+
def convert_relatedfield_to_djangomodel(field):
69+
from .fields import DjangoModelField, ConnectionOrListField
70+
model_field = DjangoModelField(field.model)
6971
return ConnectionOrListField(model_field)
7072

7173

7274
@convert_django_field.register(models.OneToOneField)
7375
@convert_django_field.register(models.ForeignKey)
7476
def convert_field_to_djangomodel(field):
7577
from .fields import DjangoModelField
76-
return DjangoModelField(field.related_model, description=field.help_text)
78+
return DjangoModelField(get_related_model(field), description=field.help_text)

graphene/contrib/django/debug/plugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from django.db import connections
44

5-
from ....core.types import Field
65
from ....core.schema import GraphQLSchema
6+
from ....core.types import Field
77
from ....plugins import Plugin
88
from .sql.tracking import unwrap_cursor, wrap_cursor
99
from .sql.types import DjangoDebugSQL

graphene/contrib/django/debug/sql/types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .....core import Float, ObjectType, String, Boolean
1+
from .....core import Boolean, Float, ObjectType, String
22

33

44
class DjangoDebugSQL(ObjectType):

graphene/contrib/django/fields.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import warnings
22

3-
from .utils import get_type_for_model, DJANGO_FILTER_INSTALLED
4-
from .filter.fields import DjangoFilterConnectionField
53
from ...core.exceptions import SkipField
64
from ...core.fields import Field
75
from ...core.types.base import FieldType
86
from ...core.types.definitions import List
97
from ...relay import ConnectionField
108
from ...relay.utils import is_node
9+
from .filter.fields import DjangoFilterConnectionField
10+
from .utils import get_type_for_model
1111

1212

1313
class DjangoConnectionField(ConnectionField):

graphene/contrib/django/filter/fields.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from graphene.relay import ConnectionField
21
from graphene.contrib.django.filter.resolvers import FilterConnectionResolver
32
from graphene.contrib.django.utils import get_filtering_args_from_filterset
3+
from graphene.relay import ConnectionField
44

55

66
class DjangoFilterConnectionField(ConnectionField):

graphene/contrib/django/filter/filterset.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
from django.conf import settings
33
from django.db import models
44
from django.utils.text import capfirst
5+
56
from django_filters import Filter, MultipleChoiceFilter
6-
from django_filters.filterset import FilterSetMetaclass, FilterSet
7+
from django_filters.filterset import FilterSet, FilterSetMetaclass
8+
from graphene.contrib.django.forms import (GlobalIDFormField,
9+
GlobalIDMultipleChoiceField)
710
from graphql_relay.node.node import from_global_id
811

9-
from graphene.contrib.django.forms import GlobalIDFormField, GlobalIDMultipleChoiceField
10-
1112

1213
class GlobalIDFilter(Filter):
1314
field_class = GlobalIDFormField
@@ -45,6 +46,7 @@ def filter(self, qs, value):
4546

4647

4748
class GrapheneFilterSetMetaclass(FilterSetMetaclass):
49+
4850
def __new__(cls, name, bases, attrs):
4951
new_class = super(GrapheneFilterSetMetaclass, cls).__new__(cls, name, bases, attrs)
5052
# Customise the filter_overrides for Graphene
@@ -84,7 +86,6 @@ class GrapheneFilterSet(six.with_metaclass(GrapheneFilterSetMetaclass, GrapheneF
8486
DjangoFilterConnectionField will wrap FilterSets with this class as
8587
necessary
8688
"""
87-
pass
8889

8990

9091
def setup_filterset(filterset_class):

graphene/contrib/django/filter/resolvers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.core.exceptions import ImproperlyConfigured
22

3-
from graphene.contrib.django.filter.filterset import setup_filterset, custom_filterset_factory
3+
from graphene.contrib.django.filter.filterset import (custom_filterset_factory,
4+
setup_filterset)
45
from graphene.contrib.django.resolvers import BaseQuerySetConnectionResolver
56

67

graphene/contrib/django/form_converter.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
from django import forms
22
from django.forms.fields import BaseTemporalField
3-
from graphene import String, Int, Boolean, Float, ID
4-
from graphene.contrib.django.forms import GlobalIDFormField, GlobalIDMultipleChoiceField
3+
4+
from graphene import ID, Boolean, Float, Int, String
5+
from graphene.contrib.django.forms import (GlobalIDFormField,
6+
GlobalIDMultipleChoiceField)
57
from graphene.contrib.django.utils import import_single_dispatch
68
from graphene.core.types.definitions import List
9+
710
singledispatch = import_single_dispatch()
811

912
try:

0 commit comments

Comments
 (0)