@@ -183,13 +183,15 @@ class GraphQLNamedType(GraphQLType):
183
183
184
184
name : str
185
185
description : Optional [str ]
186
+ extensions : Optional [Dict [str , Any ]]
186
187
ast_node : Optional [TypeDefinitionNode ]
187
188
extension_ast_nodes : Optional [FrozenList [TypeExtensionNode ]]
188
189
189
190
def __init__ (
190
191
self ,
191
192
name : str ,
192
193
description : str = None ,
194
+ extensions : Dict [str , Any ] = None ,
193
195
ast_node : TypeDefinitionNode = None ,
194
196
extension_ast_nodes : Sequence [TypeExtensionNode ] = None ,
195
197
) -> None :
@@ -199,6 +201,11 @@ def __init__(
199
201
raise TypeError ("The name must be a string." )
200
202
if description is not None and not isinstance (description , str ):
201
203
raise TypeError ("The description must be a string." )
204
+ if extensions is not None and (
205
+ not isinstance (extensions , dict )
206
+ or not all (isinstance (key , str ) for key in extensions )
207
+ ):
208
+ raise TypeError (f"{ name } extensions must be a dictionary with string keys." )
202
209
if ast_node and not isinstance (ast_node , TypeDefinitionNode ):
203
210
raise TypeError (f"{ name } AST node must be a TypeDefinitionNode." )
204
211
if extension_ast_nodes :
@@ -215,6 +222,7 @@ def __init__(
215
222
extension_ast_nodes = None
216
223
self .name = name
217
224
self .description = description
225
+ self .extensions = extensions
218
226
self .ast_node = ast_node
219
227
self .extension_ast_nodes = extension_ast_nodes
220
228
@@ -228,6 +236,7 @@ def to_kwargs(self) -> Dict[str, Any]:
228
236
return dict (
229
237
name = self .name ,
230
238
description = self .description ,
239
+ extensions = self .extensions ,
231
240
ast_node = self .ast_node ,
232
241
extension_ast_nodes = self .extension_ast_nodes or FrozenList (),
233
242
)
@@ -306,15 +315,17 @@ def __init__(
306
315
self ,
307
316
name : str ,
308
317
serialize : GraphQLScalarSerializer = None ,
309
- description : str = None ,
310
318
parse_value : GraphQLScalarValueParser = None ,
311
319
parse_literal : GraphQLScalarLiteralParser = None ,
320
+ description : str = None ,
321
+ extensions : Dict [str , Any ] = None ,
312
322
ast_node : ScalarTypeDefinitionNode = None ,
313
323
extension_ast_nodes : Sequence [ScalarTypeExtensionNode ] = None ,
314
324
) -> None :
315
325
super ().__init__ (
316
326
name = name ,
317
327
description = description ,
328
+ extensions = extensions ,
318
329
ast_node = ast_node ,
319
330
extension_ast_nodes = extension_ast_nodes ,
320
331
)
@@ -415,12 +426,13 @@ def assert_scalar_type(type_: Any) -> GraphQLScalarType:
415
426
class GraphQLField :
416
427
"""Definition of a GraphQL field"""
417
428
418
- description : Optional [str ]
419
429
type : "GraphQLOutputType"
420
430
args : GraphQLArgumentMap
421
431
resolve : Optional ["GraphQLFieldResolver" ]
422
432
subscribe : Optional ["GraphQLFieldResolver" ]
433
+ description : Optional [str ]
423
434
deprecation_reason : Optional [str ]
435
+ extensions : Optional [Dict [str , Any ]]
424
436
ast_node : Optional [FieldDefinitionNode ]
425
437
426
438
def __init__ (
@@ -431,6 +443,7 @@ def __init__(
431
443
subscribe : "GraphQLFieldResolver" = None ,
432
444
description : str = None ,
433
445
deprecation_reason : str = None ,
446
+ extensions : Dict [str , Any ] = None ,
434
447
ast_node : FieldDefinitionNode = None ,
435
448
) -> None :
436
449
if not is_output_type (type_ ):
@@ -462,14 +475,20 @@ def __init__(
462
475
raise TypeError ("The description must be a string." )
463
476
if deprecation_reason is not None and not isinstance (deprecation_reason , str ):
464
477
raise TypeError ("The deprecation reason must be a string." )
478
+ if extensions is not None and (
479
+ not isinstance (extensions , dict )
480
+ or not all (isinstance (key , str ) for key in extensions )
481
+ ):
482
+ raise TypeError ("Field extensions must be a dictionary with string keys." )
465
483
if ast_node and not isinstance (ast_node , FieldDefinitionNode ):
466
484
raise TypeError ("Field AST node must be a FieldDefinitionNode." )
467
485
self .type = type_
468
486
self .args = args or {}
469
487
self .resolve = resolve
470
488
self .subscribe = subscribe
471
- self .deprecation_reason = deprecation_reason
472
489
self .description = description
490
+ self .deprecation_reason = deprecation_reason
491
+ self .extensions = extensions
473
492
self .ast_node = ast_node
474
493
475
494
def __repr__ (self ):
@@ -486,16 +505,18 @@ def __eq__(self, other):
486
505
and self .resolve == other .resolve
487
506
and self .description == other .description
488
507
and self .deprecation_reason == other .deprecation_reason
508
+ and self .extensions == other .extensions
489
509
)
490
510
491
511
def to_kwargs (self ) -> Dict [str , Any ]:
492
512
return dict (
493
- description = self .description ,
494
513
type_ = self .type ,
495
514
args = self .args .copy () if self .args else None ,
496
515
resolve = self .resolve ,
497
516
subscribe = self .subscribe ,
498
517
deprecation_reason = self .deprecation_reason ,
518
+ description = self .description ,
519
+ extensions = self .extensions ,
499
520
ast_node = self .ast_node ,
500
521
)
501
522
@@ -550,10 +571,11 @@ class GraphQLResolveInfo(NamedTuple):
550
571
class GraphQLArgument :
551
572
"""Definition of a GraphQL argument"""
552
573
553
- description : Optional [str ]
554
574
type : "GraphQLInputType"
555
575
default_value : Any
576
+ description : Optional [str ]
556
577
out_name : Optional [str ] # for transforming names (extension of GraphQL.js)
578
+ extensions : Optional [Dict [str , Any ]]
557
579
ast_node : Optional [InputValueDefinitionNode ]
558
580
559
581
def __init__ (
@@ -562,6 +584,7 @@ def __init__(
562
584
default_value : Any = INVALID ,
563
585
description : str = None ,
564
586
out_name : str = None ,
587
+ extensions : Dict [str , Any ] = None ,
565
588
ast_node : InputValueDefinitionNode = None ,
566
589
) -> None :
567
590
if not is_input_type (type_ ):
@@ -570,12 +593,20 @@ def __init__(
570
593
raise TypeError ("Argument description must be a string." )
571
594
if out_name is not None and not isinstance (out_name , str ):
572
595
raise TypeError ("Argument out name must be a string." )
596
+ if extensions is not None and (
597
+ not isinstance (extensions , dict )
598
+ or not all (isinstance (key , str ) for key in extensions )
599
+ ):
600
+ raise TypeError (
601
+ "Argument extensions must be a dictionary with string keys."
602
+ )
573
603
if ast_node and not isinstance (ast_node , InputValueDefinitionNode ):
574
604
raise TypeError ("Argument AST node must be an InputValueDefinitionNode." )
575
605
self .type = type_
576
606
self .default_value = default_value
577
607
self .description = description
578
608
self .out_name = out_name
609
+ self .extensions = extensions
579
610
self .ast_node = ast_node
580
611
581
612
def __eq__ (self , other ):
@@ -585,14 +616,16 @@ def __eq__(self, other):
585
616
and self .default_value == other .default_value
586
617
and self .description == other .description
587
618
and self .out_name == other .out_name
619
+ and self .extensions == other .extensions
588
620
)
589
621
590
622
def to_kwargs (self ) -> Dict [str , Any ]:
591
623
return dict (
592
- description = self .description ,
593
624
type_ = self .type ,
594
625
default_value = self .default_value ,
626
+ description = self .description ,
595
627
out_name = self .out_name ,
628
+ extensions = self .extensions ,
596
629
ast_node = self .ast_node ,
597
630
)
598
631
@@ -645,13 +678,15 @@ def __init__(
645
678
fields : Thunk [GraphQLFieldMap ],
646
679
interfaces : Thunk [Sequence ["GraphQLInterfaceType" ]] = None ,
647
680
is_type_of : GraphQLIsTypeOfFn = None ,
681
+ extensions : Dict [str , Any ] = None ,
648
682
description : str = None ,
649
683
ast_node : ObjectTypeDefinitionNode = None ,
650
684
extension_ast_nodes : Sequence [ObjectTypeExtensionNode ] = None ,
651
685
) -> None :
652
686
super ().__init__ (
653
687
name = name ,
654
688
description = description ,
689
+ extensions = extensions ,
655
690
ast_node = ast_node ,
656
691
extension_ast_nodes = extension_ast_nodes ,
657
692
)
@@ -763,12 +798,14 @@ def __init__(
763
798
fields : Thunk [GraphQLFieldMap ] = None ,
764
799
resolve_type : GraphQLTypeResolver = None ,
765
800
description : str = None ,
801
+ extensions : Dict [str , Any ] = None ,
766
802
ast_node : InterfaceTypeDefinitionNode = None ,
767
803
extension_ast_nodes : Sequence [InterfaceTypeExtensionNode ] = None ,
768
804
) -> None :
769
805
super ().__init__ (
770
806
name = name ,
771
807
description = description ,
808
+ extensions = extensions ,
772
809
ast_node = ast_node ,
773
810
extension_ast_nodes = extension_ast_nodes ,
774
811
)
@@ -788,7 +825,6 @@ def __init__(
788
825
)
789
826
self ._fields = fields
790
827
self .resolve_type = resolve_type
791
- self .description = description
792
828
793
829
def to_kwargs (self ) -> Dict [str , Any ]:
794
830
return dict (
@@ -864,12 +900,14 @@ def __init__(
864
900
types : Thunk [Sequence [GraphQLObjectType ]],
865
901
resolve_type : GraphQLTypeResolver = None ,
866
902
description : str = None ,
903
+ extensions : Dict [str , Any ] = None ,
867
904
ast_node : UnionTypeDefinitionNode = None ,
868
905
extension_ast_nodes : Sequence [UnionTypeExtensionNode ] = None ,
869
906
) -> None :
870
907
super ().__init__ (
871
908
name = name ,
872
909
description = description ,
910
+ extensions = extensions ,
873
911
ast_node = ast_node ,
874
912
extension_ast_nodes = extension_ast_nodes ,
875
913
)
@@ -967,12 +1005,14 @@ def __init__(
967
1005
name : str ,
968
1006
values : Union [GraphQLEnumValueMap , Dict [str , Any ], Type [Enum ]],
969
1007
description : str = None ,
1008
+ extensions : Dict [str , Any ] = None ,
970
1009
ast_node : EnumTypeDefinitionNode = None ,
971
1010
extension_ast_nodes : Sequence [EnumTypeExtensionNode ] = None ,
972
1011
) -> None :
973
1012
super ().__init__ (
974
1013
name = name ,
975
1014
description = description ,
1015
+ extensions = extensions ,
976
1016
ast_node = ast_node ,
977
1017
extension_ast_nodes = extension_ast_nodes ,
978
1018
)
@@ -1080,13 +1120,15 @@ class GraphQLEnumValue:
1080
1120
value : Any
1081
1121
description : Optional [str ]
1082
1122
deprecation_reason : Optional [str ]
1123
+ extensions : Optional [Dict [str , Any ]]
1083
1124
ast_node : Optional [EnumValueDefinitionNode ]
1084
1125
1085
1126
def __init__ (
1086
1127
self ,
1087
1128
value : Any = None ,
1088
1129
description : str = None ,
1089
1130
deprecation_reason : str = None ,
1131
+ extensions : Dict [str , Any ] = None ,
1090
1132
ast_node : EnumValueDefinitionNode = None ,
1091
1133
) -> None :
1092
1134
if description is not None and not isinstance (description , str ):
@@ -1095,11 +1137,19 @@ def __init__(
1095
1137
raise TypeError (
1096
1138
"The deprecation reason for the enum value must be a string."
1097
1139
)
1140
+ if extensions is not None and (
1141
+ not isinstance (extensions , dict )
1142
+ or not all (isinstance (key , str ) for key in extensions )
1143
+ ):
1144
+ raise TypeError (
1145
+ "Enum value extensions must be a dictionary with string keys."
1146
+ )
1098
1147
if ast_node and not isinstance (ast_node , EnumValueDefinitionNode ):
1099
1148
raise TypeError ("AST node must be an EnumValueDefinitionNode." )
1100
1149
self .value = value
1101
1150
self .description = description
1102
1151
self .deprecation_reason = deprecation_reason
1152
+ self .extensions = extensions
1103
1153
self .ast_node = ast_node
1104
1154
1105
1155
def __eq__ (self , other ):
@@ -1108,13 +1158,15 @@ def __eq__(self, other):
1108
1158
and self .value == other .value
1109
1159
and self .description == other .description
1110
1160
and self .deprecation_reason == other .deprecation_reason
1161
+ and self .extensions == other .extensions
1111
1162
)
1112
1163
1113
1164
def to_kwargs (self ) -> Dict [str , Any ]:
1114
1165
return dict (
1115
1166
value = self .value ,
1116
1167
description = self .description ,
1117
1168
deprecation_reason = self .deprecation_reason ,
1169
+ extensions = self .extensions ,
1118
1170
ast_node = self .ast_node ,
1119
1171
)
1120
1172
@@ -1161,12 +1213,14 @@ def __init__(
1161
1213
fields : Thunk [GraphQLInputFieldMap ],
1162
1214
description : str = None ,
1163
1215
out_type : GraphQLInputFieldOutType = None ,
1216
+ extensions : Dict [str , Any ] = None ,
1164
1217
ast_node : InputObjectTypeDefinitionNode = None ,
1165
1218
extension_ast_nodes : Sequence [InputObjectTypeExtensionNode ] = None ,
1166
1219
) -> None :
1167
1220
super ().__init__ (
1168
1221
name = name ,
1169
1222
description = description ,
1223
+ extensions = extensions ,
1170
1224
ast_node = ast_node ,
1171
1225
extension_ast_nodes = extension_ast_nodes ,
1172
1226
)
@@ -1252,6 +1306,7 @@ class GraphQLInputField:
1252
1306
default_value : Any
1253
1307
description : Optional [str ]
1254
1308
out_name : Optional [str ] # for transforming names (extension of GraphQL.js)
1309
+ extensions : Optional [Dict [str , Any ]]
1255
1310
ast_node : Optional [InputValueDefinitionNode ]
1256
1311
1257
1312
def __init__ (
@@ -1260,6 +1315,7 @@ def __init__(
1260
1315
default_value : Any = INVALID ,
1261
1316
description : str = None ,
1262
1317
out_name : str = None ,
1318
+ extensions : Dict [str , Any ] = None ,
1263
1319
ast_node : InputValueDefinitionNode = None ,
1264
1320
) -> None :
1265
1321
if not is_input_type (type_ ):
@@ -1268,12 +1324,20 @@ def __init__(
1268
1324
raise TypeError ("Input field description must be a string." )
1269
1325
if out_name is not None and not isinstance (out_name , str ):
1270
1326
raise TypeError ("Input field out name must be a string." )
1327
+ if extensions is not None and (
1328
+ not isinstance (extensions , dict )
1329
+ or not all (isinstance (key , str ) for key in extensions )
1330
+ ):
1331
+ raise TypeError (
1332
+ "Input field extensions must be a dictionary with string keys."
1333
+ )
1271
1334
if ast_node and not isinstance (ast_node , InputValueDefinitionNode ):
1272
1335
raise TypeError ("Input field AST node must be an InputValueDefinitionNode." )
1273
1336
self .type = type_
1274
1337
self .default_value = default_value
1275
1338
self .description = description
1276
1339
self .out_name = out_name
1340
+ self .extensions = extensions
1277
1341
self .ast_node = ast_node
1278
1342
1279
1343
def __eq__ (self , other ):
@@ -1282,15 +1346,17 @@ def __eq__(self, other):
1282
1346
and self .type == other .type
1283
1347
and self .default_value == other .default_value
1284
1348
and self .description == other .description
1349
+ and self .extensions == other .extensions
1285
1350
and self .out_name == other .out_name
1286
1351
)
1287
1352
1288
1353
def to_kwargs (self ) -> Dict [str , Any ]:
1289
1354
return dict (
1290
1355
type_ = self .type ,
1291
- description = self .description ,
1292
1356
default_value = self .default_value ,
1357
+ description = self .description ,
1293
1358
out_name = self .out_name ,
1359
+ extensions = self .extensions ,
1294
1360
ast_node = self .ast_node ,
1295
1361
)
1296
1362
0 commit comments