diff --git a/examples/context_example.py b/examples/context_example.py index 058e578b..d1d273d6 100644 --- a/examples/context_example.py +++ b/examples/context_example.py @@ -12,6 +12,7 @@ class Query(graphene.ObjectType): def resolve_me(self, args, context, info): return context['user'] + schema = graphene.Schema(query=Query) query = ''' query something{ diff --git a/examples/simple_example.py b/examples/simple_example.py index 2bc9b44f..e8023266 100644 --- a/examples/simple_example.py +++ b/examples/simple_example.py @@ -14,6 +14,7 @@ class Query(graphene.ObjectType): def resolve_patron(self, args, context, info): return Patron(id=1, name='Syrus', age=27) + schema = graphene.Schema(query=Query) query = ''' query something{ diff --git a/examples/starwars/tests/test_query.py b/examples/starwars/tests/test_query.py index e6a70735..d88076a5 100644 --- a/examples/starwars/tests/test_query.py +++ b/examples/starwars/tests/test_query.py @@ -1,4 +1,5 @@ from graphene.test import Client + from ..data import setup from ..schema import schema @@ -6,6 +7,7 @@ setup() client = Client(schema) + def test_hero_name_query(snapshot): query = ''' query HeroNameQuery { @@ -15,7 +17,6 @@ def test_hero_name_query(snapshot): } ''' snapshot.assert_match(client.execute(query)) - def test_hero_name_and_friends_query(snapshot): diff --git a/examples/starwars_relay/schema.py b/examples/starwars_relay/schema.py index f914dc2b..103576c4 100644 --- a/examples/starwars_relay/schema.py +++ b/examples/starwars_relay/schema.py @@ -18,6 +18,7 @@ class Ship(graphene.ObjectType): class ShipConnection(relay.Connection): + class Meta: node = Ship diff --git a/examples/starwars_relay/tests/test_connections.py b/examples/starwars_relay/tests/test_connections.py index e3ecfa7b..bf26c0ec 100644 --- a/examples/starwars_relay/tests/test_connections.py +++ b/examples/starwars_relay/tests/test_connections.py @@ -1,4 +1,5 @@ from graphene.test import Client + from ..data import setup from ..schema import schema diff --git a/examples/starwars_relay/tests/test_mutation.py b/examples/starwars_relay/tests/test_mutation.py index 2c07f08c..fb4ab7ad 100644 --- a/examples/starwars_relay/tests/test_mutation.py +++ b/examples/starwars_relay/tests/test_mutation.py @@ -1,4 +1,5 @@ from graphene.test import Client + from ..data import setup from ..schema import schema diff --git a/examples/starwars_relay/tests/test_objectidentification.py b/examples/starwars_relay/tests/test_objectidentification.py index 9ee1d495..28a5decb 100644 --- a/examples/starwars_relay/tests/test_objectidentification.py +++ b/examples/starwars_relay/tests/test_objectidentification.py @@ -1,4 +1,5 @@ from graphene.test import Client + from ..data import setup from ..schema import schema diff --git a/graphene/__init__.py b/graphene/__init__.py index c15f2cbe..08351d1a 100644 --- a/graphene/__init__.py +++ b/graphene/__init__.py @@ -74,4 +74,7 @@ if not __SETUP__: 'ConnectionField', 'PageInfo', 'lazy_import', + + # Deprecated + 'AbstractType', ] diff --git a/graphene/pyutils/tests/test_enum.py b/graphene/pyutils/tests/test_enum.py index bf15a620..8854f4c2 100644 --- a/graphene/pyutils/tests/test_enum.py +++ b/graphene/pyutils/tests/test_enum.py @@ -21,6 +21,7 @@ def test__is_dunder(): for name in non_dunder_names: assert _is_dunder(name) is False + def test__is_sunder(): sunder_names = [ '_i_', diff --git a/graphene/relay/connection.py b/graphene/relay/connection.py index dea5feab..ed545891 100644 --- a/graphene/relay/connection.py +++ b/graphene/relay/connection.py @@ -2,16 +2,13 @@ import re from collections import Iterable, OrderedDict from functools import partial -import six - from graphql_relay import connection_from_list from promise import Promise, is_thenable -from ..types import (Boolean, Enum, Int, Interface, List, NonNull, Scalar, String, - Union) +from ..types import (Boolean, Enum, Int, Interface, List, NonNull, Scalar, + String, Union) from ..types.field import Field from ..types.objecttype import ObjectType, ObjectTypeOptions -from ..utils.props import props from .node import is_node @@ -44,8 +41,10 @@ class ConnectionOptions(ObjectTypeOptions): class Connection(ObjectType): + class Meta: abstract = True + @classmethod def __init_subclass_with_meta__(cls, node=None, name=None, **options): _meta = ConnectionOptions(cls) @@ -60,6 +59,7 @@ class Connection(ObjectType): edge_class = getattr(cls, 'Edge', None) _node = node + class EdgeBase(object): node = Field(_node, description='The item at the end of the edge') cursor = String(required=True, description='A cursor for use in pagination') diff --git a/graphene/relay/mutation.py b/graphene/relay/mutation.py index 3b94e635..ea9522bf 100644 --- a/graphene/relay/mutation.py +++ b/graphene/relay/mutation.py @@ -3,12 +3,12 @@ from collections import OrderedDict from promise import Promise -from ..types import Field, AbstractType, Argument, InputObjectType, String, Field -from ..types.mutation import Mutation, MutationOptions -from ..utils.props import props +from ..types import Field, InputObjectType, String +from ..types.mutation import Mutation class ClientIDMutation(Mutation): + class Meta: abstract = True @@ -17,7 +17,7 @@ class ClientIDMutation(Mutation): input_class = getattr(cls, 'Input', None) name = name or cls.__name__ base_name = re.sub('Payload$', '', name) - + assert not output, "Can't specify any output" assert not arguments, "Can't specify any arguments" @@ -28,8 +28,8 @@ class ClientIDMutation(Mutation): cls.Input = type('{}Input'.format(base_name), bases, { 'client_mutation_id': String(name='clientMutationId') - }) - + }) + arguments = OrderedDict( input=cls.Input(required=True) # 'client_mutation_id': String(name='clientMutationId') @@ -39,7 +39,7 @@ class ClientIDMutation(Mutation): assert mutate_and_get_payload, ( "{name}.mutate_and_get_payload method is required" " in a ClientIDMutation.").format(name=name) - + if not name: name = '{}Payload'.format(base_name) diff --git a/graphene/relay/node.py b/graphene/relay/node.py index 33a2628d..ca31447d 100644 --- a/graphene/relay/node.py +++ b/graphene/relay/node.py @@ -1,13 +1,11 @@ from collections import OrderedDict from functools import partial -import six - from graphql_relay import from_global_id, to_global_id from ..types import ID, Field, Interface, ObjectType -from ..types.utils import get_type from ..types.interface import InterfaceOptions +from ..types.utils import get_type def is_node(objecttype): @@ -60,6 +58,7 @@ class NodeField(Field): class AbstractNode(Interface): + class Meta: abstract = True diff --git a/graphene/relay/tests/test_connection.py b/graphene/relay/tests/test_connection.py index f44bc5ab..c769eb89 100644 --- a/graphene/relay/tests/test_connection.py +++ b/graphene/relay/tests/test_connection.py @@ -1,6 +1,6 @@ -from ...types import Field, List, NonNull, ObjectType, String, Argument, Int -from ..connection import Connection, PageInfo, ConnectionField +from ...types import Argument, Field, Int, List, NonNull, ObjectType, String +from ..connection import Connection, ConnectionField, PageInfo from ..node import Node @@ -104,6 +104,7 @@ def test_pageinfo(): def test_connectionfield(): class MyObjectConnection(Connection): + class Meta: node = MyObject @@ -118,6 +119,7 @@ def test_connectionfield(): def test_connectionfield_custom_args(): class MyObjectConnection(Connection): + class Meta: node = MyObject diff --git a/graphene/relay/tests/test_connection_query.py b/graphene/relay/tests/test_connection_query.py index 3b543552..11342a44 100644 --- a/graphene/relay/tests/test_connection_query.py +++ b/graphene/relay/tests/test_connection_query.py @@ -19,6 +19,7 @@ class Letter(ObjectType): class LetterConnection(Connection): + class Meta: node = Letter diff --git a/graphene/relay/tests/test_global_id.py b/graphene/relay/tests/test_global_id.py index b0a6c5cb..6e53bccc 100644 --- a/graphene/relay/tests/test_global_id.py +++ b/graphene/relay/tests/test_global_id.py @@ -1,8 +1,8 @@ from graphql_relay import to_global_id -from ..node import Node, GlobalID -from ...types import NonNull, ID, ObjectType, String +from ...types import ID, NonNull, ObjectType, String from ...types.definitions import GrapheneObjectType +from ..node import GlobalID, Node class CustomNode(Node): diff --git a/graphene/relay/tests/test_mutation.py b/graphene/relay/tests/test_mutation.py index 6fb2658d..32ff07b8 100644 --- a/graphene/relay/tests/test_mutation.py +++ b/graphene/relay/tests/test_mutation.py @@ -1,11 +1,11 @@ import pytest -from ...types import ( Argument, Field, InputField, ID, - InputObjectType, NonNull, ObjectType, Schema) +from promise import Promise + +from ...types import (ID, Argument, Field, InputField, InputObjectType, + NonNull, ObjectType, Schema) from ...types.scalars import String from ..mutation import ClientIDMutation -from ..node import Node -from promise import Promise class SharedFields(object): @@ -20,6 +20,7 @@ class MyNode(ObjectType): class SaySomething(ClientIDMutation): + class Input: what = String() @@ -32,6 +33,7 @@ class SaySomething(ClientIDMutation): class SaySomethingPromise(ClientIDMutation): + class Input: what = String() @@ -50,6 +52,7 @@ class MyEdge(ObjectType): class OtherMutation(ClientIDMutation): + class Input(SharedFields): additional_field = String() diff --git a/graphene/relay/tests/test_node.py b/graphene/relay/tests/test_node.py index 9fdaa702..e0f65cdd 100644 --- a/graphene/relay/tests/test_node.py +++ b/graphene/relay/tests/test_node.py @@ -3,7 +3,6 @@ from collections import OrderedDict from graphql_relay import to_global_id from ...types import ObjectType, Schema, String -from ..connection import Connection from ..node import Node @@ -105,7 +104,7 @@ def test_node_field_only_type_wrong(): ) assert len(executed.errors) == 1 assert str(executed.errors[0]) == 'Must receive an MyOtherNode id.' - assert executed.data == { 'onlyNode': None } + assert executed.data == {'onlyNode': None} def test_node_field_only_lazy_type(): @@ -122,7 +121,7 @@ def test_node_field_only_lazy_type_wrong(): ) assert len(executed.errors) == 1 assert str(executed.errors[0]) == 'Must receive an MyOtherNode id.' - assert executed.data == { 'onlyNodeLazy': None } + assert executed.data == {'onlyNodeLazy': None} def test_str_schema(): diff --git a/graphene/test/__init__.py b/graphene/test/__init__.py index a613d905..f7823f48 100644 --- a/graphene/test/__init__.py +++ b/graphene/test/__init__.py @@ -29,6 +29,7 @@ def format_execution_result(execution_result, format_error): class Client(object): + def __init__(self, schema, format_error=None, **execute_options): assert isinstance(schema, Schema) self.schema = schema diff --git a/graphene/tests/issues/test_313.py b/graphene/tests/issues/test_313.py index 1a67a8ec..ed89e45c 100644 --- a/graphene/tests/issues/test_313.py +++ b/graphene/tests/issues/test_313.py @@ -3,9 +3,11 @@ import graphene from graphene import resolve_only_args + class Query(graphene.ObjectType): rand = graphene.String() + class Success(graphene.ObjectType): yeah = graphene.String() @@ -15,11 +17,13 @@ class Error(graphene.ObjectType): class CreatePostResult(graphene.Union): + class Meta: types = [Success, Error] class CreatePost(graphene.Mutation): + class Input: text = graphene.String(required=True) @@ -37,6 +41,7 @@ class Mutations(graphene.ObjectType): # tests.py + def test_create_post(): query_string = ''' mutation { @@ -52,4 +57,4 @@ def test_create_post(): result = schema.execute(query_string) assert not result.errors - assert result.data['createPost']['result']['__typename'] == 'Success' \ No newline at end of file + assert result.data['createPost']['result']['__typename'] == 'Success' diff --git a/graphene/tests/issues/test_356.py b/graphene/tests/issues/test_356.py index 605594e1..8eeaed10 100644 --- a/graphene/tests/issues/test_356.py +++ b/graphene/tests/issues/test_356.py @@ -1,19 +1,25 @@ # https://github.com/graphql-python/graphene/issues/356 import pytest + import graphene from graphene import relay + class SomeTypeOne(graphene.ObjectType): pass + class SomeTypeTwo(graphene.ObjectType): pass + class MyUnion(graphene.Union): + class Meta: types = (SomeTypeOne, SomeTypeTwo) + def test_issue(): with pytest.raises(Exception) as exc_info: class Query(graphene.ObjectType): diff --git a/graphene/tests/issues/test_425_graphene2.py b/graphene/tests/issues/test_425_graphene2.py index 38b12143..7f92a75a 100644 --- a/graphene/tests/issues/test_425_graphene2.py +++ b/graphene/tests/issues/test_425_graphene2.py @@ -1,23 +1,25 @@ # https://github.com/graphql-python/graphene/issues/425 # Adapted for Graphene 2.0 -import six from graphene.types.objecttype import ObjectType, ObjectTypeOptions + class SpecialOptions(ObjectTypeOptions): other_attr = None class SpecialObjectType(ObjectType): + @classmethod def __init_subclass_with_meta__(cls, other_attr='default', **options): _meta = SpecialOptions(cls) _meta.other_attr = other_attr super(SpecialObjectType, cls).__init_subclass_with_meta__(_meta=_meta, **options) - + def test_special_objecttype_could_be_subclassed(): class MyType(SpecialObjectType): + class Meta: other_attr = 'yeah!' @@ -36,5 +38,5 @@ def test_special_objecttype_inherit_meta_options(): pass assert MyType._meta.name == 'MyType' - assert MyType._meta.default_resolver == None + assert MyType._meta.default_resolver is None assert MyType._meta.interfaces == () diff --git a/graphene/tests/issues/test_490.py b/graphene/tests/issues/test_490.py index 0ecd8911..fc6d016e 100644 --- a/graphene/tests/issues/test_490.py +++ b/graphene/tests/issues/test_490.py @@ -1,7 +1,6 @@ # https://github.com/graphql-python/graphene/issues/313 import graphene -from graphene import resolve_only_args class Query(graphene.ObjectType): diff --git a/graphene/types/__init__.py b/graphene/types/__init__.py index 40d60df9..d1554be2 100644 --- a/graphene/types/__init__.py +++ b/graphene/types/__init__.py @@ -38,4 +38,7 @@ __all__ = [ 'Argument', 'Dynamic', 'Union', + + # Deprecated + 'AbstractType', ] diff --git a/graphene/types/argument.py b/graphene/types/argument.py index cb28ee5e..df032510 100644 --- a/graphene/types/argument.py +++ b/graphene/types/argument.py @@ -1,9 +1,9 @@ from collections import OrderedDict from itertools import chain +from .dynamic import Dynamic from .mountedtype import MountedType from .structures import NonNull -from .dynamic import Dynamic from .utils import get_type diff --git a/graphene/types/base.py b/graphene/types/base.py index b4a87e73..ad8869b9 100644 --- a/graphene/types/base.py +++ b/graphene/types/base.py @@ -13,7 +13,7 @@ class BaseOptions(object): def freeze(self): self._frozen = True - + def __setattr__(self, name, value): if not self._frozen: super(BaseOptions, self).__setattr__(name, value) @@ -25,6 +25,7 @@ class BaseOptions(object): class BaseType(SubclassWithMeta): + @classmethod def __init_subclass_with_meta__(cls, name=None, description=None, _meta=None): assert "_meta" not in cls.__dict__, "Can't assign directly meta" diff --git a/graphene/types/enum.py b/graphene/types/enum.py index af305fde..c98fb5f6 100644 --- a/graphene/types/enum.py +++ b/graphene/types/enum.py @@ -2,10 +2,10 @@ from collections import OrderedDict import six +from graphene.utils.subclass_with_meta import SubclassWithMeta_Meta + from .base import BaseOptions, BaseType from .unmountedtype import UnmountedType -from graphene.pyutils.init_subclass import InitSubclassMeta -from graphene.utils.subclass_with_meta import SubclassWithMeta_Meta try: from enum import Enum as PyEnum @@ -27,6 +27,7 @@ class EnumOptions(BaseOptions): class EnumMeta(SubclassWithMeta_Meta): + def __new__(cls, name, bases, classdict, **options): enum = PyEnum(cls.__name__, OrderedDict(classdict, __eq__=eq_enum)) return SubclassWithMeta_Meta.__new__(cls, name, bases, OrderedDict(classdict, __enum__=enum), **options) @@ -53,6 +54,7 @@ class EnumMeta(SubclassWithMeta_Meta): class Enum(six.with_metaclass(EnumMeta, UnmountedType, BaseType)): + @classmethod def __init_subclass_with_meta__(cls, enum=None, **options): _meta = EnumOptions(cls) diff --git a/graphene/types/field.py b/graphene/types/field.py index 06632d35..9e699a12 100644 --- a/graphene/types/field.py +++ b/graphene/types/field.py @@ -8,7 +8,6 @@ from .structures import NonNull from .unmountedtype import UnmountedType from .utils import get_type - base_type = type diff --git a/graphene/types/generic.py b/graphene/types/generic.py index a1034bfd..3170e38d 100644 --- a/graphene/types/generic.py +++ b/graphene/types/generic.py @@ -1,9 +1,9 @@ from __future__ import unicode_literals +from graphene.types.scalars import MAX_INT, MIN_INT from graphql.language.ast import (BooleanValue, FloatValue, IntValue, - StringValue, ListValue, ObjectValue) + ListValue, ObjectValue, StringValue) -from graphene.types.scalars import MIN_INT, MAX_INT from .scalars import Scalar diff --git a/graphene/types/inputobjecttype.py b/graphene/types/inputobjecttype.py index d3d82392..5615db3d 100644 --- a/graphene/types/inputobjecttype.py +++ b/graphene/types/inputobjecttype.py @@ -1,11 +1,10 @@ from collections import OrderedDict +from .base import BaseOptions, BaseType from .inputfield import InputField from .unmountedtype import UnmountedType from .utils import yank_fields_from_attrs -from .base import BaseOptions, BaseType - class InputObjectTypeOptions(BaseOptions): fields = None # type: Dict[str, Field] diff --git a/graphene/types/interface.py b/graphene/types/interface.py index 37d38ac1..389cb82c 100644 --- a/graphene/types/interface.py +++ b/graphene/types/interface.py @@ -1,8 +1,8 @@ -from .field import Field -from .utils import yank_fields_from_attrs from collections import OrderedDict from .base import BaseOptions, BaseType +from .field import Field +from .utils import yank_fields_from_attrs class InterfaceOptions(BaseOptions): @@ -30,7 +30,7 @@ class Interface(BaseType): fields.update( yank_fields_from_attrs(base.__dict__, _as=Field) ) - + if _meta.fields: _meta.fields.update(fields) else: diff --git a/graphene/types/mutation.py b/graphene/types/mutation.py index 8b2bb88b..8756412f 100644 --- a/graphene/types/mutation.py +++ b/graphene/types/mutation.py @@ -3,10 +3,8 @@ from collections import OrderedDict from ..utils.get_unbound_function import get_unbound_function from ..utils.props import props from .field import Field -from .utils import yank_fields_from_attrs from .objecttype import ObjectType, ObjectTypeOptions - -from .base import BaseOptions, BaseType +from .utils import yank_fields_from_attrs class MutationOptions(ObjectTypeOptions): @@ -20,7 +18,8 @@ class Mutation(ObjectType): Mutation Type Definition ''' @classmethod - def __init_subclass_with_meta__(cls, resolver=None, output=None, arguments=None, _meta=None, abstract=False, **options): + def __init_subclass_with_meta__(cls, resolver=None, output=None, arguments=None, + _meta=None, abstract=False, **options): if abstract: return if not _meta: @@ -36,7 +35,7 @@ class Mutation(ObjectType): yank_fields_from_attrs(base.__dict__, _as=Field) ) output = cls - + if not arguments: input_class = getattr(cls, 'Arguments', None) if not input_class: @@ -64,7 +63,7 @@ class Mutation(ObjectType): _meta.arguments = arguments super(Mutation, cls).__init_subclass_with_meta__(_meta=_meta, **options) - + @classmethod def Field(cls, *args, **kwargs): return Field( diff --git a/graphene/types/objecttype.py b/graphene/types/objecttype.py index ac7214f6..9987e4e4 100644 --- a/graphene/types/objecttype.py +++ b/graphene/types/objecttype.py @@ -1,15 +1,14 @@ from collections import OrderedDict +from .base import BaseOptions, BaseType from .field import Field from .interface import Interface from .utils import yank_fields_from_attrs -from .base import BaseOptions, BaseType - class ObjectTypeOptions(BaseOptions): fields = None # type: Dict[str, Field] - interfaces = () # type: List[Type[Interface]] + interfaces = () # type: List[Type[Interface]] class ObjectType(BaseType): @@ -20,7 +19,10 @@ class ObjectType(BaseType): have a name, but most importantly describe their fields. ''' @classmethod - def __init_subclass_with_meta__(cls, interfaces=(), possible_types=(), default_resolver=None, _meta=None, abstract=False, **options): + def __init_subclass_with_meta__( + cls, interfaces=(), + possible_types=(), + default_resolver=None, _meta=None, abstract=False, **options): if abstract: return if not _meta: @@ -31,7 +33,7 @@ class ObjectType(BaseType): for interface in interfaces: assert issubclass(interface, Interface), ( 'All interfaces of {} must be a subclass of Interface. Received "{}".' - ).format(name, interface) + ).format(cls.__name__, interface) fields.update(interface._meta.fields) for base in reversed(cls.__mro__): diff --git a/graphene/types/scalars.py b/graphene/types/scalars.py index 1ca17ff8..ccfb089c 100644 --- a/graphene/types/scalars.py +++ b/graphene/types/scalars.py @@ -3,8 +3,8 @@ import six from graphql.language.ast import (BooleanValue, FloatValue, IntValue, StringValue) -from .unmountedtype import UnmountedType from .base import BaseOptions, BaseType +from .unmountedtype import UnmountedType class ScalarOptions(BaseOptions): diff --git a/graphene/types/tests/test_argument.py b/graphene/types/tests/test_argument.py index e485c01b..744c9e29 100644 --- a/graphene/types/tests/test_argument.py +++ b/graphene/types/tests/test_argument.py @@ -1,11 +1,12 @@ -import pytest from functools import partial +import pytest + from ..argument import Argument, to_arguments from ..field import Field from ..inputfield import InputField -from ..structures import NonNull from ..scalars import String +from ..structures import NonNull def test_argument(): @@ -73,4 +74,4 @@ def test_argument_with_lazy_type(): def test_argument_with_lazy_partial_type(): MyType = object() arg = Argument(partial(lambda: MyType)) - assert arg.type == MyType \ No newline at end of file + assert arg.type == MyType diff --git a/graphene/types/tests/test_datetime.py b/graphene/types/tests/test_datetime.py index 651850cb..e01bdc8a 100644 --- a/graphene/types/tests/test_datetime.py +++ b/graphene/types/tests/test_datetime.py @@ -1,4 +1,5 @@ import datetime + import pytz from ..datetime import DateTime, Time diff --git a/graphene/types/tests/test_dynamic.py b/graphene/types/tests/test_dynamic.py index 61dcbd81..4e72395f 100644 --- a/graphene/types/tests/test_dynamic.py +++ b/graphene/types/tests/test_dynamic.py @@ -1,6 +1,6 @@ -from ..structures import List, NonNull -from ..scalars import String from ..dynamic import Dynamic +from ..scalars import String +from ..structures import List, NonNull def test_dynamic(): diff --git a/graphene/types/tests/test_enum.py b/graphene/types/tests/test_enum.py index 6cd22bd9..42f00605 100644 --- a/graphene/types/tests/test_enum.py +++ b/graphene/types/tests/test_enum.py @@ -1,7 +1,7 @@ +from ..argument import Argument from ..enum import Enum, PyEnum from ..field import Field from ..inputfield import InputField -from ..argument import Argument def test_enum_construction(): diff --git a/graphene/types/tests/test_field.py b/graphene/types/tests/test_field.py index 80a32154..d3782fe5 100644 --- a/graphene/types/tests/test_field.py +++ b/graphene/types/tests/test_field.py @@ -1,10 +1,11 @@ -import pytest from functools import partial +import pytest + from ..argument import Argument from ..field import Field -from ..structures import NonNull from ..scalars import String +from ..structures import NonNull from .utils import MyLazyType @@ -22,7 +23,7 @@ def test_field_basic(): resolver = lambda: None deprecation_reason = 'Deprecated now' description = 'My Field' - my_default='something' + my_default = 'something' field = Field( MyType, name='name', diff --git a/graphene/types/tests/test_inputfield.py b/graphene/types/tests/test_inputfield.py index a0888e44..bfedfb05 100644 --- a/graphene/types/tests/test_inputfield.py +++ b/graphene/types/tests/test_inputfield.py @@ -1,4 +1,3 @@ -import pytest from functools import partial from ..inputfield import InputField diff --git a/graphene/types/tests/test_inputobjecttype.py b/graphene/types/tests/test_inputobjecttype.py index 7cd3064c..77b1eb0e 100644 --- a/graphene/types/tests/test_inputobjecttype.py +++ b/graphene/types/tests/test_inputobjecttype.py @@ -1,9 +1,9 @@ -from ..field import Field from ..argument import Argument +from ..field import Field from ..inputfield import InputField -from ..objecttype import ObjectType from ..inputobjecttype import InputObjectType +from ..objecttype import ObjectType from ..unmountedtype import UnmountedType @@ -68,7 +68,7 @@ def test_generate_inputobjecttype_as_argument(): class MyObjectType(ObjectType): field = Field(MyType, input=MyInputObjectType()) - + assert 'field' in MyObjectType._meta.fields field = MyObjectType._meta.fields['field'] assert isinstance(field, Field) diff --git a/graphene/types/tests/test_json.py b/graphene/types/tests/test_json.py index ef6425a9..c912df56 100644 --- a/graphene/types/tests/test_json.py +++ b/graphene/types/tests/test_json.py @@ -1,4 +1,3 @@ -import json from ..json import JSONString from ..objecttype import ObjectType @@ -19,7 +18,7 @@ def test_jsonstring_query(): json_value = '{"key": "value"}' json_value_quoted = json_value.replace('"', '\\"') - result = schema.execute('''{ json(input: "%s") }'''%json_value_quoted) + result = schema.execute('''{ json(input: "%s") }''' % json_value_quoted) assert not result.errors assert result.data == { 'json': json_value diff --git a/graphene/types/tests/test_mountedtype.py b/graphene/types/tests/test_mountedtype.py index 0bc39a2f..9dcc11c7 100644 --- a/graphene/types/tests/test_mountedtype.py +++ b/graphene/types/tests/test_mountedtype.py @@ -1,11 +1,10 @@ -import pytest -from ..mountedtype import MountedType from ..field import Field from ..scalars import String class CustomField(Field): + def __init__(self, *args, **kwargs): self.metadata = kwargs.pop('metadata', None) super(CustomField, self).__init__(*args, **kwargs) diff --git a/graphene/types/tests/test_mutation.py b/graphene/types/tests/test_mutation.py index 0f6d8900..081e823c 100644 --- a/graphene/types/tests/test_mutation.py +++ b/graphene/types/tests/test_mutation.py @@ -1,11 +1,11 @@ import pytest +from ..argument import Argument +from ..dynamic import Dynamic from ..mutation import Mutation from ..objecttype import ObjectType -from ..schema import Schema -from ..argument import Argument from ..scalars import String -from ..dynamic import Dynamic +from ..schema import Schema def test_generate_mutation_no_args(): @@ -24,6 +24,7 @@ def test_generate_mutation_no_args(): def test_generate_mutation_with_meta(): class MyMutation(Mutation): + class Meta: name = 'MyOtherMutation' description = 'Documentation' @@ -52,6 +53,7 @@ def test_mutation_custom_output_type(): name = String() class CreateUser(Mutation): + class Input: name = String() @@ -70,6 +72,7 @@ def test_mutation_custom_output_type(): def test_mutation_execution(): class CreateUser(Mutation): + class Input: name = String() dynamic = Dynamic(lambda: String()) diff --git a/graphene/types/tests/test_objecttype.py b/graphene/types/tests/test_objecttype.py index 2304d7b6..5ff972de 100644 --- a/graphene/types/tests/test_objecttype.py +++ b/graphene/types/tests/test_objecttype.py @@ -187,6 +187,7 @@ def test_generate_objecttype_description(): def test_objecttype_with_possible_types(): class MyObjectType(ObjectType): + class Meta: possible_types = (dict, ) @@ -196,6 +197,7 @@ def test_objecttype_with_possible_types(): def test_objecttype_with_possible_types_and_is_type_of_should_raise(): with pytest.raises(AssertionError) as excinfo: class MyObjectType(ObjectType): + class Meta: possible_types = (dict, ) diff --git a/graphene/types/tests/test_query.py b/graphene/types/tests/test_query.py index daeb63e8..254570e1 100644 --- a/graphene/types/tests/test_query.py +++ b/graphene/types/tests/test_query.py @@ -1,18 +1,18 @@ import json from functools import partial -from graphql import Source, execute, parse, GraphQLError +from graphql import GraphQLError, Source, execute, parse +from ..dynamic import Dynamic from ..field import Field -from ..interface import Interface from ..inputfield import InputField from ..inputobjecttype import InputObjectType +from ..interface import Interface from ..objecttype import ObjectType from ..scalars import Int, String from ..schema import Schema from ..structures import List from ..union import Union -from ..dynamic import Dynamic def test_query(): @@ -48,6 +48,7 @@ def test_query_union(): return isinstance(root, two_object) class MyUnion(Union): + class Meta: types = (One, Two) @@ -81,6 +82,7 @@ def test_query_interface(): base = String() class One(ObjectType): + class Meta: interfaces = (MyInterface, ) @@ -91,6 +93,7 @@ def test_query_interface(): return isinstance(root, one_object) class Two(ObjectType): + class Meta: interfaces = (MyInterface, ) @@ -268,6 +271,7 @@ def test_query_middlewares(): def test_objecttype_on_instances(): class Ship: + def __init__(self, name): self.name = name diff --git a/graphene/types/tests/test_resolver.py b/graphene/types/tests/test_resolver.py index 25629979..64fdf94e 100644 --- a/graphene/types/tests/test_resolver.py +++ b/graphene/types/tests/test_resolver.py @@ -1,6 +1,6 @@ -import pytest -from ..resolver import attr_resolver, dict_resolver, get_default_resolver, set_default_resolver +from ..resolver import (attr_resolver, dict_resolver, get_default_resolver, + set_default_resolver) args = {} context = None diff --git a/graphene/types/tests/test_scalar.py b/graphene/types/tests/test_scalar.py index af62faa1..3c6383fa 100644 --- a/graphene/types/tests/test_scalar.py +++ b/graphene/types/tests/test_scalar.py @@ -1,4 +1,3 @@ -import pytest from ..scalars import Scalar diff --git a/graphene/types/tests/test_schema.py b/graphene/types/tests/test_schema.py index af9bc14c..2ed5c099 100644 --- a/graphene/types/tests/test_schema.py +++ b/graphene/types/tests/test_schema.py @@ -1,9 +1,9 @@ import pytest -from ..schema import Schema +from ..field import Field from ..objecttype import ObjectType from ..scalars import String -from ..field import Field +from ..schema import Schema class MyOtherType(ObjectType): diff --git a/graphene/types/tests/test_structures.py b/graphene/types/tests/test_structures.py index 082bf097..6fb290fd 100644 --- a/graphene/types/tests/test_structures.py +++ b/graphene/types/tests/test_structures.py @@ -1,8 +1,9 @@ -import pytest from functools import partial -from ..structures import List, NonNull +import pytest + from ..scalars import String +from ..structures import List, NonNull from .utils import MyLazyType @@ -15,7 +16,7 @@ def test_list(): def test_list_with_unmounted_type(): with pytest.raises(Exception) as exc_info: List(String()) - + assert str(exc_info.value) == 'List could not have a mounted String() as inner type. Try with List(String).' @@ -80,14 +81,14 @@ def test_nonnull_inherited_works_list(): def test_nonnull_inherited_dont_work_nonnull(): with pytest.raises(Exception) as exc_info: NonNull(NonNull(String)) - + assert str(exc_info.value) == 'Can only create NonNull of a Nullable GraphQLType but got: String!.' def test_nonnull_with_unmounted_type(): with pytest.raises(Exception) as exc_info: NonNull(String()) - + assert str(exc_info.value) == 'NonNull could not have a mounted String() as inner type. Try with NonNull(String).' diff --git a/graphene/types/tests/test_union.py b/graphene/types/tests/test_union.py index d7ba2f31..ac2708ad 100644 --- a/graphene/types/tests/test_union.py +++ b/graphene/types/tests/test_union.py @@ -47,6 +47,7 @@ def test_generate_union_with_no_types(): def test_union_can_be_mounted(): class MyUnion(Union): + class Meta: types = (MyObjectType1, MyObjectType2) diff --git a/graphene/types/typemap.py b/graphene/types/typemap.py index 02069e41..acc0fbe3 100644 --- a/graphene/types/typemap.py +++ b/graphene/types/typemap.py @@ -11,10 +11,10 @@ from graphql.type.typemap import GraphQLTypeMap from ..utils.get_unbound_function import get_unbound_function from ..utils.str_converters import to_camel_case -from .definitions import (GrapheneEnumType, GrapheneInputObjectType, - GrapheneInterfaceType, GrapheneObjectType, - GrapheneScalarType, GrapheneUnionType, - GrapheneGraphQLType) +from .definitions import (GrapheneEnumType, GrapheneGraphQLType, + GrapheneInputObjectType, GrapheneInterfaceType, + GrapheneObjectType, GrapheneScalarType, + GrapheneUnionType) from .dynamic import Dynamic from .enum import Enum from .field import Field @@ -59,6 +59,7 @@ def is_type_of_from_possible_types(possible_types, root, context, info): class TypeMap(GraphQLTypeMap): + def __init__(self, types, auto_camelcase=True, schema=None): self.auto_camelcase = auto_camelcase self.schema = schema diff --git a/graphene/types/union.py b/graphene/types/union.py index 3068a96c..f5c12c04 100644 --- a/graphene/types/union.py +++ b/graphene/types/union.py @@ -1,7 +1,5 @@ -from .unmountedtype import UnmountedType -from .objecttype import ObjectType - from .base import BaseOptions, BaseType +from .unmountedtype import UnmountedType class UnionOptions(BaseOptions): diff --git a/graphene/types/utils.py b/graphene/types/utils.py index affffe38..c4434199 100644 --- a/graphene/types/utils.py +++ b/graphene/types/utils.py @@ -1,6 +1,7 @@ import inspect from collections import OrderedDict from functools import partial + from six import string_types from ..utils.module_loading import import_string @@ -40,6 +41,6 @@ def yank_fields_from_attrs(attrs, _as=None, sort=True): def get_type(_type): if isinstance(_type, string_types): return import_string(_type) - if inspect.isfunction(_type) or type(_type) is partial: + if inspect.isfunction(_type) or isinstance(_type, partial): return _type() return _type diff --git a/graphene/utils/subclass_with_meta.py b/graphene/utils/subclass_with_meta.py index 00ddb09f..d6d33cb6 100644 --- a/graphene/utils/subclass_with_meta.py +++ b/graphene/utils/subclass_with_meta.py @@ -1,10 +1,11 @@ import six -from .props import props from ..pyutils.init_subclass import InitSubclassMeta +from .props import props class SubclassWithMeta_Meta(InitSubclassMeta): + def __repr__(cls): return cls._meta.name diff --git a/graphene/utils/tests/test_module_loading.py b/graphene/utils/tests/test_module_loading.py index 7184ed2c..dd67ffe1 100644 --- a/graphene/utils/tests/test_module_loading.py +++ b/graphene/utils/tests/test_module_loading.py @@ -1,7 +1,8 @@ from pytest import raises -from graphene import String, ObjectType -from ..module_loading import lazy_import, import_string +from graphene import ObjectType, String + +from ..module_loading import import_string, lazy_import def test_import_string(): diff --git a/graphene/utils/tests/test_trim_docstring.py b/graphene/utils/tests/test_trim_docstring.py index 3aab5f11..9695fad4 100644 --- a/graphene/utils/tests/test_trim_docstring.py +++ b/graphene/utils/tests/test_trim_docstring.py @@ -9,11 +9,10 @@ def test_trim_docstring(): Multiple paragraphs too """ - pass assert (trim_docstring(WellDocumentedObject.__doc__) == - "This object is very well-documented. It has multiple lines in its\n" - "description.\n\nMultiple paragraphs too") + "This object is very well-documented. It has multiple lines in its\n" + "description.\n\nMultiple paragraphs too") class UndocumentedObject(object): pass