Improved tests. Improved schema.type getter. Remove duplicated Scalar code

This commit is contained in:
Syrus Akbary 2015-12-06 15:29:54 -08:00
parent afdddafb3d
commit 5e708cc919
6 changed files with 19 additions and 65 deletions

View File

@ -1,7 +1,7 @@
import copy
import inspect
from functools import partial
from collections import OrderedDict
from functools import partial
import six

View File

@ -38,22 +38,20 @@ class Schema(object):
def __repr__(self):
return '<Schema: %s (%s)>' % (str(self.name), hash(self))
def T(self, object_type):
if not object_type:
def T(self, _type):
if not _type:
return
if inspect.isclass(object_type) and issubclass(
object_type, (BaseType, ClassType)) or isinstance(
object_type, BaseType):
if object_type not in self._types:
internal_type = object_type.internal_type(self)
self._types[object_type] = internal_type
is_objecttype = inspect.isclass(
object_type) and issubclass(object_type, ClassType)
if is_objecttype:
self.register(object_type)
return self._types[object_type]
is_classtype = inspect.isclass(_type) and issubclass(_type, ClassType)
is_instancetype = isinstance(_type, BaseType)
if is_classtype or is_instancetype:
if _type not in self._types:
internal_type = _type.internal_type(self)
self._types[_type] = internal_type
if is_classtype:
self.register(_type)
return self._types[_type]
else:
return object_type
return _type
@property
def executor(self):

View File

@ -4,7 +4,7 @@ from .definitions import List, NonNull
# Compatibility import
from .objecttype import Interface, ObjectType, Mutation, InputObjectType
from .scalars import String, ID, Boolean, Int, Float, Scalar
from .scalars import String, ID, Boolean, Int, Float
from .field import Field, InputField
__all__ = [
@ -26,5 +26,4 @@ __all__ = [
'ID',
'Boolean',
'Int',
'Float',
'Scalar']
'Float']

View File

@ -1,5 +1,5 @@
from graphql.core.type import (GraphQLBoolean, GraphQLFloat, GraphQLID,
GraphQLInt, GraphQLScalarType, GraphQLString)
GraphQLInt, GraphQLString)
from .base import MountedType
@ -22,20 +22,3 @@ class ID(MountedType):
class Float(MountedType):
T = GraphQLFloat
class Scalar(MountedType):
@classmethod
def internal_type(cls, schema):
serialize = getattr(cls, 'serialize')
parse_literal = getattr(cls, 'parse_literal')
parse_value = getattr(cls, 'parse_value')
return GraphQLScalarType(
name=cls.__name__,
description=cls.__doc__,
serialize=serialize,
parse_value=parse_value,
parse_literal=parse_literal
)

View File

@ -13,7 +13,7 @@ from ..scalars import String
def test_field_internal_type():
resolver = lambda *args: 'RESOLVED'
field = Field(String, description='My argument', resolver=resolver)
field = Field(String(), description='My argument', resolver=resolver)
class Query(ObjectType):
my_field = field

View File

@ -1,9 +1,9 @@
from graphql.core.type import (GraphQLBoolean, GraphQLFloat, GraphQLID,
GraphQLInt, GraphQLScalarType, GraphQLString)
GraphQLInt, GraphQLString)
from graphene.core.schema import Schema
from ..scalars import ID, Boolean, Float, Int, Scalar, String
from ..scalars import ID, Boolean, Float, Int, String
schema = Schema()
@ -26,29 +26,3 @@ def test_id_scalar():
def test_float_scalar():
assert schema.T(Float()) == GraphQLFloat
def test_custom_scalar():
import datetime
from graphql.core.language import ast
class DateTimeScalar(Scalar):
'''DateTimeScalar Documentation'''
@staticmethod
def serialize(dt):
return dt.isoformat()
@staticmethod
def parse_literal(node):
if isinstance(node, ast.StringValue):
return datetime.datetime.strptime(
node.value, "%Y-%m-%dT%H:%M:%S.%f")
@staticmethod
def parse_value(value):
return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f")
scalar_type = schema.T(DateTimeScalar)
assert isinstance(scalar_type, GraphQLScalarType)
assert scalar_type.name == 'DateTimeScalar'
assert scalar_type.description == 'DateTimeScalar Documentation'