16
16
17
17
def cmd (args ):
18
18
# load config
19
+ config = {}
19
20
if args .config :
20
21
with open (args .config ) as f :
21
22
config = yaml .safe_load (f )
22
- else :
23
- config = {}
24
23
25
24
# get list of schema files
26
25
files = []
@@ -50,33 +49,13 @@ def cmd(args):
50
49
51
50
52
51
def run (schema : GraphQLSchema , config : dict ):
52
+ # validate
53
+ if config .get ('validate' ):
54
+ validate_names (schema , config .get ('validate' ))
55
+
53
56
# transform
54
57
if config .get ('transform' ):
55
- transform = config .get ('transform' )
56
- # types and interfaces
57
- if transform .get ('type_names' ):
58
- if transform .get ('type_names' ) in string_transforms :
59
- transform_types (schema , string_transforms [transform .get ('type_names' )])
60
- else :
61
- raise Exception ('Unsupported type name transform: ' + transform .get ('type_names' ))
62
-
63
- # fields
64
- if transform .get ('field_names' ):
65
- if transform .get ('field_names' ) in string_transforms :
66
- transform_fields (schema , string_transforms [transform .get ('field_names' )])
67
- else :
68
- raise Exception ('Unsupported field name transform: ' + transform .get ('field_names' ))
69
-
70
- # enums
71
- if transform .get ('enum_values' ):
72
- if transform .get ('enum_values' ) in string_transforms :
73
- transform_enums (schema , string_transforms [transform .get ('enum_values' )])
74
- else :
75
- raise Exception ('Unsupported field name transform: ' + transform .get ('field_names' ))
76
-
77
- # comments
78
- if transform .get ('drop_comments' ):
79
- drop_comments (schema )
58
+ transform_names (schema , config .get ('transform' ))
80
59
81
60
# API generation
82
61
if config .get ('generation' ):
@@ -148,6 +127,74 @@ def run(schema: GraphQLSchema, config: dict):
148
127
return schema
149
128
150
129
130
+ def validate_names (schema :GraphQLSchema , validate ):
131
+ # types and interfaces
132
+ if validate .get ('type_names' ):
133
+ # type names
134
+ f = string_transforms .get (validate .get ('type_names' ))
135
+ if f is None :
136
+ raise Exception ('Unrecognized option: ' + validate .get ('type_names' ))
137
+ for type_name , _type in schema .type_map .items ():
138
+ if is_introspection_type (_type ):
139
+ continue
140
+ if f (type_name ) != type_name :
141
+ raise Exception (f'Type "{ type_name } " does not follow { validate .get ("type_names" )} ' )
142
+
143
+ # field names
144
+ if validate .get ('field_names' ):
145
+ f = string_transforms .get (validate .get ('field_names' ))
146
+ if f is None :
147
+ raise Exception ('Unrecognized option: ' + validate .get ('field_names' ))
148
+ for type_name , _type in schema .type_map .items ():
149
+ if is_introspection_type (_type ) or is_enum_or_scalar (_type ):
150
+ continue
151
+ for field_name in _type .fields .keys ():
152
+ if field_name .startswith ('_' ):
153
+ continue
154
+ if f (field_name ) != field_name :
155
+ raise Exception (f'Field "{ field_name } " does not follow { validate .get ("field_names" )} ' )
156
+
157
+ # enum names
158
+ if validate .get ('enum_values' ):
159
+ f = string_transforms .get (validate .get ('enum_values' ))
160
+ if f is None :
161
+ raise Exception ('Unrecognized option: ' + validate .get ('enum_values' ))
162
+ for type_name , _type in schema .type_map .items ():
163
+ if is_introspection_type (_type ) or not is_enum_type (_type ):
164
+ continue
165
+
166
+ for i in _type .values .keys ():
167
+ if f (i ) != i :
168
+ raise Exception (f'Enum "{ i } " does not follow { validate .get ("enum_values" )} ' )
169
+
170
+
171
+ def transform_names (schema : GraphQLSchema , transform ):
172
+ # types and interfaces
173
+ if transform .get ('type_names' ):
174
+ if transform .get ('type_names' ) in string_transforms :
175
+ transform_types (schema , string_transforms [transform .get ('type_names' )])
176
+ else :
177
+ raise Exception ('Unsupported type name transform: ' + transform .get ('type_names' ))
178
+
179
+ # fields
180
+ if transform .get ('field_names' ):
181
+ if transform .get ('field_names' ) in string_transforms :
182
+ transform_fields (schema , string_transforms [transform .get ('field_names' )])
183
+ else :
184
+ raise Exception ('Unsupported field name transform: ' + transform .get ('field_names' ))
185
+
186
+ # enums
187
+ if transform .get ('enum_values' ):
188
+ if transform .get ('enum_values' ) in string_transforms :
189
+ transform_enums (schema , string_transforms [transform .get ('enum_values' )])
190
+ else :
191
+ raise Exception ('Unsupported field name transform: ' + transform .get ('field_names' ))
192
+
193
+ # comments
194
+ if transform .get ('drop_comments' ):
195
+ drop_comments (schema )
196
+
197
+
151
198
def transform_types (schema , transform ):
152
199
type_names = set (schema .type_map .keys ())
153
200
for type_name in type_names :
@@ -165,6 +212,8 @@ def transform_fields(schema, transform):
165
212
continue
166
213
field_names = set (_type .fields .keys ())
167
214
for field_name in field_names :
215
+ if field_name .startswith ('_' ):
216
+ continue
168
217
field = _type .fields [field_name ]
169
218
_type .fields .pop (field_name )
170
219
_type .fields [transform (field_name )] = field
0 commit comments