@autorest/python 6.38.1 → 6.39.0

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 (146) hide show
  1. package/README.md +2 -27
  2. package/autorest/codegen.py +0 -1
  3. package/autorest/jsonrpc/server.py +0 -3
  4. package/generator/build/lib/pygen/__init__.py +14 -23
  5. package/generator/build/lib/pygen/codegen/__init__.py +4 -4
  6. package/generator/build/lib/pygen/codegen/models/__init__.py +2 -2
  7. package/generator/build/lib/pygen/codegen/models/base.py +9 -12
  8. package/generator/build/lib/pygen/codegen/models/base_builder.py +4 -6
  9. package/generator/build/lib/pygen/codegen/models/client.py +61 -102
  10. package/generator/build/lib/pygen/codegen/models/code_model.py +29 -29
  11. package/generator/build/lib/pygen/codegen/models/combined_type.py +7 -7
  12. package/generator/build/lib/pygen/codegen/models/constant_type.py +4 -11
  13. package/generator/build/lib/pygen/codegen/models/credential_types.py +9 -11
  14. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +7 -8
  15. package/generator/build/lib/pygen/codegen/models/enum_type.py +7 -7
  16. package/generator/build/lib/pygen/codegen/models/imports.py +24 -29
  17. package/generator/build/lib/pygen/codegen/models/list_type.py +15 -14
  18. package/generator/build/lib/pygen/codegen/models/lro_operation.py +6 -6
  19. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
  20. package/generator/build/lib/pygen/codegen/models/model_type.py +11 -11
  21. package/generator/build/lib/pygen/codegen/models/operation.py +26 -56
  22. package/generator/build/lib/pygen/codegen/models/operation_group.py +11 -22
  23. package/generator/build/lib/pygen/codegen/models/paging_operation.py +15 -19
  24. package/generator/build/lib/pygen/codegen/models/parameter.py +12 -21
  25. package/generator/build/lib/pygen/codegen/models/parameter_list.py +37 -39
  26. package/generator/build/lib/pygen/codegen/models/primitive_types.py +24 -18
  27. package/generator/build/lib/pygen/codegen/models/property.py +10 -10
  28. package/generator/build/lib/pygen/codegen/models/request_builder.py +7 -8
  29. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +3 -3
  30. package/generator/build/lib/pygen/codegen/models/response.py +15 -40
  31. package/generator/build/lib/pygen/codegen/models/utils.py +2 -2
  32. package/generator/build/lib/pygen/codegen/serializers/__init__.py +26 -42
  33. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +103 -100
  34. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +22 -25
  35. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +2 -2
  36. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +49 -61
  37. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +6 -7
  38. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -2
  39. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +15 -17
  40. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  41. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  42. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +28 -18
  43. package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +1 -2
  44. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  45. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +9 -14
  46. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +7 -7
  47. package/generator/build/lib/pygen/codegen/serializers/utils.py +2 -2
  48. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  49. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  50. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  51. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  52. package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  53. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  54. package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  55. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
  56. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  57. package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
  58. package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
  59. package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
  60. package/generator/build/lib/pygen/utils.py +6 -6
  61. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  62. package/generator/pygen/__init__.py +14 -23
  63. package/generator/pygen/codegen/__init__.py +4 -4
  64. package/generator/pygen/codegen/models/__init__.py +2 -2
  65. package/generator/pygen/codegen/models/base.py +9 -12
  66. package/generator/pygen/codegen/models/base_builder.py +4 -6
  67. package/generator/pygen/codegen/models/client.py +61 -102
  68. package/generator/pygen/codegen/models/code_model.py +29 -29
  69. package/generator/pygen/codegen/models/combined_type.py +7 -7
  70. package/generator/pygen/codegen/models/constant_type.py +4 -11
  71. package/generator/pygen/codegen/models/credential_types.py +9 -11
  72. package/generator/pygen/codegen/models/dictionary_type.py +7 -8
  73. package/generator/pygen/codegen/models/enum_type.py +7 -7
  74. package/generator/pygen/codegen/models/imports.py +24 -29
  75. package/generator/pygen/codegen/models/list_type.py +15 -14
  76. package/generator/pygen/codegen/models/lro_operation.py +6 -6
  77. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  78. package/generator/pygen/codegen/models/model_type.py +11 -11
  79. package/generator/pygen/codegen/models/operation.py +26 -56
  80. package/generator/pygen/codegen/models/operation_group.py +11 -22
  81. package/generator/pygen/codegen/models/paging_operation.py +15 -19
  82. package/generator/pygen/codegen/models/parameter.py +12 -21
  83. package/generator/pygen/codegen/models/parameter_list.py +37 -39
  84. package/generator/pygen/codegen/models/primitive_types.py +24 -18
  85. package/generator/pygen/codegen/models/property.py +10 -10
  86. package/generator/pygen/codegen/models/request_builder.py +7 -8
  87. package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
  88. package/generator/pygen/codegen/models/response.py +15 -40
  89. package/generator/pygen/codegen/models/utils.py +2 -2
  90. package/generator/pygen/codegen/serializers/__init__.py +26 -42
  91. package/generator/pygen/codegen/serializers/builder_serializer.py +103 -100
  92. package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
  93. package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
  94. package/generator/pygen/codegen/serializers/general_serializer.py +49 -61
  95. package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
  96. package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
  97. package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
  98. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  99. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  100. package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
  101. package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
  102. package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  103. package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
  104. package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
  105. package/generator/pygen/codegen/serializers/utils.py +2 -2
  106. package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  107. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  108. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  109. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  110. package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  111. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  112. package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  113. package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
  114. package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  115. package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
  116. package/generator/pygen/preprocess/__init__.py +47 -30
  117. package/generator/pygen/preprocess/helpers.py +2 -2
  118. package/generator/pygen/utils.py +6 -6
  119. package/generator/pygen.egg-info/SOURCES.txt +0 -2
  120. package/package.json +2 -2
  121. package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
  122. package/autorest/multiapi/__init__.py +0 -185
  123. package/autorest/multiapi/models/__init__.py +0 -16
  124. package/autorest/multiapi/models/client.py +0 -68
  125. package/autorest/multiapi/models/code_model.py +0 -142
  126. package/autorest/multiapi/models/config.py +0 -24
  127. package/autorest/multiapi/models/constant_global_parameter.py +0 -11
  128. package/autorest/multiapi/models/global_parameter.py +0 -34
  129. package/autorest/multiapi/models/global_parameters.py +0 -53
  130. package/autorest/multiapi/models/imports.py +0 -181
  131. package/autorest/multiapi/models/mixin_operation.py +0 -38
  132. package/autorest/multiapi/models/operation_group.py +0 -29
  133. package/autorest/multiapi/models/operation_mixin_group.py +0 -89
  134. package/autorest/multiapi/serializers/__init__.py +0 -145
  135. package/autorest/multiapi/serializers/import_serializer.py +0 -181
  136. package/autorest/multiapi/templates/multiapi_config.py.jinja2 +0 -89
  137. package/autorest/multiapi/templates/multiapi_init.py.jinja2 +0 -22
  138. package/autorest/multiapi/templates/multiapi_models.py.jinja2 +0 -9
  139. package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +0 -39
  140. package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +0 -163
  141. package/autorest/multiapi/templates/multiapi_version.py.jinja2 +0 -8
  142. package/autorest/multiapi/utils.py +0 -51
  143. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
  144. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
  145. package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
  146. package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
@@ -6,7 +6,7 @@
6
6
  # --------------------------------------------------------------------------
7
7
  from abc import abstractmethod
8
8
  from collections import defaultdict
9
- from typing import Generic, List, Type, TypeVar, Dict, Union, Optional, cast
9
+ from typing import Generic, Type, TypeVar, Union, Optional, cast
10
10
 
11
11
  from ..models import (
12
12
  Operation,
@@ -33,13 +33,13 @@ from ..models import (
33
33
  ByteArraySchema,
34
34
  )
35
35
  from ..models.utils import NamespaceType
36
- from .parameter_serializer import ParameterSerializer, PopKwargType
36
+ from .parameter_serializer import ParameterSerializer, PopKwargType, check_body_optional
37
37
  from ..models.parameter_list import ParameterType
38
38
  from . import utils
39
39
  from ...utils import xml_serializable, json_serializable
40
40
 
41
41
  T = TypeVar("T")
42
- OrderedSet = Dict[T, None]
42
+ OrderedSet = dict[T, None]
43
43
 
44
44
  BuilderType = TypeVar(
45
45
  "BuilderType",
@@ -58,11 +58,11 @@ OperationType = TypeVar(
58
58
  )
59
59
 
60
60
 
61
- def _all_same(data: List[List[str]]) -> bool:
61
+ def _all_same(data: list[list[str]]) -> bool:
62
62
  return len(data) > 1 and all(sorted(data[0]) == sorted(data[i]) for i in range(1, len(data)))
63
63
 
64
64
 
65
- def _xml_config(send_xml: bool, content_types: List[str]) -> str:
65
+ def _xml_config(send_xml: bool, content_types: list[str]) -> str:
66
66
  if not (send_xml and "xml" in str(content_types)):
67
67
  return ""
68
68
  if len(content_types) == 1:
@@ -75,8 +75,8 @@ def _escape_str(input_str: str) -> str:
75
75
  return f'"{replace}"'
76
76
 
77
77
 
78
- def _get_polymorphic_subtype_template(polymorphic_subtype: ModelType) -> List[str]:
79
- retval: List[str] = []
78
+ def _get_polymorphic_subtype_template(polymorphic_subtype: ModelType) -> list[str]:
79
+ retval: list[str] = []
80
80
  retval.append("")
81
81
  retval.append(f'# JSON input template for discriminator value "{polymorphic_subtype.discriminator_value}":')
82
82
  subtype_template = utils.json_dumps_template(
@@ -100,8 +100,8 @@ def _get_polymorphic_subtype_template(polymorphic_subtype: ModelType) -> List[st
100
100
  return retval
101
101
 
102
102
 
103
- def _serialize_grouped_body(builder: BuilderType) -> List[str]:
104
- retval: List[str] = []
103
+ def _serialize_grouped_body(builder: BuilderType) -> list[str]:
104
+ retval: list[str] = []
105
105
  for grouped_parameter in builder.parameters.grouped:
106
106
  retval.append(f"{grouped_parameter.client_name} = None")
107
107
  groupers = [p for p in builder.parameters if p.grouper]
@@ -116,8 +116,8 @@ def _serialize_grouped_body(builder: BuilderType) -> List[str]:
116
116
  return retval
117
117
 
118
118
 
119
- def _serialize_flattened_body(body_parameter: BodyParameter) -> List[str]:
120
- retval: List[str] = []
119
+ def _serialize_flattened_body(body_parameter: BodyParameter) -> list[str]:
120
+ retval: list[str] = []
121
121
  if not body_parameter.property_to_parameter_name:
122
122
  raise ValueError("This method can't be called if the operation doesn't need parameter flattening")
123
123
 
@@ -130,8 +130,8 @@ def _serialize_flattened_body(body_parameter: BodyParameter) -> List[str]:
130
130
  return retval
131
131
 
132
132
 
133
- def _serialize_json_model_body(body_parameter: BodyParameter, parameters: List[ParameterType]) -> List[str]:
134
- retval: List[str] = []
133
+ def _serialize_json_model_body(body_parameter: BodyParameter, parameters: list[ParameterType]) -> list[str]:
134
+ retval: list[str] = []
135
135
  if not body_parameter.property_to_parameter_name:
136
136
  raise ValueError("This method can't be called if the operation doesn't need parameter flattening")
137
137
 
@@ -154,8 +154,8 @@ def _serialize_json_model_body(body_parameter: BodyParameter, parameters: List[P
154
154
  return retval
155
155
 
156
156
 
157
- def _serialize_multipart_body(builder: BuilderType) -> List[str]:
158
- retval: List[str] = []
157
+ def _serialize_multipart_body(builder: BuilderType) -> list[str]:
158
+ retval: list[str] = []
159
159
  body_param = builder.parameters.body_parameter
160
160
  # we have to construct our form data before passing to the request as well
161
161
  retval.append("# Construct form data")
@@ -168,7 +168,7 @@ def _serialize_multipart_body(builder: BuilderType) -> List[str]:
168
168
 
169
169
  def _get_json_response_template_to_status_codes(
170
170
  builder: OperationType,
171
- ) -> Dict[str, List[str]]:
171
+ ) -> dict[str, list[str]]:
172
172
  retval = defaultdict(list)
173
173
  for response in builder.responses:
174
174
  json_template = response.get_json_template_representation()
@@ -223,12 +223,12 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
223
223
  """Name of serializer"""
224
224
 
225
225
  @abstractmethod
226
- def response_docstring(self, builder: BuilderType) -> List[str]:
226
+ def response_docstring(self, builder: BuilderType) -> list[str]:
227
227
  """Response portion of the docstring"""
228
228
 
229
- def decorators(self, builder: BuilderType) -> List[str]:
229
+ def decorators(self, builder: BuilderType) -> list[str]:
230
230
  """Decorators for the method"""
231
- retval: List[str] = []
231
+ retval: list[str] = []
232
232
  if builder.is_overload:
233
233
  return ["@overload"]
234
234
  if self.code_model.options["tracing"] and builder.want_tracing:
@@ -262,8 +262,8 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
262
262
  response_type_annotation=response_type_annotation,
263
263
  )
264
264
 
265
- def description_and_summary(self, builder: BuilderType) -> List[str]:
266
- description_list: List[str] = []
265
+ def description_and_summary(self, builder: BuilderType) -> list[str]:
266
+ description_list: list[str] = []
267
267
  description_list.append(f"{builder.summary.strip() if builder.summary else builder.description.strip()}")
268
268
  if builder.summary and builder.description:
269
269
  description_list.append("")
@@ -272,10 +272,10 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
272
272
  return description_list
273
273
 
274
274
  @staticmethod
275
- def line_too_long(docs: List[str], indentation: int = 0) -> bool:
275
+ def line_too_long(docs: list[str], indentation: int = 0) -> bool:
276
276
  return any(len(line) > (120 - indentation) for line in docs)
277
277
 
278
- def example_template(self, builder: BuilderType) -> List[str]:
278
+ def example_template(self, builder: BuilderType) -> list[str]:
279
279
  template = []
280
280
  if builder.abstract:
281
281
  return []
@@ -284,8 +284,8 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
284
284
  template += self._json_input_example_template(builder)
285
285
  return template
286
286
 
287
- def param_description(self, builder: BuilderType) -> List[str]:
288
- description_list: List[str] = []
287
+ def param_description(self, builder: BuilderType) -> list[str]:
288
+ description_list: list[str] = []
289
289
  for param in builder.parameters.method:
290
290
  if (
291
291
  not param.in_docstring
@@ -305,7 +305,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
305
305
  description_list.append(f":{param.docstring_type_keyword} {param.client_name}: {docstring_type}")
306
306
  return description_list
307
307
 
308
- def param_description_and_response_docstring(self, builder: BuilderType) -> List[str]:
308
+ def param_description_and_response_docstring(self, builder: BuilderType) -> list[str]:
309
309
  if builder.abstract:
310
310
  return []
311
311
  return self.param_description(builder) + self.response_docstring(builder)
@@ -314,8 +314,8 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
314
314
  @abstractmethod
315
315
  def _json_response_template_name(self) -> str: ...
316
316
 
317
- def _json_input_example_template(self, builder: BuilderType) -> List[str]:
318
- template: List[str] = []
317
+ def _json_input_example_template(self, builder: BuilderType) -> list[str]:
318
+ template: list[str] = []
319
319
  if not builder.parameters.has_body or builder.parameters.body_parameter.flattened:
320
320
  # No input template if now body parameter
321
321
  return template
@@ -340,7 +340,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
340
340
  return template
341
341
  json_type = target_model_type
342
342
 
343
- polymorphic_subtypes: List[ModelType] = []
343
+ polymorphic_subtypes: list[ModelType] = []
344
344
  json_type.get_polymorphic_subtypes(polymorphic_subtypes)
345
345
  if polymorphic_subtypes:
346
346
  # we just assume one kind of polymorphic body for input
@@ -364,7 +364,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
364
364
  template.extend(f"{builder.parameters.body_parameter.client_name} = {json_template}".splitlines())
365
365
  return template
366
366
 
367
- def serialize_path(self, builder: BuilderType) -> List[str]:
367
+ def serialize_path(self, builder: BuilderType) -> list[str]:
368
368
  return self.parameter_serializer.serialize_path(builder.parameters.path, self.serializer_name)
369
369
 
370
370
  @property
@@ -377,7 +377,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]):
377
377
 
378
378
  class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
379
379
 
380
- def description_and_summary(self, builder: RequestBuilderType) -> List[str]:
380
+ def description_and_summary(self, builder: RequestBuilderType) -> list[str]:
381
381
  retval = super().description_and_summary(builder)
382
382
  retval += [
383
383
  "See https://aka.ms/azsdk/dpcodegen/python/send_request for how to incorporate this "
@@ -401,7 +401,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
401
401
  @staticmethod
402
402
  def declare_non_inputtable_headers_queries(
403
403
  builder: RequestBuilderType,
404
- ) -> List[str]:
404
+ ) -> list[str]:
405
405
  def _get_value(param):
406
406
  declaration = param.get_declaration() if param.constant else None
407
407
  if param.location in [ParameterLocation.HEADER, ParameterLocation.QUERY]:
@@ -423,7 +423,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
423
423
  def _need_self_param(self) -> bool:
424
424
  return False
425
425
 
426
- def response_docstring(self, builder: RequestBuilderType) -> List[str]:
426
+ def response_docstring(self, builder: RequestBuilderType) -> list[str]:
427
427
  request_full_path = f"{self.code_model.core_library}.rest.HttpRequest"
428
428
  response_str = (
429
429
  f":return: Returns an :class:`~{request_full_path}` that you will pass to the client's "
@@ -433,7 +433,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
433
433
  rtype_str = f":rtype: ~{request_full_path}"
434
434
  return [response_str, rtype_str]
435
435
 
436
- def pop_kwargs_from_signature(self, builder: RequestBuilderType) -> List[str]:
436
+ def pop_kwargs_from_signature(self, builder: RequestBuilderType) -> list[str]:
437
437
  return self.parameter_serializer.pop_kwargs_from_signature(
438
438
  builder.parameters.kwargs_to_pop,
439
439
  check_kwarg_dict=True,
@@ -442,7 +442,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
442
442
  )
443
443
 
444
444
  @staticmethod
445
- def create_http_request(builder: RequestBuilderType) -> List[str]:
445
+ def create_http_request(builder: RequestBuilderType) -> list[str]:
446
446
  retval = ["return HttpRequest("]
447
447
  retval.append(f' method="{builder.method}",')
448
448
  retval.append(" url=_url,")
@@ -462,7 +462,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
462
462
  retval.append(")")
463
463
  return retval
464
464
 
465
- def serialize_headers(self, builder: RequestBuilderType) -> List[str]:
465
+ def serialize_headers(self, builder: RequestBuilderType) -> list[str]:
466
466
  headers = [
467
467
  h
468
468
  for h in builder.parameters.headers
@@ -480,7 +480,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
480
480
  )
481
481
  return retval
482
482
 
483
- def serialize_query(self, builder: RequestBuilderType) -> List[str]:
483
+ def serialize_query(self, builder: RequestBuilderType) -> list[str]:
484
484
  retval = ["# Construct parameters"]
485
485
  for parameter in builder.parameters.query:
486
486
  retval.extend(
@@ -505,7 +505,7 @@ class RequestBuilderSerializer(_BuilderBaseSerializer[RequestBuilderType]):
505
505
 
506
506
 
507
507
  class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
508
- def description_and_summary(self, builder: OperationType) -> List[str]:
508
+ def description_and_summary(self, builder: OperationType) -> list[str]:
509
509
  retval = super().description_and_summary(builder)
510
510
  if builder.deprecated:
511
511
  retval.append(".. warning::")
@@ -521,12 +521,12 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
521
521
  def _json_response_template_name(self) -> str:
522
522
  return "response"
523
523
 
524
- def example_template(self, builder: OperationType) -> List[str]:
524
+ def example_template(self, builder: OperationType) -> list[str]:
525
525
  if self.code_model.options["models-mode"] in ("msrest", "dpg"):
526
526
  return []
527
527
  retval = super().example_template(builder)
528
528
  for response in builder.responses:
529
- polymorphic_subtypes: List[ModelType] = []
529
+ polymorphic_subtypes: list[ModelType] = []
530
530
  if not response.type:
531
531
  continue
532
532
  response.get_polymorphic_subtypes(polymorphic_subtypes)
@@ -556,7 +556,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
556
556
  retval.extend(f"{self._json_response_template_name} == {response_body}".splitlines())
557
557
  return retval
558
558
 
559
- def make_pipeline_call(self, builder: OperationType) -> List[str]:
559
+ def make_pipeline_call(self, builder: OperationType) -> list[str]:
560
560
  retval = []
561
561
  type_ignore = self.async_mode and builder.group_name == "" # is in a mixin
562
562
  if builder.stream_value is True and not self.code_model.options["version-tolerant"]:
@@ -587,7 +587,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
587
587
  def serializer_name(self) -> str:
588
588
  return "self._serialize"
589
589
 
590
- def decorators(self, builder: OperationType) -> List[str]:
590
+ def decorators(self, builder: OperationType) -> list[str]:
591
591
  """Decorators for the method"""
592
592
  retval = super().decorators(builder)
593
593
  if self._api_version_validation(builder):
@@ -597,7 +597,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
597
597
  def _api_version_validation(self, builder: OperationType) -> str:
598
598
  if builder.is_overload:
599
599
  return ""
600
- retval: List[str] = []
600
+ retval: list[str] = []
601
601
  if builder.added_on:
602
602
  retval.append(f' method_added_on="{builder.added_on}",')
603
603
  params_added_on = defaultdict(list)
@@ -613,7 +613,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
613
613
  return f"@api_version_validation(\n{retval_str}\n)"
614
614
  return ""
615
615
 
616
- def pop_kwargs_from_signature(self, builder: OperationType) -> List[str]:
616
+ def pop_kwargs_from_signature(self, builder: OperationType) -> list[str]:
617
617
  kwargs_to_pop = builder.parameters.kwargs_to_pop
618
618
  kwargs = self.parameter_serializer.pop_kwargs_from_signature(
619
619
  kwargs_to_pop,
@@ -628,8 +628,8 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
628
628
  if builder.has_kwargs_to_pop_with_default(kwargs_to_pop, ParameterLocation.QUERY) # type: ignore
629
629
  else PopKwargType.SIMPLE
630
630
  ),
631
- check_client_input=not self.code_model.options["multiapi"],
632
- operation_name=f"('{builder.name}')" if builder.group_name == "" else "",
631
+ check_client_input=True,
632
+ body_parameter=builder.parameters.body_parameter if builder.parameters.has_body else None,
633
633
  )
634
634
  for p in builder.parameters.parameters:
635
635
  if p.hide_in_operation_signature and not p.is_continuation_token:
@@ -640,7 +640,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
640
640
  kwargs.append(f"cls: {cls_annotation} = kwargs.pop(\n 'cls', None\n)")
641
641
  return kwargs
642
642
 
643
- def response_docstring(self, builder: OperationType) -> List[str]:
643
+ def response_docstring(self, builder: OperationType) -> list[str]:
644
644
  response_str = f":return: {builder.response_docstring_text(async_mode=self.async_mode)}"
645
645
  response_docstring_type = builder.response_docstring_type(
646
646
  async_mode=self.async_mode, serialize_namespace=self.serialize_namespace
@@ -652,12 +652,12 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
652
652
  f":raises ~{self.code_model.core_library}.exceptions.HttpResponseError:",
653
653
  ]
654
654
 
655
- def _serialize_body_parameter(self, builder: OperationType) -> List[str]:
655
+ def _serialize_body_parameter(self, builder: OperationType) -> list[str]:
656
656
  """We need to serialize params if they're not meant to be streamed in.
657
657
 
658
658
  This function serializes the body params that need to be serialized.
659
659
  """
660
- retval: List[str] = []
660
+ retval: list[str] = []
661
661
  body_param = builder.parameters.body_parameter
662
662
  if body_param.is_form_data:
663
663
  model_type = cast(
@@ -677,8 +677,8 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
677
677
  f" if isinstance({body_param.client_name}, _Model) else",
678
678
  f" {body_param.client_name}",
679
679
  ")",
680
- f"_file_fields: List[str] = {file_fields}",
681
- f"_data_fields: List[str] = {data_fields}",
680
+ f"_file_fields: list[str] = {file_fields}",
681
+ f"_data_fields: list[str] = {data_fields}",
682
682
  "_files, _data = prepare_multipart_form_data(_body, _file_fields, _data_fields)",
683
683
  ]
684
684
  )
@@ -729,7 +729,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
729
729
  def _create_body_parameter(
730
730
  self,
731
731
  builder: OperationType,
732
- ) -> List[str]:
732
+ ) -> list[str]:
733
733
  """Create the body parameter before we pass it as either json or content to the request builder"""
734
734
  retval = []
735
735
  body_param = builder.parameters.body_parameter
@@ -757,15 +757,22 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
757
757
  retval.extend(self._serialize_body_parameter(builder))
758
758
  return retval
759
759
 
760
- def _initialize_overloads(self, builder: OperationType, is_paging: bool = False) -> List[str]:
761
- retval: List[str] = []
760
+ def _initialize_overloads(self, builder: OperationType, is_paging: bool = False) -> list[str]:
761
+ retval: list[str] = []
762
762
  # For paging, we put body parameter in local place outside `prepare_request`
763
763
  if is_paging:
764
764
  return retval
765
765
  same_content_type = len(set(o.parameters.body_parameter.default_content_type for o in builder.overloads)) == 1
766
+ check_body_suffix = ""
767
+ if builder.parameters.has_body:
768
+ body_parameter = builder.parameters.body_parameter
769
+ is_body_optional = check_body_optional(body_parameter)
770
+ if is_body_optional:
771
+ check_body_suffix = f" if {body_parameter.client_name} else None" if is_body_optional else ""
772
+
766
773
  if same_content_type:
767
774
  default_content_type = builder.overloads[0].parameters.body_parameter.default_content_type
768
- retval.append(f'content_type = content_type or "{default_content_type}"')
775
+ retval.append(f'content_type = content_type or "{default_content_type}"{check_body_suffix}')
769
776
  client_names = [
770
777
  overload.request_builder.parameters.body_parameter.client_name for overload in builder.overloads
771
778
  ]
@@ -780,7 +787,9 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
780
787
  binary_body_param = binary_overload.parameters.body_parameter
781
788
  retval.append(f"if {binary_body_param.type.instance_check_template.format(binary_body_param.client_name)}:")
782
789
  if binary_body_param.default_content_type and not same_content_type:
783
- retval.append(f' content_type = content_type or "{binary_body_param.default_content_type}"')
790
+ retval.append(
791
+ f' content_type = content_type or "{binary_body_param.default_content_type}"{check_body_suffix}'
792
+ )
784
793
  retval.extend(f" {l}" for l in self._create_body_parameter(binary_overload))
785
794
  retval.append("else:")
786
795
  other_overload = cast(
@@ -791,7 +800,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
791
800
  if other_overload.parameters.body_parameter.default_content_type and not same_content_type:
792
801
  retval.append(
793
802
  " content_type = content_type or "
794
- f'"{other_overload.parameters.body_parameter.default_content_type}"'
803
+ f'"{other_overload.parameters.body_parameter.default_content_type}"{check_body_suffix}'
795
804
  )
796
805
  except StopIteration:
797
806
  for idx, overload in enumerate(builder.overloads):
@@ -801,7 +810,9 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
801
810
  f"{if_statement} {body_param.type.instance_check_template.format(body_param.client_name)}:"
802
811
  )
803
812
  if body_param.default_content_type and not same_content_type:
804
- retval.append(f' content_type = content_type or "{body_param.default_content_type}"')
813
+ retval.append(
814
+ f' content_type = content_type or "{body_param.default_content_type}"{check_body_suffix}'
815
+ )
805
816
  retval.extend(f" {l}" for l in self._create_body_parameter(cast(OperationType, overload)))
806
817
  return retval
807
818
 
@@ -810,8 +821,8 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
810
821
  builder: OperationType,
811
822
  request_builder: RequestBuilderType,
812
823
  is_next_request: bool = False,
813
- ) -> List[str]:
814
- retval: List[str] = []
824
+ ) -> list[str]:
825
+ retval: list[str] = []
815
826
  if self.code_model.options["builders-visibility"] == "embedded":
816
827
  request_path_name = request_builder.name
817
828
  else:
@@ -868,8 +879,8 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
868
879
  retval.append(")")
869
880
  return retval
870
881
 
871
- def _postprocess_http_request(self, builder: OperationType, template_url: Optional[str] = None) -> List[str]:
872
- retval: List[str] = []
882
+ def _postprocess_http_request(self, builder: OperationType, template_url: Optional[str] = None) -> list[str]:
883
+ retval: list[str] = []
873
884
  if builder.parameters.path:
874
885
  retval.extend(self.serialize_path(builder))
875
886
  url_to_format = "_request.url"
@@ -890,7 +901,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
890
901
  template_url: Optional[str] = None,
891
902
  is_next_request: bool = False,
892
903
  is_paging: bool = False,
893
- ) -> List[str]:
904
+ ) -> list[str]:
894
905
  retval = []
895
906
  if builder.parameters.grouped:
896
907
  # request builders don't allow grouped parameters, so we group them before making the call
@@ -913,18 +924,18 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
913
924
  retval.extend(self._postprocess_http_request(builder, template_url))
914
925
  return retval
915
926
 
916
- def call_request_builder(self, builder: OperationType, is_paging: bool = False) -> List[str]:
927
+ def call_request_builder(self, builder: OperationType, is_paging: bool = False) -> list[str]:
917
928
  return self._call_request_builder_helper(builder, builder.request_builder, is_paging=is_paging)
918
929
 
919
930
  def response_headers_and_deserialization(
920
931
  self,
921
932
  builder: OperationType,
922
933
  response: Response,
923
- ) -> List[str]:
934
+ ) -> list[str]:
924
935
  return self.response_headers(response) + self.response_deserialization(builder, response)
925
936
 
926
- def response_headers(self, response: Response) -> List[str]:
927
- retval: List[str] = [
937
+ def response_headers(self, response: Response) -> list[str]:
938
+ retval: list[str] = [
928
939
  (
929
940
  f"response_headers['{response_header.wire_name}']=self._deserialize("
930
941
  f"'{response_header.serialization_type(serialize_namespace=self.serialize_namespace)}', response.headers.get('{response_header.wire_name}'))" # pylint: disable=line-too-long
@@ -939,9 +950,9 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
939
950
  self,
940
951
  builder: OperationType,
941
952
  response: Response,
942
- ) -> List[str]:
943
- retval: List[str] = []
944
- deserialize_code: List[str] = []
953
+ ) -> list[str]:
954
+ retval: list[str] = []
955
+ deserialize_code: list[str] = []
945
956
  stream_logic = True
946
957
  if builder.has_stream_response:
947
958
  if isinstance(response.type, ByteArraySchema):
@@ -1003,7 +1014,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
1003
1014
  retval.extend(deserialize_code)
1004
1015
  return retval
1005
1016
 
1006
- def handle_error_response(self, builder: OperationType) -> List[str]:
1017
+ def handle_error_response(self, builder: OperationType) -> list[str]:
1007
1018
  async_await = "await " if self.async_mode else ""
1008
1019
  retval = [f"if response.status_code not in {str(builder.success_status_codes)}:"]
1009
1020
  response_read = [
@@ -1067,9 +1078,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
1067
1078
  )
1068
1079
  if self.code_model.options["models-mode"] == "dpg":
1069
1080
  if xml_serializable(str(e.default_content_type)):
1070
- retval.append(
1071
- f" error = _failsafe_deserialize_xml({type_annotation}, response)"
1072
- )
1081
+ retval.append(f" error = _failsafe_deserialize_xml({type_annotation}, response)")
1073
1082
  else:
1074
1083
  retval.append(f" error = _failsafe_deserialize({type_annotation}, response)")
1075
1084
  else:
@@ -1086,9 +1095,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
1086
1095
  if builder.non_default_errors:
1087
1096
  retval.append(" else:")
1088
1097
  if self.code_model.options["models-mode"] == "dpg":
1089
- retval.append(
1090
- f"{indent}error = _failsafe_deserialize({default_error_deserialization}, response)"
1091
- )
1098
+ retval.append(f"{indent}error = _failsafe_deserialize({default_error_deserialization}, response)")
1092
1099
  else:
1093
1100
  retval.append(
1094
1101
  f"{indent}error = self._deserialize.failsafe_deserialize({default_error_deserialization}, "
@@ -1102,8 +1109,8 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
1102
1109
  )
1103
1110
  return retval
1104
1111
 
1105
- def handle_response(self, builder: OperationType) -> List[str]:
1106
- retval: List[str] = ["response = pipeline_response.http_response"]
1112
+ def handle_response(self, builder: OperationType) -> list[str]:
1113
+ retval: list[str] = ["response = pipeline_response.http_response"]
1107
1114
  retval.append("")
1108
1115
  retval.extend(self.handle_error_response(builder))
1109
1116
  retval.append("")
@@ -1179,7 +1186,7 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]):
1179
1186
  return False
1180
1187
  return True
1181
1188
 
1182
- def error_map(self, builder: OperationType) -> List[str]:
1189
+ def error_map(self, builder: OperationType) -> list[str]:
1183
1190
  retval = ["error_map: MutableMapping = {"]
1184
1191
  if builder.non_default_errors and self.code_model.options["models-mode"]:
1185
1192
  # TODO: we should decide whether to add the build-in error map when there is a customized default error type
@@ -1226,12 +1233,12 @@ PagingOperationType = TypeVar("PagingOperationType", bound=Union[PagingOperation
1226
1233
 
1227
1234
  class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1228
1235
 
1229
- def serialize_path(self, builder: PagingOperationType) -> List[str]:
1236
+ def serialize_path(self, builder: PagingOperationType) -> list[str]:
1230
1237
  return self.parameter_serializer.serialize_path(builder.parameters.path, self.serializer_name)
1231
1238
 
1232
- def decorators(self, builder: PagingOperationType) -> List[str]:
1239
+ def decorators(self, builder: PagingOperationType) -> list[str]:
1233
1240
  """Decorators for the method"""
1234
- retval: List[str] = []
1241
+ retval: list[str] = []
1235
1242
  if builder.is_overload:
1236
1243
  return ["@overload"]
1237
1244
  if self.code_model.options["tracing"] and builder.want_tracing:
@@ -1240,7 +1247,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1240
1247
  retval.append(self._api_version_validation(builder))
1241
1248
  return retval
1242
1249
 
1243
- def call_next_link_request_builder(self, builder: PagingOperationType) -> List[str]:
1250
+ def call_next_link_request_builder(self, builder: PagingOperationType) -> list[str]:
1244
1251
  if builder.next_request_builder:
1245
1252
  request_builder = builder.next_request_builder
1246
1253
  template_url = None
@@ -1256,7 +1263,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1256
1263
  template_url=template_url,
1257
1264
  is_next_request=True,
1258
1265
  )
1259
- retval: List[str] = []
1266
+ retval: list[str] = []
1260
1267
  query_str = ""
1261
1268
  next_link_str = "next_link"
1262
1269
  try:
@@ -1273,11 +1280,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1273
1280
  "})",
1274
1281
  ]
1275
1282
  )
1276
- api_version = (
1277
- "self._api_version"
1278
- if self.code_model.options["multiapi"] and builder.group_name
1279
- else api_version_param.full_client_name
1280
- )
1283
+ api_version = api_version_param.full_client_name
1281
1284
  retval.append(f'_next_request_params["api-version"] = {api_version}')
1282
1285
  if builder.next_link_reinjected_parameters:
1283
1286
  for param in builder.next_link_reinjected_parameters:
@@ -1300,7 +1303,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1300
1303
 
1301
1304
  return retval
1302
1305
 
1303
- def _prepare_request_callback(self, builder: PagingOperationType) -> List[str]:
1306
+ def _prepare_request_callback(self, builder: PagingOperationType) -> list[str]:
1304
1307
  retval = self._initialize_overloads(builder)
1305
1308
  if builder.has_continuation_token:
1306
1309
  retval.append(f"def prepare_request({builder.next_variable_name}=None):")
@@ -1323,7 +1326,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1323
1326
  def _function_def(self) -> str:
1324
1327
  return "def"
1325
1328
 
1326
- def _extract_data_callback(self, builder: PagingOperationType) -> List[str]: # pylint: disable=too-many-statements
1329
+ def _extract_data_callback(self, builder: PagingOperationType) -> list[str]: # pylint: disable=too-many-statements
1327
1330
  retval = [f"{'async ' if self.async_mode else ''}def extract_data(pipeline_response):"]
1328
1331
  response = builder.responses[0]
1329
1332
  deserialized = "pipeline_response.http_response.json()"
@@ -1386,7 +1389,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1386
1389
  retval.append(f" return {cont_token_property}, {list_type}(list_of_elem)")
1387
1390
  return retval
1388
1391
 
1389
- def _get_next_callback(self, builder: PagingOperationType) -> List[str]:
1392
+ def _get_next_callback(self, builder: PagingOperationType) -> list[str]:
1390
1393
  retval = [f"{'async ' if self.async_mode else ''}def get_next({builder.next_variable_name}=None):"]
1391
1394
  retval.append(f" _request = prepare_request({builder.next_variable_name})")
1392
1395
  retval.append("")
@@ -1398,7 +1401,7 @@ class _PagingOperationSerializer(_OperationSerializer[PagingOperationType]):
1398
1401
  retval.append(" return pipeline_response")
1399
1402
  return retval
1400
1403
 
1401
- def set_up_params_for_pager(self, builder: PagingOperationType) -> List[str]:
1404
+ def set_up_params_for_pager(self, builder: PagingOperationType) -> list[str]:
1402
1405
  retval = []
1403
1406
  retval.extend(self.error_map(builder))
1404
1407
  retval.extend(self._prepare_request_callback(builder))
@@ -1418,10 +1421,10 @@ LROOperationType = TypeVar("LROOperationType", bound=Union[LROOperation, LROPagi
1418
1421
 
1419
1422
 
1420
1423
  class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1421
- def serialize_path(self, builder: LROOperationType) -> List[str]:
1424
+ def serialize_path(self, builder: LROOperationType) -> list[str]:
1422
1425
  return self.parameter_serializer.serialize_path(builder.parameters.path, self.serializer_name)
1423
1426
 
1424
- def initial_call(self, builder: LROOperationType) -> List[str]:
1427
+ def initial_call(self, builder: LROOperationType) -> list[str]:
1425
1428
  retval = [
1426
1429
  f"polling: Union[bool, {builder.get_base_polling_method(self.async_mode)}] = kwargs.pop('polling', True)",
1427
1430
  ]
@@ -1448,7 +1451,7 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1448
1451
  retval.append("kwargs.pop('error_map', None)")
1449
1452
  return retval
1450
1453
 
1451
- def return_lro_poller(self, builder: LROOperationType) -> List[str]:
1454
+ def return_lro_poller(self, builder: LROOperationType) -> list[str]:
1452
1455
  retval = []
1453
1456
  lro_options_str = (
1454
1457
  "lro_options={'final-state-via': '" + builder.lro_options["final-state-via"] + "'},"
@@ -1490,7 +1493,7 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1490
1493
  retval.append(" )")
1491
1494
  return retval
1492
1495
 
1493
- def get_long_running_output(self, builder: LROOperationType) -> List[str]:
1496
+ def get_long_running_output(self, builder: LROOperationType) -> list[str]:
1494
1497
  pylint_disable = ""
1495
1498
  if not builder.lro_response:
1496
1499
  pylint_disable = " # pylint: disable=inconsistent-return-statements"
@@ -1538,7 +1541,7 @@ class LROPagingOperationSerializer(
1538
1541
  def _function_def(self) -> str:
1539
1542
  return "async def" if self.async_mode else "def"
1540
1543
 
1541
- def get_long_running_output(self, builder: LROPagingOperation) -> List[str]:
1544
+ def get_long_running_output(self, builder: LROPagingOperation) -> list[str]:
1542
1545
  retval = ["def get_long_running_output(pipeline_response):"]
1543
1546
  retval.append(f" {self._function_def} internal_get_next({builder.next_variable_name}=None):")
1544
1547
  retval.append(f" if {builder.next_variable_name} is None:")
@@ -1550,7 +1553,7 @@ class LROPagingOperationSerializer(
1550
1553
  retval.append(" )")
1551
1554
  return retval
1552
1555
 
1553
- def decorators(self, builder: LROPagingOperation) -> List[str]:
1556
+ def decorators(self, builder: LROPagingOperation) -> list[str]:
1554
1557
  """Decorators for the method"""
1555
1558
  return _LROOperationSerializer.decorators(self, builder) # type: ignore
1556
1559