mirror of
https://github.com/graphql-python/graphene.git
synced 2025-03-11 23:45:47 +03:00
Added RangeField conversion and testing
This commit is contained in:
parent
7f96500353
commit
ca0d1a3d7a
|
@ -19,6 +19,6 @@ except:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Postgres fields are only available in Django 1.8+
|
# Postgres fields are only available in Django 1.8+
|
||||||
from django.contrib.postgres.fields import ArrayField, HStoreField, JSONField
|
from django.contrib.postgres.fields import ArrayField, HStoreField, JSONField, RangeField
|
||||||
except ImportError:
|
except ImportError:
|
||||||
ArrayField, HStoreField, JSONField = (MissingType, ) * 3
|
ArrayField, HStoreField, JSONField, RangeField = (MissingType, ) * 4
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
from ...core.classtypes.objecttype import ObjectType
|
||||||
from ...core.types.definitions import List
|
from ...core.types.definitions import List
|
||||||
|
from ...core.types.field import Field
|
||||||
from ...core.types.scalars import ID, Boolean, Float, Int, String
|
from ...core.types.scalars import ID, Boolean, Float, Int, String
|
||||||
from ...core.classtypes.enum import Enum
|
from ...core.classtypes.enum import Enum
|
||||||
from .compat import RelatedObject, UUIDField, ArrayField, HStoreField, JSONField
|
from .compat import RelatedObject, UUIDField, ArrayField, HStoreField, JSONField, RangeField
|
||||||
from .utils import get_related_model, import_single_dispatch
|
from .utils import get_related_model, import_single_dispatch
|
||||||
|
|
||||||
singledispatch = import_single_dispatch()
|
singledispatch = import_single_dispatch()
|
||||||
|
@ -34,8 +36,6 @@ def convert_django_field(field):
|
||||||
@convert_django_field.register(models.GenericIPAddressField)
|
@convert_django_field.register(models.GenericIPAddressField)
|
||||||
@convert_django_field.register(models.FileField)
|
@convert_django_field.register(models.FileField)
|
||||||
@convert_django_field.register(UUIDField)
|
@convert_django_field.register(UUIDField)
|
||||||
@convert_django_field.register(HStoreField)
|
|
||||||
@convert_django_field.register(JSONField)
|
|
||||||
def convert_field_to_string(field):
|
def convert_field_to_string(field):
|
||||||
return String(description=field.help_text)
|
return String(description=field.help_text)
|
||||||
|
|
||||||
|
@ -95,6 +95,18 @@ def convert_field_to_djangomodel(field):
|
||||||
|
|
||||||
|
|
||||||
@convert_django_field.register(ArrayField)
|
@convert_django_field.register(ArrayField)
|
||||||
def convert_field_to_list(field):
|
def convert_postgres_array_to_list(field):
|
||||||
base_type = convert_django_field(field.base_field)
|
base_type = convert_django_field(field.base_field)
|
||||||
return List(base_type, description=field.help_text)
|
return List(base_type, description=field.help_text)
|
||||||
|
|
||||||
|
|
||||||
|
@convert_django_field.register(HStoreField)
|
||||||
|
@convert_django_field.register(JSONField)
|
||||||
|
def convert_posgres_field_to_string(field):
|
||||||
|
return String(description=field.help_text)
|
||||||
|
|
||||||
|
|
||||||
|
@convert_django_field.register(RangeField)
|
||||||
|
def convert_posgres_range_to_string(field):
|
||||||
|
inner_type = convert_django_field(field.base_field)
|
||||||
|
return List(inner_type, description=field.help_text)
|
||||||
|
|
|
@ -7,7 +7,7 @@ from ..converter import (
|
||||||
convert_django_field, convert_django_field_with_choices)
|
convert_django_field, convert_django_field_with_choices)
|
||||||
from ..fields import (ConnectionOrListField,
|
from ..fields import (ConnectionOrListField,
|
||||||
DjangoModelField)
|
DjangoModelField)
|
||||||
from ..compat import MissingType, ArrayField, HStoreField, JSONField
|
from ..compat import MissingType, ArrayField, HStoreField, JSONField, RangeField
|
||||||
|
|
||||||
from .models import Article, Reporter
|
from .models import Article, Reporter
|
||||||
|
|
||||||
|
@ -175,3 +175,11 @@ def test_should_postgres_hstore_convert_string():
|
||||||
reason="JSONField should exist")
|
reason="JSONField should exist")
|
||||||
def test_should_postgres_json_convert_string():
|
def test_should_postgres_json_convert_string():
|
||||||
assert_conversion(JSONField, graphene.String)
|
assert_conversion(JSONField, graphene.String)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(RangeField is MissingType,
|
||||||
|
reason="RangeField should exist")
|
||||||
|
def test_should_postgres_range_convert_list():
|
||||||
|
from django.contrib.postgres.fields import IntegerRangeField
|
||||||
|
field = assert_conversion(IntegerRangeField, graphene.List)
|
||||||
|
assert isinstance(field.type.of_type, graphene.Int)
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import pytest
|
import pytest
|
||||||
from py.test import raises
|
from py.test import raises
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
import graphene
|
import graphene
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
from graphene.contrib.django import DjangoNode, DjangoObjectType
|
from ..types import DjangoNode, DjangoObjectType
|
||||||
|
from ..compat import MissingType, ArrayField, HStoreField, JSONField, RangeField
|
||||||
|
|
||||||
from .models import Article, Reporter
|
from .models import Article, Reporter
|
||||||
|
|
||||||
|
@ -62,6 +64,42 @@ def test_should_query_well():
|
||||||
assert result.data == expected
|
assert result.data == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(RangeField is MissingType,
|
||||||
|
reason="RangeField should exist")
|
||||||
|
def test_should_query_ranges():
|
||||||
|
from django.contrib.postgres.fields import IntegerRangeField
|
||||||
|
|
||||||
|
class Event(models.Model):
|
||||||
|
ages = IntegerRangeField(help_text='Range desc')
|
||||||
|
|
||||||
|
class EventType(DjangoObjectType):
|
||||||
|
class Meta:
|
||||||
|
model = Event
|
||||||
|
|
||||||
|
class Query(graphene.ObjectType):
|
||||||
|
event = graphene.Field(EventType)
|
||||||
|
|
||||||
|
def resolve_event(self, *args, **kwargs):
|
||||||
|
return Event(ages=(0, 10))
|
||||||
|
|
||||||
|
schema = graphene.Schema(query=Query)
|
||||||
|
query = '''
|
||||||
|
query myQuery {
|
||||||
|
event {
|
||||||
|
ages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
expected = {
|
||||||
|
'event': {
|
||||||
|
'ages': [0, 10],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
result = schema.execute(query)
|
||||||
|
assert not result.errors
|
||||||
|
assert result.data == expected
|
||||||
|
|
||||||
|
|
||||||
def test_should_node():
|
def test_should_node():
|
||||||
class ReporterNode(DjangoNode):
|
class ReporterNode(DjangoNode):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user