@@ -304,14 +304,6 @@ def serialize_odd(value):
304
304
305
305
"""
306
306
307
- # Serializes an internal value to include in a response.
308
- serialize : GraphQLScalarSerializer
309
- # Parses an externally provided value to use as an input.
310
- parse_value : GraphQLScalarValueParser
311
- # Parses an externally provided literal value to use as an input.
312
- # Takes a dictionary of variables as an optional second argument.
313
- parse_literal : GraphQLScalarLiteralParser
314
-
315
307
ast_node : Optional [ScalarTypeDefinitionNode ]
316
308
extension_ast_nodes : Optional [Tuple [ScalarTypeExtensionNode ]]
317
309
@@ -333,17 +325,19 @@ def __init__(
333
325
)
334
326
if serialize is not None and not callable (serialize ):
335
327
raise TypeError (
336
- f"{ name } must provide 'serialize' function."
328
+ f"{ name } must provide 'serialize' as a function."
337
329
" If this custom Scalar is also used as an input type,"
338
330
" ensure 'parse_value' and 'parse_literal' functions"
339
331
" are also provided."
340
332
)
341
- if parse_value is not None or parse_literal is not None :
342
- if not callable (parse_value ) or not callable (parse_literal ):
343
- raise TypeError (
344
- f"{ name } must provide"
345
- " both 'parse_value' and 'parse_literal' functions."
346
- )
333
+ if parse_literal is not None and (
334
+ not callable (parse_literal )
335
+ or (parse_value is None or not callable (parse_value ))
336
+ ):
337
+ raise TypeError (
338
+ f"{ name } must provide"
339
+ " both 'parse_value' and 'parse_literal' as functions."
340
+ )
347
341
if ast_node and not isinstance (ast_node , ScalarTypeDefinitionNode ):
348
342
raise TypeError (f"{ name } AST node must be a ScalarTypeDefinitionNode." )
349
343
if extension_ast_nodes and not all (
@@ -352,23 +346,59 @@ def __init__(
352
346
raise TypeError (
353
347
f"{ name } extension AST nodes must be ScalarTypeExtensionNode."
354
348
)
355
- self .serialize = serialize or identity_func # type: ignore
356
- self .parse_value = parse_value or identity_func # type: ignore
357
- self .parse_literal = parse_literal or value_from_ast_untyped # type: ignore
349
+ if serialize is not None :
350
+ self .serialize = serialize
351
+ if parse_value is not None :
352
+ self .parse_value = parse_value
353
+ if parse_literal is not None :
354
+ self .parse_literal = parse_literal
358
355
359
356
def __repr__ (self ):
360
357
return f"<{ self .__class__ .__name__ } { self .name !r} >"
361
358
362
359
def __str__ (self ):
363
360
return self .name
364
361
362
+ @staticmethod
363
+ def serialize (value : Any ):
364
+ """Serializes an internal value to include in a response.
365
+
366
+ This default method just passes the value through and should be replaced
367
+ with a more specific version when creating a scalar type.
368
+ """
369
+ return value
370
+
371
+ @staticmethod
372
+ def parse_value (value : Any ):
373
+ """Parses an externally provided value to use as an input.
374
+
375
+ This default method just passes the value through and should be replaced
376
+ with a more specific version when creating a scalar type.
377
+ """
378
+ return value
379
+
380
+ def parse_literal ( # type: ignore
381
+ self , node : ValueNode , _variables : Dict [str , Any ] = None
382
+ ):
383
+ """Parses an externally provided literal value to use as an input.
384
+
385
+ This default method uses the parse_value method and should be replaced
386
+ with a more specific version when creating a scalar type.
387
+ """
388
+ return self .parse_value (value_from_ast_untyped (node ))
389
+
365
390
def to_kwargs (self ) -> Dict [str , Any ]:
366
391
return dict (
367
392
** super ().to_kwargs (),
368
- serialize = None if self .serialize is identity_func else self .serialize ,
369
- parse_value = None if self .parse_value is identity_func else self .parse_value ,
393
+ serialize = None
394
+ if self .serialize is GraphQLScalarType .serialize
395
+ else self .serialize ,
396
+ parse_value = None
397
+ if self .parse_value is GraphQLScalarType .parse_value
398
+ else self .parse_value ,
370
399
parse_literal = None
371
- if self .parse_literal is value_from_ast_untyped
400
+ if getattr (self .parse_literal , "__func__" )
401
+ is GraphQLScalarType .parse_literal
372
402
else self .parse_literal ,
373
403
)
374
404
0 commit comments