mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-23 01:56:54 +03:00
Fixed tests and flake errors
This commit is contained in:
parent
05144487ce
commit
387b997b1d
|
@ -23,10 +23,10 @@ script:
|
||||||
- |
|
- |
|
||||||
if [ "$TEST_TYPE" = lint ]; then
|
if [ "$TEST_TYPE" = lint ]; then
|
||||||
echo "Checking Python code lint."
|
echo "Checking Python code lint."
|
||||||
flake8
|
flake8 graphene
|
||||||
exit
|
exit
|
||||||
elif [ "$TEST_TYPE" = build ]; then
|
elif [ "$TEST_TYPE" = build ]; then
|
||||||
py.test --cov=graphene
|
py.test --cov=graphene graphene examples
|
||||||
fi
|
fi
|
||||||
after_success:
|
after_success:
|
||||||
- |
|
- |
|
||||||
|
|
|
@ -1,4 +1,10 @@
|
||||||
from .definitions import GrapheneInterfaceType, GrapheneObjectType, GrapheneScalarType, GrapheneEnumType, GrapheneInputObjectType
|
from .definitions import (
|
||||||
|
GrapheneInterfaceType,
|
||||||
|
GrapheneObjectType,
|
||||||
|
GrapheneScalarType,
|
||||||
|
GrapheneEnumType,
|
||||||
|
GrapheneInputObjectType
|
||||||
|
)
|
||||||
from .utils import values_from_enum
|
from .utils import values_from_enum
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from graphql import GraphQLObjectType, GraphQLInterfaceType, GraphQLScalarType, GraphQLEnumType, GraphQLInputObjectType
|
from graphql import (GraphQLEnumType, GraphQLInputObjectType,
|
||||||
|
GraphQLInterfaceType, GraphQLObjectType,
|
||||||
|
GraphQLScalarType)
|
||||||
|
|
||||||
|
|
||||||
class GrapheneGraphQLType(object):
|
class GrapheneGraphQLType(object):
|
||||||
|
@ -6,6 +8,7 @@ class GrapheneGraphQLType(object):
|
||||||
A class for extending the base GraphQLType with the related
|
A class for extending the base GraphQLType with the related
|
||||||
graphene_type
|
graphene_type
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.graphene_type = kwargs.pop('graphene_type')
|
self.graphene_type = kwargs.pop('graphene_type')
|
||||||
super(GrapheneGraphQLType, self).__init__(*args, **kwargs)
|
super(GrapheneGraphQLType, self).__init__(*args, **kwargs)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from graphql.type import GraphQLEnumValue
|
from graphql.type import GraphQLEnumValue
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import re
|
|
||||||
import copy
|
import copy
|
||||||
|
import re
|
||||||
|
from collections import Iterable
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from collections import Iterable, OrderedDict
|
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
@ -35,8 +35,8 @@ class ConnectionMeta(ObjectTypeMeta):
|
||||||
interfaces=[],
|
interfaces=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
Edge = attrs.pop('Edge', None)
|
edge_class = attrs.pop('Edge', None)
|
||||||
edge_fields = props(Edge) if Edge else {}
|
edge_fields = props(edge_class) if edge_class else {}
|
||||||
edge_fields = get_fields(ObjectType, edge_fields, ())
|
edge_fields = get_fields(ObjectType, edge_fields, ())
|
||||||
|
|
||||||
connection_fields = copy_fields(Field, get_fields(ObjectType, attrs, bases))
|
connection_fields = copy_fields(Field, get_fields(ObjectType, attrs, bases))
|
||||||
|
@ -108,7 +108,8 @@ class IterableConnectionField(Field):
|
||||||
iterable = resolver(root, args, context, info)
|
iterable = resolver(root, args, context, info)
|
||||||
# if isinstance(resolved, self.type.graphene)
|
# if isinstance(resolved, self.type.graphene)
|
||||||
assert isinstance(
|
assert isinstance(
|
||||||
iterable, Iterable), 'Resolved value from the connection field have to be iterable. Received "{}"'.format(iterable)
|
iterable, Iterable), 'Resolved value from the connection field have to be iterable. Received "{}"'.format(
|
||||||
|
iterable)
|
||||||
connection = connection_from_list(
|
connection = connection_from_list(
|
||||||
iterable,
|
iterable,
|
||||||
args,
|
args,
|
||||||
|
|
|
@ -31,11 +31,11 @@ class ClientIDMutationMeta(MutationMeta):
|
||||||
description=None,
|
description=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
Input = attrs.pop('Input', None)
|
input_class = attrs.pop('Input', None)
|
||||||
|
|
||||||
cls = super_new(cls, name, bases, dict(attrs, _meta=options))
|
cls = super_new(cls, name, bases, dict(attrs, _meta=options))
|
||||||
|
|
||||||
input_fields = props(Input) if Input else {}
|
input_fields = props(input_class) if input_class else {}
|
||||||
input_local_fields = copy_fields(InputField, get_fields(InputObjectType, input_fields, ()))
|
input_local_fields = copy_fields(InputField, get_fields(InputObjectType, input_fields, ()))
|
||||||
output_fields = copy_fields(Field, get_fields(ObjectType, attrs, bases))
|
output_fields = copy_fields(Field, get_fields(ObjectType, attrs, bases))
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,10 @@ from graphql_relay import from_global_id, node_definitions, to_global_id
|
||||||
|
|
||||||
from ..types.field import Field
|
from ..types.field import Field
|
||||||
from ..types.interface import Interface
|
from ..types.interface import Interface
|
||||||
from ..types.objecttype import ObjectType, ObjectTypeMeta, is_objecttype
|
from ..types.objecttype import ObjectType, ObjectTypeMeta
|
||||||
from ..types.options import Options
|
from ..types.options import Options
|
||||||
from .connection import Connection
|
|
||||||
|
|
||||||
from ..utils.copy_fields import copy_fields
|
from ..utils.copy_fields import copy_fields
|
||||||
|
from .connection import Connection
|
||||||
|
|
||||||
|
|
||||||
# We inherit from ObjectTypeMeta as we want to allow
|
# We inherit from ObjectTypeMeta as we want to allow
|
||||||
|
@ -40,7 +39,8 @@ class NodeMeta(ObjectTypeMeta):
|
||||||
cls = type.__new__(cls, name, bases, dict(attrs, _meta=options))
|
cls = type.__new__(cls, name, bases, dict(attrs, _meta=options))
|
||||||
get_node_from_global_id = getattr(cls, 'get_node_from_global_id', None)
|
get_node_from_global_id = getattr(cls, 'get_node_from_global_id', None)
|
||||||
id_resolver = getattr(cls, 'id_resolver', None)
|
id_resolver = getattr(cls, 'id_resolver', None)
|
||||||
assert get_node_from_global_id, '{}.get_node_from_global_id method is required by the Node interface.'.format(cls.__name__)
|
assert get_node_from_global_id, '{}.get_node_from_global_id method is required by the Node interface.'.format(
|
||||||
|
cls.__name__)
|
||||||
node_interface, node_field = node_definitions(
|
node_interface, node_field = node_definitions(
|
||||||
get_node_from_global_id,
|
get_node_from_global_id,
|
||||||
id_resolver=id_resolver,
|
id_resolver=id_resolver,
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
from .objecttype import ObjectType
|
from .objecttype import ObjectType, Interface
|
||||||
from .interface import Interface
|
|
||||||
from .scalars import Scalar, String, ID, Int, Float, Boolean
|
from .scalars import Scalar, String, ID, Int, Float, Boolean
|
||||||
from .schema import Schema
|
from .schema import Schema
|
||||||
from .structures import List, NonNull
|
from .structures import List, NonNull
|
||||||
|
|
|
@ -41,7 +41,7 @@ class Argument(GraphQLArgument, OrderedType):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def copy_from(cls, argument):
|
def copy_from(cls, argument):
|
||||||
if isinstance (argument, (GraphQLArgumentDefinition, Argument)):
|
if isinstance(argument, (GraphQLArgumentDefinition, Argument)):
|
||||||
name = argument.name
|
name = argument.name
|
||||||
else:
|
else:
|
||||||
name = None
|
name = None
|
||||||
|
|
|
@ -1,20 +1,27 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
try:
|
|
||||||
import iso8601
|
|
||||||
except:
|
|
||||||
raise ImportError("iso8601 package is required for DateTime Scalar.\nYou can install it using: pip install iso8601.")
|
|
||||||
from graphql.language import ast
|
from graphql.language import ast
|
||||||
|
|
||||||
from .scalars import Scalar
|
from .scalars import Scalar
|
||||||
|
|
||||||
|
try:
|
||||||
|
import iso8601
|
||||||
|
except:
|
||||||
|
raise ImportError(
|
||||||
|
"iso8601 package is required for DateTime Scalar.\n"
|
||||||
|
"You can install it using: pip install iso8601."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class DateTime(Scalar):
|
class DateTime(Scalar):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def serialize(dt):
|
def serialize(dt):
|
||||||
assert isinstance(dt, (datetime.datetime, datetime.date)), 'Received not compatible datetime "{}"'.format(repr(dt))
|
assert isinstance(dt, (datetime.datetime, datetime.date)), (
|
||||||
|
'Received not compatible datetime "{}"'.format(repr(dt))
|
||||||
|
)
|
||||||
return dt.isoformat()
|
return dt.isoformat()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -2,6 +2,7 @@ from collections import OrderedDict
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
from ..generators import generate_enum
|
||||||
from ..utils.is_base_type import is_base_type
|
from ..utils.is_base_type import is_base_type
|
||||||
from .options import Options
|
from .options import Options
|
||||||
from .unmountedtype import UnmountedType
|
from .unmountedtype import UnmountedType
|
||||||
|
@ -11,8 +12,6 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from ..utils.enum import Enum as PyEnum
|
from ..utils.enum import Enum as PyEnum
|
||||||
|
|
||||||
from ..generators import generate_enum
|
|
||||||
|
|
||||||
|
|
||||||
class EnumTypeMeta(type):
|
class EnumTypeMeta(type):
|
||||||
|
|
||||||
|
@ -43,10 +42,10 @@ class EnumTypeMeta(type):
|
||||||
|
|
||||||
return cls
|
return cls
|
||||||
|
|
||||||
def __prepare__(name, bases, **kwargs):
|
def __prepare__(name, bases, **kwargs): # noqa: N805
|
||||||
return OrderedDict()
|
return OrderedDict()
|
||||||
|
|
||||||
def __call__(cls, *args, **kwargs):
|
def __call__(cls, *args, **kwargs): # noqa: N805
|
||||||
if cls is Enum:
|
if cls is Enum:
|
||||||
description = kwargs.pop('description', None)
|
description = kwargs.pop('description', None)
|
||||||
return cls.from_enum(PyEnum(*args, **kwargs), description=description)
|
return cls.from_enum(PyEnum(*args, **kwargs), description=description)
|
||||||
|
@ -57,5 +56,5 @@ class Enum(six.with_metaclass(EnumTypeMeta, UnmountedType)):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_enum(cls, enum, description=None):
|
def from_enum(cls, enum, description=None):
|
||||||
Meta = type('Meta', (object,), {'enum': enum, 'description': description})
|
meta_class = type('Meta', (object,), {'enum': enum, 'description': description})
|
||||||
return type(Meta.enum.__name__, (Enum,), {'Meta': Meta})
|
return type(meta_class.enum.__name__, (Enum,), {'Meta': meta_class})
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from collections import OrderedDict
|
|
||||||
import inspect
|
import inspect
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
from graphql.type import GraphQLField, GraphQLInputObjectField, GraphQLFieldDefinition
|
from graphql.type import (GraphQLField, GraphQLFieldDefinition,
|
||||||
|
GraphQLInputObjectField)
|
||||||
from graphql.utils.assert_valid_name import assert_valid_name
|
from graphql.utils.assert_valid_name import assert_valid_name
|
||||||
|
|
||||||
from ..utils.orderedtype import OrderedType
|
from ..utils.orderedtype import OrderedType
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
from ..generators import generate_inputobjecttype
|
||||||
from ..utils.copy_fields import copy_fields
|
from ..utils.copy_fields import copy_fields
|
||||||
from ..utils.get_fields import get_fields
|
from ..utils.get_fields import get_fields
|
||||||
from ..utils.is_base_type import is_base_type
|
from ..utils.is_base_type import is_base_type
|
||||||
|
@ -9,9 +10,6 @@ from .options import Options
|
||||||
from .unmountedtype import UnmountedType
|
from .unmountedtype import UnmountedType
|
||||||
|
|
||||||
|
|
||||||
from ..generators import generate_inputobjecttype
|
|
||||||
|
|
||||||
|
|
||||||
class InputObjectTypeMeta(type):
|
class InputObjectTypeMeta(type):
|
||||||
|
|
||||||
def __new__(cls, name, bases, attrs):
|
def __new__(cls, name, bases, attrs):
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
from .objecttype import Interface
|
from .objecttype import Interface
|
||||||
|
|
||||||
|
__all__ = ['Interface']
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from graphql.language import ast
|
from graphql.language import ast
|
||||||
|
|
||||||
from .scalars import Scalar
|
from .scalars import Scalar
|
||||||
|
|
|
@ -16,10 +16,10 @@ class MutationMeta(ObjectTypeMeta):
|
||||||
if not is_base_type(bases, MutationMeta):
|
if not is_base_type(bases, MutationMeta):
|
||||||
return type.__new__(cls, name, bases, attrs)
|
return type.__new__(cls, name, bases, attrs)
|
||||||
|
|
||||||
Input = attrs.pop('Input', None)
|
input_class = attrs.pop('Input', None)
|
||||||
|
|
||||||
cls = cls._create_objecttype(cls, name, bases, attrs)
|
cls = cls._create_objecttype(cls, name, bases, attrs)
|
||||||
field_args = props(Input) if Input else {}
|
field_args = props(input_class) if input_class else {}
|
||||||
resolver = getattr(cls, 'mutate', None)
|
resolver = getattr(cls, 'mutate', None)
|
||||||
assert resolver, 'All mutations must define a mutate method in it'
|
assert resolver, 'All mutations must define a mutate method in it'
|
||||||
cls.Field = partial(Field, cls, args=field_args, resolver=resolver)
|
cls.Field = partial(Field, cls, args=field_args, resolver=resolver)
|
||||||
|
|
|
@ -46,10 +46,10 @@ class ObjectTypeMeta(type):
|
||||||
|
|
||||||
return cls._create_objecttype(cls, name, bases, attrs)
|
return cls._create_objecttype(cls, name, bases, attrs)
|
||||||
|
|
||||||
def get_interfaces(cls, bases):
|
def get_interfaces(cls, bases): # noqa: N805
|
||||||
return (b for b in bases if issubclass(b, Interface))
|
return (b for b in bases if issubclass(b, Interface))
|
||||||
|
|
||||||
def is_object_type(cls):
|
def is_object_type(cls): # noqa: N805
|
||||||
return issubclass(cls, ObjectType)
|
return issubclass(cls, ObjectType)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -3,12 +3,11 @@ import six
|
||||||
from graphql import (GraphQLBoolean, GraphQLFloat, GraphQLID, GraphQLInt,
|
from graphql import (GraphQLBoolean, GraphQLFloat, GraphQLID, GraphQLInt,
|
||||||
GraphQLString)
|
GraphQLString)
|
||||||
|
|
||||||
|
from ..generators import generate_scalar
|
||||||
from ..utils.is_base_type import is_base_type
|
from ..utils.is_base_type import is_base_type
|
||||||
from .options import Options
|
from .options import Options
|
||||||
from .unmountedtype import UnmountedType
|
from .unmountedtype import UnmountedType
|
||||||
|
|
||||||
from ..generators import generate_scalar
|
|
||||||
|
|
||||||
|
|
||||||
class ScalarTypeMeta(type):
|
class ScalarTypeMeta(type):
|
||||||
|
|
||||||
|
@ -44,8 +43,8 @@ def construct_scalar_class(graphql_type):
|
||||||
# class String(Scalar):
|
# class String(Scalar):
|
||||||
# class Meta:
|
# class Meta:
|
||||||
# graphql_type = graphql_type
|
# graphql_type = graphql_type
|
||||||
Meta = type('Meta', (object,), {'graphql_type': graphql_type})
|
meta_class = type('Meta', (object,), {'graphql_type': graphql_type})
|
||||||
return type(graphql_type.name, (Scalar, ), {'Meta': Meta})
|
return type(graphql_type.name, (Scalar, ), {'Meta': meta_class})
|
||||||
|
|
||||||
|
|
||||||
String = construct_scalar_class(GraphQLString)
|
String = construct_scalar_class(GraphQLString)
|
||||||
|
|
|
@ -4,9 +4,9 @@ import pytest
|
||||||
|
|
||||||
from graphene.utils.get_graphql_type import get_graphql_type
|
from graphene.utils.get_graphql_type import get_graphql_type
|
||||||
from graphql import graphql
|
from graphql import graphql
|
||||||
from graphql.type import (GraphQLBoolean, GraphQLFloat, GraphQLInt,
|
|
||||||
GraphQLScalarType, GraphQLString, GraphQLFieldDefinition)
|
|
||||||
from graphql.language import ast
|
from graphql.language import ast
|
||||||
|
from graphql.type import (GraphQLBoolean, GraphQLFieldDefinition, GraphQLFloat,
|
||||||
|
GraphQLInt, GraphQLScalarType, GraphQLString)
|
||||||
|
|
||||||
from ..field import Field
|
from ..field import Field
|
||||||
from ..objecttype import ObjectType
|
from ..objecttype import ObjectType
|
||||||
|
|
|
@ -8,8 +8,6 @@ def is_graphene_type(_type):
|
||||||
from ..types.interface import Interface
|
from ..types.interface import Interface
|
||||||
from ..types.scalars import Scalar
|
from ..types.scalars import Scalar
|
||||||
from ..types.enum import Enum
|
from ..types.enum import Enum
|
||||||
from ..relay.mutation import ClientIDMutation
|
|
||||||
from ..relay.connection import Connection
|
|
||||||
|
|
||||||
return inspect.isclass(_type) and hasattr(_type, '_meta') and issubclass(_type, (
|
return inspect.isclass(_type) and hasattr(_type, '_meta') and issubclass(_type, (
|
||||||
Interface,
|
Interface,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user