ariadne-codegen 0.14.0.dev1__tar.gz → 0.14.0.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/PKG-INFO +1 -1
  2. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/client.py +443 -93
  3. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/constants.py +5 -0
  4. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/custom_fields.py +98 -26
  5. ariadne_codegen-0.14.0.dev2/ariadne_codegen/client_generators/custom_operation.py +363 -0
  6. ariadne_codegen-0.14.0.dev2/ariadne_codegen/client_generators/dependencies/base_operation.py +118 -0
  7. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/package.py +15 -1
  8. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/utils.py +2 -0
  9. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/pyproject.toml +1 -1
  10. ariadne_codegen-0.14.0.dev1/ariadne_codegen/client_generators/custom_operation.py +0 -219
  11. ariadne_codegen-0.14.0.dev1/ariadne_codegen/client_generators/dependencies/base_operation.py +0 -92
  12. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/.gitignore +0 -0
  13. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/LICENSE +0 -0
  14. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/README.md +0 -0
  15. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/__init__.py +0 -0
  16. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/__main__.py +0 -0
  17. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/__init__.py +0 -0
  18. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/arguments.py +0 -0
  19. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/comments.py +0 -0
  20. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/custom_fields_typing.py +0 -0
  21. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/__init__.py +0 -0
  22. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/async_base_client.py +0 -0
  23. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/async_base_client_open_telemetry.py +0 -0
  24. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/base_client.py +0 -0
  25. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/base_client_open_telemetry.py +0 -0
  26. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/base_model.py +0 -0
  27. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/dependencies/exceptions.py +0 -0
  28. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/enums.py +0 -0
  29. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/fragments.py +0 -0
  30. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/init_file.py +0 -0
  31. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/input_fields.py +0 -0
  32. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/input_types.py +0 -0
  33. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/result_fields.py +0 -0
  34. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/result_types.py +0 -0
  35. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/scalars.py +0 -0
  36. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/client_generators/types.py +0 -0
  37. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/codegen.py +0 -0
  38. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/config.py +0 -0
  39. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/contrib/__init__.py +0 -0
  40. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/contrib/client_forward_refs.py +0 -0
  41. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/contrib/extract_operations.py +0 -0
  42. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/contrib/no_reimports.py +0 -0
  43. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/contrib/shorter_results.py +0 -0
  44. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/exceptions.py +0 -0
  45. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/__init__.py +0 -0
  46. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/constants.py +0 -0
  47. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/directives.py +0 -0
  48. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/fields.py +0 -0
  49. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/named_types.py +0 -0
  50. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/schema.py +0 -0
  51. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/graphql_schema_generators/utils.py +0 -0
  52. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/main.py +0 -0
  53. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/plugins/__init__.py +0 -0
  54. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/plugins/base.py +0 -0
  55. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/plugins/explorer.py +0 -0
  56. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/plugins/manager.py +0 -0
  57. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/py.typed +0 -0
  58. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/schema.py +0 -0
  59. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/settings.py +0 -0
  60. {ariadne_codegen-0.14.0.dev1 → ariadne_codegen-0.14.0.dev2}/ariadne_codegen/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ariadne-codegen
3
- Version: 0.14.0.dev1
3
+ Version: 0.14.0.dev2
4
4
  Summary: Generate fully typed GraphQL client from schema, queries and mutations!
5
5
  Project-URL: Homepage, https://ariadnegraphql.org/
6
6
  Project-URL: Repository, https://github.com/mirumee/ariadne-codegen
@@ -16,6 +16,7 @@ from ..codegen import (
16
16
  generate_class_def,
17
17
  generate_comp,
18
18
  generate_constant,
19
+ generate_dict,
19
20
  generate_expr,
20
21
  generate_import_from,
21
22
  generate_keyword,
@@ -44,15 +45,20 @@ from .constants import (
44
45
  LIST,
45
46
  MODEL_VALIDATE_METHOD,
46
47
  NAME_NODE,
48
+ NAMED_TYPE_NODE,
47
49
  OPERATION_DEFINITION_NODE,
48
50
  OPERATION_TYPE,
49
51
  OPTIONAL,
50
52
  PRINT_AST,
53
+ SELECTION_NODE,
51
54
  SELECTION_SET_NODE,
55
+ TUPLE,
52
56
  TYPING_MODULE,
53
57
  UNION,
54
58
  UNSET_IMPORT,
55
59
  UPLOAD_IMPORT,
60
+ VARIABLE_DEFINITION_NODE,
61
+ VARIABLE_NODE,
56
62
  )
57
63
  from .scalars import ScalarData, generate_scalar_imports
58
64
 
@@ -207,133 +213,477 @@ class ClientGenerator:
207
213
  generate_import_from(names=[return_type], from_=return_type_module, level=1)
208
214
  )
209
215
 
210
- def add_execute_custom_operation_method(self):
211
- self._add_import(
212
- generate_import_from(
213
- [
214
- DOCUMENT_NODE,
215
- OPERATION_DEFINITION_NODE,
216
- NAME_NODE,
217
- SELECTION_SET_NODE,
218
- PRINT_AST,
216
+ def create_combine_variables_method(self):
217
+ method_body = [
218
+ generate_assign(
219
+ targets=["variables_types_combined"],
220
+ value=generate_dict(),
221
+ ),
222
+ generate_assign(
223
+ targets=["processed_variables_combined"],
224
+ value=generate_dict(),
225
+ ),
226
+ ast.For(
227
+ target=generate_name("field"),
228
+ iter=generate_name("fields"),
229
+ body=[
230
+ generate_assign(
231
+ targets=["formatted_variables"],
232
+ value=generate_call(
233
+ func=generate_name("field.get_formatted_variables")
234
+ ),
235
+ ),
236
+ generate_expr(
237
+ value=generate_call(
238
+ func=generate_attribute(
239
+ value=generate_name("variables_types_combined"),
240
+ attr="update",
241
+ ),
242
+ args=[
243
+ ast.DictComp(
244
+ key=generate_name("k"),
245
+ value=generate_name('v["type"]'),
246
+ generators=[
247
+ generate_comp(
248
+ target="k, v",
249
+ iter_="formatted_variables.items()",
250
+ )
251
+ ],
252
+ )
253
+ ],
254
+ )
255
+ ),
256
+ generate_expr(
257
+ value=generate_call(
258
+ func=generate_attribute(
259
+ value=generate_name("processed_variables_combined"),
260
+ attr="update",
261
+ ),
262
+ args=[
263
+ ast.DictComp(
264
+ key=generate_name("k"),
265
+ value=generate_name('v["value"]'),
266
+ generators=[
267
+ generate_comp(
268
+ target="k, v",
269
+ iter_="formatted_variables.items()",
270
+ )
271
+ ],
272
+ )
273
+ ],
274
+ )
275
+ ),
219
276
  ],
220
- GRAPHQL_MODULE,
221
- )
277
+ orelse=[],
278
+ lineno=1,
279
+ ),
280
+ generate_return(
281
+ value=generate_dict(
282
+ keys=[generate_constant("types"), generate_constant("values")],
283
+ values=[
284
+ generate_name("variables_types_combined"),
285
+ generate_name("processed_variables_combined"),
286
+ ],
287
+ )
288
+ ),
289
+ ]
290
+
291
+ args = generate_arguments(
292
+ args=[
293
+ generate_arg("self"),
294
+ generate_arg(
295
+ name="fields",
296
+ annotation=generate_subscript(
297
+ generate_name(TUPLE),
298
+ generate_tuple(
299
+ [
300
+ generate_name("GraphQLField"),
301
+ generate_name("..."),
302
+ ]
303
+ ),
304
+ ),
305
+ ),
306
+ ],
222
307
  )
223
- self._add_import(
224
- generate_import_from(
225
- [BASE_GRAPHQL_FIELD_CLASS_NAME], BASE_OPERATION_FILE_PATH.stem, level=1
226
- )
308
+
309
+ returns = generate_subscript(
310
+ generate_name(DICT),
311
+ generate_tuple(
312
+ [
313
+ generate_name("str"),
314
+ generate_subscript(
315
+ generate_name(DICT),
316
+ generate_tuple([generate_name("str"), generate_name("Any")]),
317
+ ),
318
+ ]
319
+ ),
227
320
  )
228
- execute_await = generate_await(
229
- value=generate_call(
230
- func=generate_attribute(value=generate_name("self"), attr="execute"),
231
- args=[
232
- generate_call(
233
- func=generate_name("print_ast"),
234
- args=[generate_name("operation_ast")],
235
- )
236
- ],
237
- keywords=[
238
- generate_keyword(
239
- arg="operation_name", value=generate_name("operation_name")
240
- )
241
- ],
242
- )
321
+
322
+ method_def = generate_method_definition(
323
+ name="_combine_variables",
324
+ arguments=args,
325
+ body=method_body,
326
+ decorator_list=[],
327
+ return_type=returns,
243
328
  )
244
329
 
245
- operation_definition_node = generate_call(
246
- func=generate_name("OperationDefinitionNode"),
247
- keywords=[
248
- generate_keyword(
249
- arg="operation", value=generate_name("operation_type")
250
- ),
251
- generate_keyword(
252
- arg="name",
253
- value=generate_call(
254
- func=generate_name("NameNode"),
330
+ return method_def
331
+
332
+ def create_build_variable_definitions_method(self):
333
+ method_body = [
334
+ generate_return(
335
+ value=generate_list_comp(
336
+ elt=generate_call(
337
+ func=generate_name("VariableDefinitionNode"),
255
338
  keywords=[
256
339
  generate_keyword(
257
- arg="value", value=generate_name("operation_name")
258
- )
259
- ],
260
- ),
261
- ),
262
- generate_keyword(
263
- arg="selection_set",
264
- value=generate_call(
265
- func=generate_name("SelectionSetNode"),
266
- keywords=[
340
+ arg="variable",
341
+ value=generate_call(
342
+ func=generate_name("VariableNode"),
343
+ keywords=[
344
+ generate_keyword(
345
+ arg="name",
346
+ value=generate_call(
347
+ func=generate_name("NameNode"),
348
+ keywords=[
349
+ generate_keyword(
350
+ arg="value",
351
+ value=generate_name("var_name"),
352
+ )
353
+ ],
354
+ ),
355
+ )
356
+ ],
357
+ ),
358
+ ),
267
359
  generate_keyword(
268
- arg="selections",
269
- value=generate_list_comp(
270
- elt=generate_call(
271
- func=generate_attribute(
272
- value=generate_name("field"),
273
- attr="to_ast",
274
- ),
275
- ),
276
- generators=[
277
- generate_comp(
278
- target="field",
279
- iter_="fields",
360
+ arg="type",
361
+ value=generate_call(
362
+ func=generate_name("NamedTypeNode"),
363
+ keywords=[
364
+ generate_keyword(
365
+ arg="name",
366
+ value=generate_call(
367
+ func=generate_name("NameNode"),
368
+ keywords=[
369
+ generate_keyword(
370
+ arg="value",
371
+ value=generate_name(
372
+ "var_value",
373
+ ),
374
+ )
375
+ ],
376
+ ),
280
377
  )
281
378
  ],
282
379
  ),
283
- )
380
+ ),
284
381
  ],
285
382
  ),
286
- ),
287
- ],
288
- )
289
- operation_ast = generate_call(
290
- func=generate_name("DocumentNode"),
291
- keywords=[
292
- generate_keyword(
293
- arg="definitions",
294
- value=generate_list(elements=[operation_definition_node]),
383
+ generators=[
384
+ generate_comp(
385
+ target="var_name, var_value",
386
+ iter_="variables_types_combined.items()",
387
+ )
388
+ ],
295
389
  )
296
- ],
297
- )
298
- body_return = generate_return(
299
- value=generate_call(
300
- func=generate_attribute(value=generate_name("self"), attr="get_data"),
301
- args=[generate_name("response")],
302
390
  )
391
+ ]
392
+ return generate_method_definition(
393
+ name="_build_variable_definitions",
394
+ arguments=generate_arguments(
395
+ args=[
396
+ generate_arg("self"),
397
+ generate_arg(
398
+ "variables_types_combined",
399
+ annotation=generate_subscript(
400
+ generate_name(DICT),
401
+ generate_tuple(
402
+ [
403
+ generate_name("str"),
404
+ generate_name("str"),
405
+ ]
406
+ ),
407
+ ),
408
+ ),
409
+ ]
410
+ ),
411
+ body=method_body,
412
+ return_type=generate_subscript(
413
+ generate_name("List"), generate_name("VariableDefinitionNode")
414
+ ),
303
415
  )
304
- async_def_node = generate_async_method_definition(
305
- name="execute_custom_operation",
416
+
417
+ def create_build_operation_ast_method(self):
418
+ keywords = [
419
+ generate_keyword(
420
+ arg="definitions",
421
+ value=generate_list(
422
+ elements=[
423
+ generate_call(
424
+ func=generate_name("OperationDefinitionNode"),
425
+ keywords=[
426
+ generate_keyword(
427
+ arg="operation",
428
+ value=generate_name("operation_type"),
429
+ ),
430
+ generate_keyword(
431
+ arg="name",
432
+ value=generate_call(
433
+ func=generate_name("NameNode"),
434
+ keywords=[
435
+ generate_keyword(
436
+ arg="value",
437
+ value=generate_name(
438
+ "operation_name",
439
+ ),
440
+ )
441
+ ],
442
+ ),
443
+ ),
444
+ generate_keyword(
445
+ arg="variable_definitions",
446
+ value=generate_name(
447
+ "variable_definitions",
448
+ ),
449
+ ),
450
+ generate_keyword(
451
+ arg="selection_set",
452
+ value=generate_call(
453
+ func=generate_name(
454
+ "SelectionSetNode",
455
+ ),
456
+ keywords=[
457
+ generate_keyword(
458
+ arg="selections",
459
+ value=generate_name("selections"),
460
+ )
461
+ ],
462
+ ),
463
+ ),
464
+ ],
465
+ )
466
+ ]
467
+ ),
468
+ )
469
+ ]
470
+ method_body = [
471
+ generate_return(
472
+ value=generate_call(
473
+ func=generate_name("DocumentNode"),
474
+ keywords=keywords,
475
+ )
476
+ )
477
+ ]
478
+ return generate_method_definition(
479
+ name="_build_operation_ast",
306
480
  arguments=generate_arguments(
307
481
  args=[
308
482
  generate_arg("self"),
309
483
  generate_arg(
310
- "*fields",
311
- annotation=generate_name("GraphQLField"),
484
+ "selections",
485
+ annotation=generate_subscript(
486
+ generate_name(LIST),
487
+ generate_name(SELECTION_NODE),
488
+ ),
312
489
  ),
313
490
  generate_arg(
314
491
  "operation_type",
315
492
  annotation=generate_name("OperationType"),
316
493
  ),
317
494
  generate_arg("operation_name", annotation=generate_name("str")),
318
- ],
495
+ generate_arg(
496
+ "variable_definitions",
497
+ annotation=generate_subscript(
498
+ generate_name("List"),
499
+ generate_name("VariableDefinitionNode"),
500
+ ),
501
+ ),
502
+ ]
319
503
  ),
320
- body=[
321
- generate_assign(
322
- targets=["operation_ast"],
323
- value=operation_ast,
504
+ body=method_body,
505
+ return_type=generate_name("DocumentNode"),
506
+ )
507
+
508
+ def create_execute_custom_operation_method(self):
509
+ method_body = [
510
+ generate_assign(
511
+ targets=["selections"],
512
+ value=generate_call(
513
+ func=generate_attribute(
514
+ value=generate_name("self"), attr="_build_selection_set"
515
+ ),
516
+ args=[generate_name("fields")],
324
517
  ),
325
- generate_assign(
326
- targets=["response"],
327
- value=execute_await,
518
+ ),
519
+ ast.Assign(
520
+ targets=[generate_name("combined_variables")],
521
+ value=generate_call(
522
+ func=generate_attribute(
523
+ value=generate_name("self"), attr="_combine_variables"
524
+ ),
525
+ args=[generate_name("fields")],
328
526
  ),
329
- body_return,
330
- ],
527
+ lineno=1,
528
+ ),
529
+ generate_assign(
530
+ targets=["variable_definitions"],
531
+ value=generate_call(
532
+ func=generate_attribute(
533
+ value=generate_name("self"), attr="_build_variable_definitions"
534
+ ),
535
+ args=[generate_name('combined_variables["types"]')],
536
+ ),
537
+ ),
538
+ generate_assign(
539
+ targets=["operation_ast"],
540
+ value=generate_call(
541
+ func=generate_attribute(
542
+ value=generate_name("self"), attr="_build_operation_ast"
543
+ ),
544
+ args=[
545
+ generate_name("selections"),
546
+ generate_name("operation_type"),
547
+ generate_name("operation_name"),
548
+ generate_name("variable_definitions"),
549
+ ],
550
+ ),
551
+ ),
552
+ generate_assign(
553
+ targets=["response"],
554
+ value=generate_await(
555
+ value=generate_call(
556
+ func=generate_attribute(
557
+ value=generate_name("self"),
558
+ attr="execute",
559
+ ),
560
+ args=[
561
+ generate_call(
562
+ func=generate_name("print_ast"),
563
+ args=[generate_name("operation_ast")],
564
+ )
565
+ ],
566
+ keywords=[
567
+ generate_keyword(
568
+ arg="variables",
569
+ value=generate_name('combined_variables["values"]'),
570
+ ),
571
+ generate_keyword(
572
+ arg="operation_name",
573
+ value=generate_name("operation_name"),
574
+ ),
575
+ ],
576
+ )
577
+ ),
578
+ ),
579
+ generate_return(
580
+ value=generate_call(
581
+ func=generate_attribute(
582
+ value=generate_name("self"),
583
+ attr="get_data",
584
+ ),
585
+ args=[generate_name("response")],
586
+ )
587
+ ),
588
+ ]
589
+ return generate_async_method_definition(
590
+ name="execute_custom_operation",
591
+ arguments=generate_arguments(
592
+ args=[
593
+ generate_arg("self"),
594
+ generate_arg("*fields", annotation=generate_name("GraphQLField")),
595
+ generate_arg(
596
+ "operation_type",
597
+ annotation=generate_name(
598
+ "OperationType",
599
+ ),
600
+ ),
601
+ generate_arg("operation_name", annotation=generate_name("str")),
602
+ ]
603
+ ),
604
+ body=method_body,
331
605
  return_type=generate_subscript(
332
606
  generate_name(DICT),
333
607
  generate_tuple([generate_name("str"), generate_name("Any")]),
334
608
  ),
335
609
  )
336
- self._class_def.body.append(async_def_node)
610
+
611
+ def create_build_selection_set(self):
612
+ return generate_method_definition(
613
+ name="_build_selection_set",
614
+ arguments=generate_arguments(
615
+ args=[
616
+ generate_arg("self"),
617
+ generate_arg(
618
+ "fields",
619
+ annotation=generate_subscript(
620
+ generate_name("Tuple"),
621
+ generate_tuple(
622
+ [
623
+ generate_name("GraphQLField"),
624
+ generate_name("..."),
625
+ ]
626
+ ),
627
+ ),
628
+ ),
629
+ ]
630
+ ),
631
+ body=[
632
+ generate_return(
633
+ value=generate_list_comp(
634
+ elt=generate_call(
635
+ func=generate_attribute(
636
+ value=generate_name(
637
+ "field",
638
+ ),
639
+ attr="to_ast",
640
+ ),
641
+ args=[generate_name("idx")],
642
+ ),
643
+ generators=[
644
+ generate_comp(
645
+ target="idx, field",
646
+ iter_="enumerate(fields)",
647
+ )
648
+ ],
649
+ ),
650
+ ),
651
+ ],
652
+ return_type=generate_subscript(
653
+ generate_name(LIST),
654
+ generate_name(SELECTION_NODE),
655
+ ),
656
+ )
657
+
658
+ def add_execute_custom_operation_method(self):
659
+ self._add_import(
660
+ generate_import_from(
661
+ [
662
+ DOCUMENT_NODE,
663
+ OPERATION_DEFINITION_NODE,
664
+ NAME_NODE,
665
+ SELECTION_SET_NODE,
666
+ PRINT_AST,
667
+ VARIABLE_DEFINITION_NODE,
668
+ VARIABLE_NODE,
669
+ NAMED_TYPE_NODE,
670
+ SELECTION_NODE,
671
+ ],
672
+ GRAPHQL_MODULE,
673
+ )
674
+ )
675
+ self._add_import(
676
+ generate_import_from(
677
+ [BASE_GRAPHQL_FIELD_CLASS_NAME], BASE_OPERATION_FILE_PATH.stem, level=1
678
+ )
679
+ )
680
+ self._add_import(generate_import_from([DICT, TUPLE, LIST, ANY], "typing"))
681
+
682
+ self._class_def.body.append(self.create_execute_custom_operation_method())
683
+ self._class_def.body.append(self.create_combine_variables_method())
684
+ self._class_def.body.append(self.create_build_variable_definitions_method())
685
+ self._class_def.body.append(self.create_build_operation_ast_method())
686
+ self._class_def.body.append(self.create_build_selection_set())
337
687
 
338
688
  def create_custom_operation_method(self, name, operation_type):
339
689
  self._add_import(
@@ -19,6 +19,7 @@ ANY = "Any"
19
19
  TYPE = "Type"
20
20
  TYPE_CHECKING = "TYPE_CHECKING"
21
21
  DICT = "Dict"
22
+ TUPLE = "Tuple"
22
23
  CALLABLE = "Callable"
23
24
  ANNOTATED = "Annotated"
24
25
  LITERAL = "Literal"
@@ -27,8 +28,12 @@ DOCUMENT_NODE = "DocumentNode"
27
28
  OPERATION_DEFINITION_NODE = "OperationDefinitionNode"
28
29
  NAME_NODE = "NameNode"
29
30
  SELECTION_SET_NODE = "SelectionSetNode"
31
+ SELECTION_NODE = "SelectionNode"
30
32
  PRINT_AST = "print_ast"
31
33
  OPERATION_TYPE = "OperationType"
34
+ VARIABLE_DEFINITION_NODE = "VariableDefinitionNode"
35
+ VARIABLE_NODE = "VariableNode"
36
+ NAMED_TYPE_NODE = "NamedTypeNode"
32
37
 
33
38
  HTTPX = "httpx"
34
39
  HTTPX_RESPONSE = "httpx.Response"