@@ -135,6 +135,9 @@ def add_method(
135
135
arguments , arguments_dict = self .arguments_generator .generate (
136
136
definition .variable_definitions
137
137
)
138
+
139
+ variable_names = self .get_variable_names (arguments )
140
+
138
141
operation_name = definition .name .value if definition .name else ""
139
142
if definition .operation == OperationType .SUBSCRIPTION :
140
143
if not async_ :
@@ -149,6 +152,7 @@ def add_method(
149
152
arguments = arguments ,
150
153
arguments_dict = arguments_dict ,
151
154
operation_str = operation_str ,
155
+ variable_names = variable_names ,
152
156
)
153
157
)
154
158
elif async_ :
@@ -159,6 +163,7 @@ def add_method(
159
163
arguments_dict = arguments_dict ,
160
164
operation_str = operation_str ,
161
165
operation_name = operation_name ,
166
+ variable_names = variable_names ,
162
167
)
163
168
else :
164
169
method_def = self ._generate_method (
@@ -168,6 +173,7 @@ def add_method(
168
173
arguments_dict = arguments_dict ,
169
174
operation_str = operation_str ,
170
175
operation_name = operation_name ,
176
+ variable_names = variable_names ,
171
177
)
172
178
173
179
method_def .lineno = len (self ._class_def .body ) + 1
@@ -181,6 +187,23 @@ def add_method(
181
187
generate_import_from (names = [return_type ], from_ = return_type_module , level = 1 )
182
188
)
183
189
190
+ def get_variable_names (self , arguments : ast .arguments ) -> Dict [str , str ]:
191
+ mapped_variable_names = [
192
+ self ._operation_str_variable ,
193
+ self ._variables_dict_variable ,
194
+ self ._response_variable ,
195
+ self ._data_variable ,
196
+ ]
197
+ variable_names = {}
198
+ argument_names = set (arg .arg for arg in arguments .args )
199
+
200
+ for variable in mapped_variable_names :
201
+ variable_names [variable ] = (
202
+ f"_{ variable } " if variable in argument_names else variable
203
+ )
204
+
205
+ return variable_names
206
+
184
207
def _add_import (self , import_ : Optional [ast .ImportFrom ] = None ):
185
208
if not import_ :
186
209
return
@@ -197,6 +220,7 @@ def _generate_subscription_method_def(
197
220
arguments : ast .arguments ,
198
221
arguments_dict : ast .Dict ,
199
222
operation_str : str ,
223
+ variable_names : Dict [str , str ],
200
224
) -> ast .AsyncFunctionDef :
201
225
return generate_async_method_definition (
202
226
name = name ,
@@ -205,9 +229,11 @@ def _generate_subscription_method_def(
205
229
value = generate_name (ASYNC_ITERATOR ), slice_ = generate_name (return_type )
206
230
),
207
231
body = [
208
- self ._generate_operation_str_assign (operation_str , 1 ),
209
- self ._generate_variables_assign (arguments_dict , 2 ),
210
- self ._generate_async_generator_loop (operation_name , return_type , 3 ),
232
+ self ._generate_operation_str_assign (variable_names , operation_str , 1 ),
233
+ self ._generate_variables_assign (variable_names , arguments_dict , 2 ),
234
+ self ._generate_async_generator_loop (
235
+ variable_names , operation_name , return_type , 3
236
+ ),
211
237
],
212
238
)
213
239
@@ -219,17 +245,18 @@ def _generate_async_method(
219
245
arguments_dict : ast .Dict ,
220
246
operation_str : str ,
221
247
operation_name : str ,
248
+ variable_names : Dict [str , str ],
222
249
) -> ast .AsyncFunctionDef :
223
250
return generate_async_method_definition (
224
251
name = name ,
225
252
arguments = arguments ,
226
253
return_type = generate_name (return_type ),
227
254
body = [
228
- self ._generate_operation_str_assign (operation_str , 1 ),
229
- self ._generate_variables_assign (arguments_dict , 2 ),
230
- self ._generate_async_response_assign (operation_name , 3 ),
231
- self ._generate_data_retrieval (),
232
- self ._generate_return_parsed_obj (return_type ),
255
+ self ._generate_operation_str_assign (variable_names , operation_str , 1 ),
256
+ self ._generate_variables_assign (variable_names , arguments_dict , 2 ),
257
+ self ._generate_async_response_assign (variable_names , operation_name , 3 ),
258
+ self ._generate_data_retrieval (variable_names ),
259
+ self ._generate_return_parsed_obj (variable_names , return_type ),
233
260
],
234
261
)
235
262
@@ -241,25 +268,26 @@ def _generate_method(
241
268
arguments_dict : ast .Dict ,
242
269
operation_str : str ,
243
270
operation_name : str ,
271
+ variable_names : Dict [str , str ],
244
272
) -> ast .FunctionDef :
245
273
return generate_method_definition (
246
274
name = name ,
247
275
arguments = arguments ,
248
276
return_type = generate_name (return_type ),
249
277
body = [
250
- self ._generate_operation_str_assign (operation_str , 1 ),
251
- self ._generate_variables_assign (arguments_dict , 2 ),
252
- self ._generate_response_assign (operation_name , 3 ),
253
- self ._generate_data_retrieval (),
254
- self ._generate_return_parsed_obj (return_type ),
278
+ self ._generate_operation_str_assign (variable_names , operation_str , 1 ),
279
+ self ._generate_variables_assign (variable_names , arguments_dict , 2 ),
280
+ self ._generate_response_assign (variable_names , operation_name , 3 ),
281
+ self ._generate_data_retrieval (variable_names ),
282
+ self ._generate_return_parsed_obj (variable_names , return_type ),
255
283
],
256
284
)
257
285
258
286
def _generate_operation_str_assign (
259
- self , operation_str : str , lineno : int = 1
287
+ self , variable_names : Dict [ str , str ], operation_str : str , lineno : int = 1
260
288
) -> ast .Assign :
261
289
return generate_assign (
262
- targets = [self ._operation_str_variable ],
290
+ targets = [variable_names [ self ._operation_str_variable ] ],
263
291
value = generate_call (
264
292
func = generate_name (self ._gql_func_name ),
265
293
args = [
@@ -270,10 +298,10 @@ def _generate_operation_str_assign(
270
298
)
271
299
272
300
def _generate_variables_assign (
273
- self , arguments_dict : ast .Dict , lineno : int = 1
301
+ self , variable_names : Dict [ str , str ], arguments_dict : ast .Dict , lineno : int = 1
274
302
) -> ast .AnnAssign :
275
303
return generate_ann_assign (
276
- target = self ._variables_dict_variable ,
304
+ target = variable_names [ self ._variables_dict_variable ] ,
277
305
annotation = generate_subscript (
278
306
generate_name (DICT ),
279
307
generate_tuple ([generate_name ("str" ), generate_name ("object" )]),
@@ -283,95 +311,115 @@ def _generate_variables_assign(
283
311
)
284
312
285
313
def _generate_async_response_assign (
286
- self , operation_name : str , lineno : int = 1
314
+ self , variable_names : Dict [ str , str ], operation_name : str , lineno : int = 1
287
315
) -> ast .Assign :
288
316
return generate_assign (
289
- targets = [self ._response_variable ],
317
+ targets = [variable_names [ self ._response_variable ] ],
290
318
value = generate_await (
291
- self ._generate_execute_call (operation_name = operation_name )
319
+ self ._generate_execute_call (variable_names , operation_name )
292
320
),
293
321
lineno = lineno ,
294
322
)
295
323
296
324
def _generate_response_assign (
297
- self , operation_name : str , lineno : int = 1
325
+ self ,
326
+ variable_names : Dict [str , str ],
327
+ operation_name : str ,
328
+ lineno : int = 1 ,
298
329
) -> ast .Assign :
299
330
return generate_assign (
300
- targets = [self ._response_variable ],
301
- value = self ._generate_execute_call (operation_name = operation_name ),
331
+ targets = [variable_names [ self ._response_variable ] ],
332
+ value = self ._generate_execute_call (variable_names , operation_name ),
302
333
lineno = lineno ,
303
334
)
304
335
305
- def _generate_execute_call (self , operation_name : str ) -> ast .Call :
336
+ def _generate_execute_call (
337
+ self , variable_names : Dict [str , str ], operation_name : str
338
+ ) -> ast .Call :
306
339
return generate_call (
307
340
func = generate_attribute (generate_name ("self" ), "execute" ),
308
341
keywords = [
309
342
generate_keyword (
310
- value = generate_name (self ._operation_str_variable ), arg = "query"
343
+ value = generate_name (variable_names [self ._operation_str_variable ]),
344
+ arg = "query" ,
311
345
),
312
346
generate_keyword (
313
347
value = generate_constant (operation_name ), arg = "operation_name"
314
348
),
315
349
generate_keyword (
316
- value = generate_name (self ._variables_dict_variable ), arg = "variables"
350
+ value = generate_name (variable_names [self ._variables_dict_variable ]),
351
+ arg = "variables" ,
317
352
),
318
353
generate_keyword (value = generate_name (KWARGS_NAMES )),
319
354
],
320
355
)
321
356
322
- def _generate_data_retrieval (self ) -> ast .Assign :
357
+ def _generate_data_retrieval (self , variable_names : Dict [ str , str ] ) -> ast .Assign :
323
358
return generate_assign (
324
- targets = [self ._data_variable ],
359
+ targets = [variable_names [ self ._data_variable ] ],
325
360
value = generate_call (
326
361
func = generate_attribute (value = generate_name ("self" ), attr = "get_data" ),
327
- args = [generate_name (self ._response_variable )],
362
+ args = [generate_name (variable_names [ self ._response_variable ] )],
328
363
),
329
364
)
330
365
331
- def _generate_return_parsed_obj (self , return_type : str ) -> ast .Return :
366
+ def _generate_return_parsed_obj (
367
+ self , variable_names : Dict [str , str ], return_type : str
368
+ ) -> ast .Return :
332
369
return generate_return (
333
370
generate_call (
334
371
func = generate_attribute (
335
372
generate_name (return_type ), MODEL_VALIDATE_METHOD
336
373
),
337
- args = [generate_name (self ._data_variable )],
374
+ args = [generate_name (variable_names [ self ._data_variable ] )],
338
375
)
339
376
)
340
377
341
378
def _generate_async_generator_loop (
342
- self , operation_name : str , return_type : str , lineno : int = 1
379
+ self ,
380
+ variable_names : Dict [str , str ],
381
+ operation_name : str ,
382
+ return_type : str ,
383
+ lineno : int = 1 ,
343
384
) -> ast .AsyncFor :
344
385
return generate_async_for (
345
- target = generate_name (self ._data_variable ),
386
+ target = generate_name (variable_names [ self ._data_variable ] ),
346
387
iter_ = generate_call (
347
388
func = generate_attribute (value = generate_name ("self" ), attr = "execute_ws" ),
348
389
keywords = [
349
390
generate_keyword (
350
- value = generate_name (self ._operation_str_variable ), arg = "query"
391
+ value = generate_name (
392
+ variable_names [self ._operation_str_variable ]
393
+ ),
394
+ arg = "query" ,
351
395
),
352
396
generate_keyword (
353
397
value = generate_constant (operation_name ), arg = "operation_name"
354
398
),
355
399
generate_keyword (
356
- value = generate_name (self ._variables_dict_variable ),
400
+ value = generate_name (
401
+ variable_names [self ._variables_dict_variable ]
402
+ ),
357
403
arg = "variables" ,
358
404
),
359
405
generate_keyword (value = generate_name (KWARGS_NAMES )),
360
406
],
361
407
),
362
- body = [self ._generate_yield_parsed_obj (return_type )],
408
+ body = [self ._generate_yield_parsed_obj (variable_names , return_type )],
363
409
lineno = lineno ,
364
410
)
365
411
366
- def _generate_yield_parsed_obj (self , return_type : str ) -> ast .Expr :
412
+ def _generate_yield_parsed_obj (
413
+ self , variable_names : Dict [str , str ], return_type : str
414
+ ) -> ast .Expr :
367
415
return generate_expr (
368
416
generate_yield (
369
417
generate_call (
370
418
func = generate_attribute (
371
419
value = generate_name (return_type ),
372
420
attr = MODEL_VALIDATE_METHOD ,
373
421
),
374
- args = [generate_name (self ._data_variable )],
422
+ args = [generate_name (variable_names [ self ._data_variable ] )],
375
423
)
376
424
)
377
425
)
0 commit comments