1
- from typing import Dict , Optional , Union , cast
1
+ from functools import partial
2
+ from typing import Optional , Union
2
3
3
4
from ariadne import convert_camel_case_to_snake
4
- from graphql import DefinitionNode
5
+ from graphql import FieldDefinitionNode
5
6
6
- from .types import FieldsDict
7
-
8
- Overrides = Dict [str , str ]
9
- ArgsOverrides = Dict [str , Overrides ]
7
+ from .types import FieldsDict , InputFieldsDict
10
8
11
9
12
10
def convert_case (
13
- overrides_or_fields : Optional [Union [FieldsDict , dict ]] = None ,
14
- map_fields_args = False ,
11
+ overrides : Optional [dict ] = None ,
12
+ * ,
13
+ object_fields : Optional [Union [FieldsDict , InputFieldsDict ]] = None ,
14
+ fields_args : Optional [FieldsDict ] = None ,
15
+ field_args : Optional [FieldDefinitionNode ] = None ,
15
16
):
16
- no_args_call = convert_case_call_without_args (overrides_or_fields )
17
-
18
- overrides = {}
19
- if not no_args_call :
20
- overrides = cast (dict , overrides_or_fields )
21
-
22
- def create_case_mappings (fields : FieldsDict , map_fields_args = False ):
23
- if map_fields_args :
24
- return convert_args_cas (fields , overrides )
25
-
26
- return convert_aliases_case (fields , overrides )
27
-
28
- if no_args_call :
29
- fields = cast (FieldsDict , overrides_or_fields )
30
- return create_case_mappings (fields , map_fields_args )
31
-
32
- return create_case_mappings
17
+ if overrides and not object_fields and not fields_args and not field_args :
18
+ return partial (convert_case , overrides )
33
19
20
+ if object_fields :
21
+ return convert_object_fields_case (object_fields , overrides or {})
34
22
35
- def convert_case_call_without_args (
36
- overrides_or_fields : Optional [Union [FieldsDict , dict ]] = None
37
- ) -> bool :
38
- if overrides_or_fields is None :
39
- return True
23
+ if fields_args :
24
+ return convert_fields_args_case (fields_args , overrides or {})
40
25
41
- if isinstance ( list ( overrides_or_fields . values ())[ 0 ], DefinitionNode ) :
42
- return True
26
+ if field_args :
27
+ return convert_field_args_case ( field_args , overrides or {})
43
28
44
- return False
29
+ raise ValueError (
30
+ "convert_case was called without any arguments. "
31
+ "If you meant to use it for automatic case conversion, remove call "
32
+ "(convert_case() -> convert_case) or call it with dict of overrides "
33
+ "as only argument."
34
+ )
45
35
46
36
47
- def convert_aliases_case (fields : FieldsDict , overrides : Overrides ) -> Overrides :
37
+ def convert_object_fields_case (
38
+ fields : Union [FieldsDict , InputFieldsDict ], overrides : dict
39
+ ):
48
40
final_mappings = {}
49
41
for field_name in fields :
50
42
if field_name in overrides :
@@ -56,19 +48,25 @@ def convert_aliases_case(fields: FieldsDict, overrides: Overrides) -> Overrides:
56
48
return final_mappings
57
49
58
50
59
- def convert_args_cas (fields : FieldsDict , overrides : ArgsOverrides ) -> ArgsOverrides :
51
+ def convert_fields_args_case (fields : FieldsDict , overrides : dict ) :
60
52
final_mappings = {}
61
53
for field_name , field_def in fields .items ():
62
- arg_overrides : Overrides = overrides .get (field_name , {})
63
- arg_mappings = {}
64
- for arg in field_def .arguments :
65
- arg_name = arg .name .value
66
- if arg_name in arg_overrides :
67
- arg_name_final = arg_overrides [arg_name ]
68
- else :
69
- arg_name_final = convert_camel_case_to_snake (arg_name )
70
- if arg_name != arg_name_final :
71
- arg_mappings [arg_name ] = arg_name_final
54
+ arg_mappings = convert_field_args_case (
55
+ field_def , overrides .get (field_name ) or {}
56
+ )
72
57
if arg_mappings :
73
58
final_mappings [field_name ] = arg_mappings
74
59
return final_mappings
60
+
61
+
62
+ def convert_field_args_case (field : FieldDefinitionNode , overrides : dict ):
63
+ final_mappings = {}
64
+ for arg in field .arguments :
65
+ arg_name = arg .name .value
66
+ if arg_name in overrides :
67
+ arg_name_final = overrides [arg_name ]
68
+ else :
69
+ arg_name_final = convert_camel_case_to_snake (arg_name )
70
+ if arg_name != arg_name_final :
71
+ final_mappings [arg_name ] = arg_name_final
72
+ return final_mappings
0 commit comments