Skip to content

Commit cd5d9b8

Browse files
committed
Improved plugin structure based on @adamcharnock suggestions
1 parent 730de3f commit cd5d9b8

File tree

6 files changed

+24
-35
lines changed

6 files changed

+24
-35
lines changed

graphene/core/schema.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ def add_plugin(self, plugin):
5050
plugin.contribute_to_schema(self)
5151
self.plugins.append(plugin)
5252

53-
def get_internal_type(self, objecttype):
53+
def get_default_namedtype_name(self, value):
5454
for plugin in self.plugins:
55-
objecttype = plugin.transform_type(objecttype)
56-
return objecttype.internal_type(self)
55+
if not hasattr(plugin, 'get_default_namedtype_name'):
56+
continue
57+
value = plugin.get_default_namedtype_name(value)
58+
return value
5759

5860
def T(self, _type):
5961
if not _type:
@@ -62,7 +64,7 @@ def T(self, _type):
6264
is_instancetype = isinstance(_type, InstanceType)
6365
if is_classtype or is_instancetype:
6466
if _type not in self._types:
65-
internal_type = self.get_internal_type(_type)
67+
internal_type = _type.internal_type(self)
6668
self._types[_type] = internal_type
6769
if is_classtype:
6870
self.register(_type)

graphene/core/types/argument.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ class Argument(NamedType, OrderedType):
1111

1212
def __init__(self, type, description=None, default=None,
1313
name=None, _creation_counter=None):
14-
super(Argument, self).__init__(_creation_counter=_creation_counter)
15-
self.name = name
16-
self.attname = None
14+
super(Argument, self).__init__(name=name, _creation_counter=_creation_counter)
1715
self.type = type
1816
self.description = description
1917
self.default = default
@@ -38,18 +36,18 @@ def to_arguments(*args, **kwargs):
3836
arguments = {}
3937
iter_arguments = chain(kwargs.items(), [(None, a) for a in args])
4038

41-
for attname, arg in iter_arguments:
39+
for default_name, arg in iter_arguments:
4240
if isinstance(arg, Argument):
4341
argument = arg
4442
elif isinstance(arg, ArgumentType):
4543
argument = arg.as_argument()
4644
else:
47-
raise ValueError('Unknown argument %s=%r' % (attname, arg))
45+
raise ValueError('Unknown argument %s=%r' % (default_name, arg))
4846

49-
if attname:
50-
argument.attname = attname
47+
if default_name:
48+
argument.default_name = default_name
5149

52-
name = argument.name or argument.attname
50+
name = argument.name or argument.default_name
5351
assert name, 'Argument in field must have a name'
5452
assert name not in arguments, 'Found more than one Argument with same name {}'.format(name)
5553
arguments[name] = argument

graphene/core/types/base.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ class MountedType(FieldType, ArgumentType):
129129

130130

131131
class NamedType(InstanceType):
132-
pass
132+
def __init__(self, name=None, default_name=None, *args, **kwargs):
133+
self.name = name
134+
self.default_name = None
135+
super(NamedType, self).__init__(*args, **kwargs)
133136

134137

135138
class GroupNamedType(InstanceType):
@@ -138,7 +141,7 @@ def __init__(self, *types):
138141
self.types = types
139142

140143
def get_named_type(self, schema, type):
141-
name = type.name or type.attname
144+
name = type.name or schema.get_default_namedtype_name(type.default_name)
142145
return name, schema.T(type)
143146

144147
def iter_types(self, schema):

graphene/core/types/field.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ def __init__(
1919
self, type, description=None, args=None, name=None, resolver=None,
2020
required=False, default=None, *args_list, **kwargs):
2121
_creation_counter = kwargs.pop('_creation_counter', None)
22-
super(Field, self).__init__(_creation_counter=_creation_counter)
23-
self.name = name
22+
super(Field, self).__init__(name=name, _creation_counter=_creation_counter)
2423
if isinstance(type, six.string_types):
2524
type = LazyType(type)
2625
self.required = required
@@ -37,6 +36,7 @@ def contribute_to_class(self, cls, attname):
3736
cls, (FieldsClassType)), 'Field {} cannot be mounted in {}'.format(
3837
self, cls)
3938
self.attname = attname
39+
self.default_name = attname
4040
self.object_type = cls
4141
self.mount(cls)
4242
if isinstance(self.type, MountType):
@@ -120,7 +120,6 @@ class InputField(NamedType, OrderedType):
120120
def __init__(self, type, description=None, default=None,
121121
name=None, _creation_counter=None, required=False):
122122
super(InputField, self).__init__(_creation_counter=_creation_counter)
123-
self.name = name
124123
if required:
125124
type = NonNull(type)
126125
self.type = type
@@ -132,6 +131,7 @@ def contribute_to_class(self, cls, attname):
132131
cls, (InputObjectType)), 'InputField {} cannot be mounted in {}'.format(
133132
self, cls)
134133
self.attname = attname
134+
self.default_name = attname
135135
self.object_type = cls
136136
self.mount(cls)
137137
if isinstance(self.type, MountType):

graphene/core/types/tests/test_argument.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_to_arguments():
2727
other_kwarg=String(),
2828
)
2929

30-
assert [a.name or a.attname for a in arguments] == [
30+
assert [a.name or a.default_name for a in arguments] == [
3131
'myArg', 'otherArg', 'my_kwarg', 'other_kwarg']
3232

3333

graphene/plugins/camel_case.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,8 @@
1-
from ..core.types.base import GroupNamedType
2-
from ..utils import memoize, to_camel_case
1+
from ..utils import to_camel_case
32
from .base import Plugin
43

54

6-
def camelcase_named_type(schema, type):
7-
name = type.name or to_camel_case(type.attname)
8-
return name, schema.T(type)
9-
10-
115
class CamelCase(Plugin):
126

13-
@memoize
14-
def transform_group(self, _type):
15-
new_type = _type.__class__(*_type.types)
16-
setattr(new_type, 'get_named_type', camelcase_named_type)
17-
return new_type
18-
19-
def transform_type(self, _type):
20-
if isinstance(_type, GroupNamedType):
21-
return self.transform_group(_type)
22-
return _type
7+
def get_default_namedtype_name(self, value):
8+
return to_camel_case(value)

0 commit comments

Comments
 (0)