Added duration field and improved UUID conversion

This commit is contained in:
Syrus Akbary 2016-10-15 16:43:27 -07:00
parent 459270cc09
commit 8136223bb1
3 changed files with 16 additions and 3 deletions

View File

@ -5,9 +5,11 @@ class MissingType(object):
pass
try:
DurationField = models.DurationField
UUIDField = models.UUIDField
except AttributeError:
# Improved compatibility for Django 1.6
DurationField = MissingType
UUIDField = MissingType
try:

View File

@ -10,7 +10,7 @@ from graphene.utils.str_converters import to_const
from graphql import assert_valid_name
from .compat import (ArrayField, HStoreField, JSONField, RangeField,
RelatedObject, UUIDField)
RelatedObject, UUIDField, DurationField)
from .fields import get_connection_field, DjangoListField
from .utils import get_related_model, import_single_dispatch
@ -71,12 +71,12 @@ def convert_django_field(field, registry=None):
@convert_django_field.register(models.URLField)
@convert_django_field.register(models.GenericIPAddressField)
@convert_django_field.register(models.FileField)
@convert_django_field.register(UUIDField)
def convert_field_to_string(field, registry=None):
return String(description=field.help_text, required=not field.null)
@convert_django_field.register(models.AutoField)
@convert_django_field.register(UUIDField)
def convert_field_to_id(field, registry=None):
return ID(description=field.help_text, required=not field.null)
@ -102,6 +102,7 @@ def convert_field_to_nullboolean(field, registry=None):
@convert_django_field.register(models.DecimalField)
@convert_django_field.register(models.FloatField)
@convert_django_field.register(DurationField)
def convert_field_to_float(field, registry=None):
return Float(description=field.help_text, required=not field.null)

View File

@ -9,7 +9,7 @@ from graphene.types.datetime import DateTime
from graphene.types.json import JSONString
from ..compat import (ArrayField, HStoreField, JSONField, MissingType,
RangeField)
RangeField, UUIDField, DurationField)
from ..converter import convert_django_field, convert_django_field_with_choices
from ..registry import Registry
from ..types import DjangoObjectType
@ -80,6 +80,16 @@ def test_should_auto_convert_id():
assert_conversion(models.AutoField, graphene.ID, primary_key=True)
@pytest.mark.skipif(UUIDField == MissingType, reason="requires Django UUIDField")
def test_should_auto_convert_id():
assert_conversion(UUIDField, graphene.ID)
@pytest.mark.skipif(DurationField == MissingType, reason="requires Django DurationField")
def test_should_auto_convert_duration():
assert_conversion(DurationField, graphene.Float)
def test_should_positive_integer_convert_int():
assert_conversion(models.PositiveIntegerField, graphene.Int)