mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-11-04 18:07:48 +03:00 
			
		
		
		
	Added RangeField conversion and testing
This commit is contained in:
		
							parent
							
								
									7f96500353
								
							
						
					
					
						commit
						ca0d1a3d7a
					
				| 
						 | 
				
			
			@ -19,6 +19,6 @@ except:
 | 
			
		|||
 | 
			
		||||
try:
 | 
			
		||||
    # 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:
 | 
			
		||||
    ArrayField, HStoreField, JSONField = (MissingType, ) * 3
 | 
			
		||||
    ArrayField, HStoreField, JSONField, RangeField = (MissingType, ) * 4
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,11 @@
 | 
			
		|||
from django.db import models
 | 
			
		||||
 | 
			
		||||
from ...core.classtypes.objecttype import ObjectType
 | 
			
		||||
from ...core.types.definitions import List
 | 
			
		||||
from ...core.types.field import Field
 | 
			
		||||
from ...core.types.scalars import ID, Boolean, Float, Int, String
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
singledispatch = import_single_dispatch()
 | 
			
		||||
| 
						 | 
				
			
			@ -34,8 +36,6 @@ def convert_django_field(field):
 | 
			
		|||
@convert_django_field.register(models.GenericIPAddressField)
 | 
			
		||||
@convert_django_field.register(models.FileField)
 | 
			
		||||
@convert_django_field.register(UUIDField)
 | 
			
		||||
@convert_django_field.register(HStoreField)
 | 
			
		||||
@convert_django_field.register(JSONField)
 | 
			
		||||
def convert_field_to_string(field):
 | 
			
		||||
    return String(description=field.help_text)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +95,18 @@ def convert_field_to_djangomodel(field):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
@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)
 | 
			
		||||
    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)
 | 
			
		||||
from ..fields import (ConnectionOrListField,
 | 
			
		||||
                      DjangoModelField)
 | 
			
		||||
from ..compat import MissingType, ArrayField, HStoreField, JSONField
 | 
			
		||||
from ..compat import MissingType, ArrayField, HStoreField, JSONField, RangeField
 | 
			
		||||
 | 
			
		||||
from .models import Article, Reporter
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -175,3 +175,11 @@ def test_should_postgres_hstore_convert_string():
 | 
			
		|||
                    reason="JSONField should exist")
 | 
			
		||||
def test_should_postgres_json_convert_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
 | 
			
		||||
from py.test import raises
 | 
			
		||||
from django.db import models
 | 
			
		||||
 | 
			
		||||
import graphene
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +64,42 @@ def test_should_query_well():
 | 
			
		|||
    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():
 | 
			
		||||
    class ReporterNode(DjangoNode):
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user