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 pass
try: try:
DurationField = models.DurationField
UUIDField = models.UUIDField UUIDField = models.UUIDField
except AttributeError: except AttributeError:
# Improved compatibility for Django 1.6 # Improved compatibility for Django 1.6
DurationField = MissingType
UUIDField = MissingType UUIDField = MissingType
try: try:

View File

@ -10,7 +10,7 @@ from graphene.utils.str_converters import to_const
from graphql import assert_valid_name from graphql import assert_valid_name
from .compat import (ArrayField, HStoreField, JSONField, RangeField, from .compat import (ArrayField, HStoreField, JSONField, RangeField,
RelatedObject, UUIDField) RelatedObject, UUIDField, DurationField)
from .fields import get_connection_field, DjangoListField from .fields import get_connection_field, DjangoListField
from .utils import get_related_model, import_single_dispatch 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.URLField)
@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)
def convert_field_to_string(field, registry=None): def convert_field_to_string(field, registry=None):
return String(description=field.help_text, required=not field.null) return String(description=field.help_text, required=not field.null)
@convert_django_field.register(models.AutoField) @convert_django_field.register(models.AutoField)
@convert_django_field.register(UUIDField)
def convert_field_to_id(field, registry=None): def convert_field_to_id(field, registry=None):
return ID(description=field.help_text, required=not field.null) 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.DecimalField)
@convert_django_field.register(models.FloatField) @convert_django_field.register(models.FloatField)
@convert_django_field.register(DurationField)
def convert_field_to_float(field, registry=None): def convert_field_to_float(field, registry=None):
return Float(description=field.help_text, required=not field.null) 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 graphene.types.json import JSONString
from ..compat import (ArrayField, HStoreField, JSONField, MissingType, from ..compat import (ArrayField, HStoreField, JSONField, MissingType,
RangeField) RangeField, UUIDField, DurationField)
from ..converter import convert_django_field, convert_django_field_with_choices from ..converter import convert_django_field, convert_django_field_with_choices
from ..registry import Registry from ..registry import Registry
from ..types import DjangoObjectType from ..types import DjangoObjectType
@ -80,6 +80,16 @@ def test_should_auto_convert_id():
assert_conversion(models.AutoField, graphene.ID, primary_key=True) 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(): def test_should_positive_integer_convert_int():
assert_conversion(models.PositiveIntegerField, graphene.Int) assert_conversion(models.PositiveIntegerField, graphene.Int)