@@ -220,18 +220,22 @@ def define_field_map(type, field_map):
220
220
'{}.{} must be an instance of GraphQLField.' .format (type , field_name )
221
221
)
222
222
223
- field = copy .copy (field )
224
- field .name = field_name
223
+ field_args = field .args
224
+
225
+ field = GraphQLFieldDefinition (
226
+ type = field .type ,
227
+ name = field_name ,
228
+ args = [],
229
+ resolver = field .resolver ,
230
+ deprecation_reason = field .deprecation_reason ,
231
+ description = field .description ,
232
+ )
225
233
226
234
assert is_output_type (field .type ), (
227
235
'{}.{} field type must be Output Type but got: {}.' .format (type , field_name , field .type )
228
236
)
229
237
230
- if not field .args :
231
- field .args = []
232
-
233
- else :
234
- field_args = field .args
238
+ if field_args :
235
239
assert isinstance (field_args , collections .Mapping ), (
236
240
'{}.{} args must be a mapping (dict / OrderedDict) with argument names as keys.' .format (type ,
237
241
field_name )
@@ -242,16 +246,20 @@ def define_field_map(type, field_map):
242
246
243
247
for arg_name , arg in field_args .items ():
244
248
assert_valid_name (arg_name )
245
- assert isinstance (arg , GraphQLArgument ), (
249
+ assert isinstance (arg , ( GraphQLArgument , GraphQLArgumentDefinition ) ), (
246
250
'{}.{}({}:) argument must be an instance of GraphQLArgument.' .format (type , field_name , arg_name )
247
251
)
248
252
assert is_input_type (arg .type ), (
249
253
'{}.{}({}:) argument type must be Input Type but got: {}.' .format (type , field_name , arg_name ,
250
254
arg .type )
251
255
)
252
256
253
- arg = copy .copy (arg )
254
- arg .name = arg_name
257
+ arg = GraphQLArgumentDefinition (
258
+ type = arg .type ,
259
+ name = arg_name ,
260
+ default_value = arg .default_value ,
261
+ description = arg .description ,
262
+ )
255
263
args .append (arg )
256
264
257
265
field .args = args
@@ -289,10 +297,9 @@ def define_interfaces(type, interfaces):
289
297
290
298
291
299
class GraphQLField (object ):
292
- __slots__ = 'name' , ' type' , 'args' , 'resolver' , 'deprecation_reason' , 'description'
300
+ __slots__ = 'type' , 'args' , 'resolver' , 'deprecation_reason' , 'description'
293
301
294
302
def __init__ (self , type , args = None , resolver = None , deprecation_reason = None , description = None ):
295
- self .name = None
296
303
self .type = type
297
304
self .args = args
298
305
self .resolver = resolver
@@ -303,7 +310,6 @@ def __eq__(self, other):
303
310
return (
304
311
self is other or (
305
312
isinstance (other , GraphQLField ) and
306
- self .name == other .name and
307
313
self .type == other .type and
308
314
self .args == other .args and
309
315
self .resolver == other .resolver and
@@ -316,11 +322,38 @@ def __hash__(self):
316
322
return id (self )
317
323
318
324
325
+ class GraphQLFieldDefinition (object ):
326
+ __slots__ = 'name' , 'type' , 'args' , 'resolver' , 'deprecation_reason' , 'description'
327
+
328
+ def __init__ (self , type , name , args = None , resolver = None , deprecation_reason = None , description = None ):
329
+ self .type = type
330
+ self .name = name
331
+ self .args = args
332
+ self .resolver = resolver
333
+ self .deprecation_reason = deprecation_reason
334
+ self .description = description
335
+
336
+ def __eq__ (self , other ):
337
+ return (
338
+ self is other or (
339
+ isinstance (other , GraphQLFieldDefinition ) and
340
+ self .type == other .type and
341
+ self .name == other .name and
342
+ self .args == other .args and
343
+ self .resolver == other .resolver and
344
+ self .deprecation_reason == other .deprecation_reason and
345
+ self .description == other .description
346
+ )
347
+ )
348
+
349
+ def __hash__ (self ):
350
+ return id (self )
351
+
352
+
319
353
class GraphQLArgument (object ):
320
- __slots__ = 'name' , ' type' , 'default_value' , 'description'
354
+ __slots__ = 'type' , 'default_value' , 'description'
321
355
322
356
def __init__ (self , type , default_value = None , description = None ):
323
- self .name = None
324
357
self .type = type
325
358
self .default_value = default_value
326
359
self .description = description
@@ -329,6 +362,29 @@ def __eq__(self, other):
329
362
return (
330
363
self is other or (
331
364
isinstance (other , GraphQLArgument ) and
365
+ self .type == other .type and
366
+ self .default_value == other .default_value and
367
+ self .description == other .description
368
+ )
369
+ )
370
+
371
+ def __hash__ (self ):
372
+ return id (self )
373
+
374
+
375
+ class GraphQLArgumentDefinition (object ):
376
+ __slots__ = 'name' , 'type' , 'default_value' , 'description'
377
+
378
+ def __init__ (self , type , name , default_value = None , description = None ):
379
+ self .type = type
380
+ self .name = name
381
+ self .default_value = default_value
382
+ self .description = description
383
+
384
+ def __eq__ (self , other ):
385
+ return (
386
+ self is other or (
387
+ isinstance (other , GraphQLArgumentDefinition ) and
332
388
self .name == other .name and
333
389
self .type == other .type and
334
390
self .default_value == other .default_value and
@@ -610,24 +666,26 @@ def _define_field_map(self):
610
666
assert isinstance (field , GraphQLInputObjectField ), (
611
667
'{}.{} must be an instance of GraphQLInputObjectField.' .format (self , field_name )
612
668
)
613
-
614
- field = copy .copy (field )
615
- field .name = field_name
616
-
617
669
assert is_input_type (field .type ), (
618
670
'{}.{} field type must be Input Type but got: {}.' .format (self , field_name , field .type )
619
671
)
620
672
673
+ field = GraphQLInputFieldDefinition (
674
+ type = field .type ,
675
+ name = field_name ,
676
+ default_value = field .default_value ,
677
+ description = field .description ,
678
+ )
679
+
621
680
field_map [field_name ] = field
622
681
623
682
return field_map
624
683
625
684
626
685
class GraphQLInputObjectField (object ):
627
- __slots__ = 'name' , ' type' , 'default_value' , 'description'
686
+ __slots__ = 'type' , 'default_value' , 'description'
628
687
629
688
def __init__ (self , type , default_value = None , description = None ):
630
- self .name = None
631
689
self .type = type
632
690
self .default_value = default_value
633
691
self .description = description
@@ -636,6 +694,25 @@ def __eq__(self, other):
636
694
return (
637
695
self is other or (
638
696
isinstance (other , GraphQLInputObjectField ) and
697
+ self .type == other .type and
698
+ self .description == other .description
699
+ )
700
+ )
701
+
702
+
703
+ class GraphQLInputFieldDefinition (object ):
704
+ __slots__ = 'name' , 'type' , 'default_value' , 'description'
705
+
706
+ def __init__ (self , type , name , default_value = None , description = None ):
707
+ self .name = name
708
+ self .type = type
709
+ self .default_value = default_value
710
+ self .description = description
711
+
712
+ def __eq__ (self , other ):
713
+ return (
714
+ self is other or (
715
+ isinstance (other , GraphQLInputFieldDefinition ) and
639
716
self .name == other .name and
640
717
self .type == other .type and
641
718
self .description == other .description
0 commit comments