mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-18 20:22:21 +03:00
resolve subtypes of postgres RangeField to new RangeType ( with lower and upper field
This commit is contained in:
parent
6e8dce95ae
commit
4015da3b6b
|
@ -10,6 +10,12 @@ try:
|
||||||
HStoreField,
|
HStoreField,
|
||||||
JSONField,
|
JSONField,
|
||||||
RangeField,
|
RangeField,
|
||||||
|
DateTimeRangeField,
|
||||||
|
DateRangeField,
|
||||||
|
IntegerRangeField,
|
||||||
|
BigIntegerRangeField,
|
||||||
|
FloatRangeField,
|
||||||
|
DecimalRangeField
|
||||||
)
|
)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
ArrayField, HStoreField, JSONField, RangeField = (MissingType,) * 4
|
ArrayField, HStoreField, JSONField, RangeField = (MissingType,) * 4
|
||||||
|
|
|
@ -21,7 +21,26 @@ from graphene.types.json import JSONString
|
||||||
from graphene.utils.str_converters import to_camel_case, to_const
|
from graphene.utils.str_converters import to_camel_case, 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,
|
||||||
|
DateTimeRangeField,
|
||||||
|
DateRangeField,
|
||||||
|
IntegerRangeField,
|
||||||
|
BigIntegerRangeField,
|
||||||
|
FloatRangeField,
|
||||||
|
DecimalRangeField
|
||||||
|
)
|
||||||
|
|
||||||
|
from .range_types import (
|
||||||
|
DateRangeType,
|
||||||
|
DateTimeRangeType,
|
||||||
|
IntRangeType,
|
||||||
|
FloatRangeType
|
||||||
|
)
|
||||||
|
|
||||||
from .fields import DjangoListField, DjangoConnectionField
|
from .fields import DjangoListField, DjangoConnectionField
|
||||||
from .utils import import_single_dispatch
|
from .utils import import_single_dispatch
|
||||||
|
|
||||||
|
@ -236,3 +255,21 @@ def convert_posgres_range_to_string(field, registry=None):
|
||||||
if not isinstance(inner_type, (List, NonNull)):
|
if not isinstance(inner_type, (List, NonNull)):
|
||||||
inner_type = type(inner_type)
|
inner_type = type(inner_type)
|
||||||
return List(inner_type, description=field.help_text, required=not field.null)
|
return List(inner_type, description=field.help_text, required=not field.null)
|
||||||
|
|
||||||
|
@convert_django_field.register(DateTimeRangeField)
|
||||||
|
def convert_posgres_datetime_range_to_datetime(field, registry=None):
|
||||||
|
return Field(DateTimeRangeType, description=field.help_text, required=not field.null)
|
||||||
|
|
||||||
|
@convert_django_field.register(DateRangeField)
|
||||||
|
def convert_posgres_date_range_to_date(field, registry=None):
|
||||||
|
return Field(DateRangeType, description=field.help_text, required=not field.null)
|
||||||
|
|
||||||
|
@convert_django_field.register(IntegerRangeField)
|
||||||
|
@convert_django_field.register(BigIntegerRangeField)
|
||||||
|
def convert_posgres_int_range_to_int(field, registry=None):
|
||||||
|
return Field(IntRangeType, description=field.help_text, required=not field.null)
|
||||||
|
|
||||||
|
@convert_django_field.register(FloatRangeField)
|
||||||
|
@convert_django_field.register(DecimalRangeField)
|
||||||
|
def convert_posgres_float_range_to_float(field, registry=None):
|
||||||
|
return Field(FloatRangeType, description=field.help_text, required=not field.null)
|
||||||
|
|
29
graphene_django/range_types.py
Normal file
29
graphene_django/range_types.py
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
from graphene import ObjectType
|
||||||
|
from graphene import (
|
||||||
|
Float,
|
||||||
|
Int,
|
||||||
|
DateTime,
|
||||||
|
Date
|
||||||
|
)
|
||||||
|
|
||||||
|
class RangeResolver:
|
||||||
|
def resolve_lower(parent, info):
|
||||||
|
return parent.lower
|
||||||
|
def resolve_upper(parent, info):
|
||||||
|
return parent.upper
|
||||||
|
|
||||||
|
class DateTimeRangeType(RangeResolver, ObjectType):
|
||||||
|
lower = DateTime()
|
||||||
|
upper = DateTime()
|
||||||
|
|
||||||
|
class DateRangeType(RangeResolver, ObjectType):
|
||||||
|
lower = Date()
|
||||||
|
upper = Date()
|
||||||
|
|
||||||
|
class IntRangeType(RangeResolver, ObjectType):
|
||||||
|
lower = Int()
|
||||||
|
upper = Int()
|
||||||
|
|
||||||
|
class FloatRangeType(RangeResolver, ObjectType):
|
||||||
|
lower = Float()
|
||||||
|
upper = Float()
|
|
@ -165,3 +165,4 @@ class DjangoObjectType(ObjectType):
|
||||||
class ErrorType(ObjectType):
|
class ErrorType(ObjectType):
|
||||||
field = graphene.String(required=True)
|
field = graphene.String(required=True)
|
||||||
messages = graphene.List(graphene.NonNull(graphene.String), required=True)
|
messages = graphene.List(graphene.NonNull(graphene.String), required=True)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user