@autorest/python 6.13.16 → 6.13.17

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 (73) hide show
  1. package/autorest/__init__.py +4 -12
  2. package/autorest/_utils.py +5 -20
  3. package/autorest/black/__init__.py +1 -3
  4. package/autorest/codegen/__init__.py +29 -96
  5. package/autorest/codegen/models/__init__.py +1 -3
  6. package/autorest/codegen/models/base.py +2 -6
  7. package/autorest/codegen/models/base_builder.py +2 -6
  8. package/autorest/codegen/models/client.py +24 -86
  9. package/autorest/codegen/models/code_model.py +13 -53
  10. package/autorest/codegen/models/combined_type.py +3 -9
  11. package/autorest/codegen/models/constant_type.py +4 -14
  12. package/autorest/codegen/models/credential_types.py +11 -35
  13. package/autorest/codegen/models/dictionary_type.py +4 -12
  14. package/autorest/codegen/models/enum_type.py +10 -31
  15. package/autorest/codegen/models/imports.py +15 -41
  16. package/autorest/codegen/models/list_type.py +7 -23
  17. package/autorest/codegen/models/lro_operation.py +6 -18
  18. package/autorest/codegen/models/lro_paging_operation.py +1 -3
  19. package/autorest/codegen/models/model_type.py +21 -73
  20. package/autorest/codegen/models/operation.py +41 -139
  21. package/autorest/codegen/models/operation_group.py +21 -60
  22. package/autorest/codegen/models/paging_operation.py +13 -43
  23. package/autorest/codegen/models/parameter.py +16 -54
  24. package/autorest/codegen/models/parameter_list.py +27 -103
  25. package/autorest/codegen/models/primitive_types.py +15 -49
  26. package/autorest/codegen/models/property.py +8 -28
  27. package/autorest/codegen/models/request_builder.py +11 -39
  28. package/autorest/codegen/models/request_builder_parameter.py +4 -13
  29. package/autorest/codegen/models/response.py +16 -57
  30. package/autorest/codegen/serializers/__init__.py +46 -150
  31. package/autorest/codegen/serializers/builder_serializer.py +113 -402
  32. package/autorest/codegen/serializers/client_serializer.py +25 -78
  33. package/autorest/codegen/serializers/enum_serializer.py +1 -3
  34. package/autorest/codegen/serializers/general_serializer.py +6 -22
  35. package/autorest/codegen/serializers/import_serializer.py +13 -40
  36. package/autorest/codegen/serializers/metadata_serializer.py +7 -21
  37. package/autorest/codegen/serializers/model_init_serializer.py +1 -5
  38. package/autorest/codegen/serializers/model_serializer.py +13 -51
  39. package/autorest/codegen/serializers/operation_groups_serializer.py +1 -3
  40. package/autorest/codegen/serializers/operations_init_serializer.py +2 -8
  41. package/autorest/codegen/serializers/parameter_serializer.py +8 -26
  42. package/autorest/codegen/serializers/request_builders_serializer.py +1 -3
  43. package/autorest/codegen/serializers/sample_serializer.py +13 -39
  44. package/autorest/codegen/serializers/test_serializer.py +10 -30
  45. package/autorest/codegen/serializers/types_serializer.py +1 -3
  46. package/autorest/jsonrpc/__init__.py +1 -3
  47. package/autorest/jsonrpc/server.py +3 -9
  48. package/autorest/jsonrpc/stdstream.py +4 -12
  49. package/autorest/m2r/__init__.py +2 -6
  50. package/autorest/m4reformatter/__init__.py +72 -237
  51. package/autorest/multiapi/__init__.py +4 -11
  52. package/autorest/multiapi/models/client.py +7 -21
  53. package/autorest/multiapi/models/code_model.py +9 -28
  54. package/autorest/multiapi/models/config.py +1 -3
  55. package/autorest/multiapi/models/global_parameters.py +6 -16
  56. package/autorest/multiapi/models/imports.py +5 -9
  57. package/autorest/multiapi/models/operation_mixin_group.py +5 -17
  58. package/autorest/multiapi/serializers/__init__.py +10 -31
  59. package/autorest/multiapi/serializers/import_serializer.py +8 -24
  60. package/autorest/multiapi/utils.py +2 -6
  61. package/autorest/multiclient/__init__.py +1 -3
  62. package/autorest/postprocess/__init__.py +9 -29
  63. package/autorest/postprocess/get_all.py +1 -3
  64. package/autorest/postprocess/venvtools.py +1 -3
  65. package/autorest/preprocess/__init__.py +40 -126
  66. package/install.py +2 -0
  67. package/package.json +1 -1
  68. package/prepare.py +3 -1
  69. package/requirements.txt +1 -1
  70. package/run_cadl.py +1 -3
  71. package/setup.py +25 -25
  72. package/start.py +2 -0
  73. package/venvtools.py +15 -10
@@ -19,9 +19,7 @@ class ClientSerializer:
19
19
  def _init_signature(self, async_mode: bool) -> str:
20
20
  pylint_disable = ""
21
21
  if not self.client.parameters.credential:
22
- pylint_disable = (
23
- " # pylint: disable=missing-client-constructor-parameter-credential"
24
- )
22
+ pylint_disable = " # pylint: disable=missing-client-constructor-parameter-credential"
25
23
  return self.parameter_serializer.serialize_method(
26
24
  function_def="def",
27
25
  method_name="__init__",
@@ -61,14 +59,10 @@ class ClientSerializer:
61
59
  operations_folder = ".aio.operations." if async_mode else ".operations."
62
60
  for og in [og for og in self.client.operation_groups if not og.is_mixin]:
63
61
  retval.append(f":ivar {og.property_name}: {og.class_name} operations")
64
- property_type = (
65
- f"{self.client.code_model.namespace}{operations_folder}{og.class_name}"
66
- )
62
+ property_type = f"{self.client.code_model.namespace}{operations_folder}{og.class_name}"
67
63
  retval.append(f":vartype {og.property_name}: {property_type}")
68
64
  for param in self.client.parameters.method:
69
- retval.append(
70
- f":{param.description_keyword} {param.client_name}: {param.description}"
71
- )
65
+ retval.append(f":{param.description_keyword} {param.client_name}: {param.description}")
72
66
  retval.append(
73
67
  f":{param.docstring_type_keyword} {param.client_name}: {param.docstring_type(async_mode=async_mode)}"
74
68
  )
@@ -102,26 +96,18 @@ class ClientSerializer:
102
96
 
103
97
  @property
104
98
  def should_init_super(self) -> bool:
105
- return any(
106
- og
107
- for og in self.client.operation_groups
108
- if og.is_mixin and og.has_abstract_operations
109
- )
99
+ return any(og for og in self.client.operation_groups if og.is_mixin and og.has_abstract_operations)
110
100
 
111
101
  def initialize_pipeline_client(self, async_mode: bool) -> List[str]:
112
102
  result = []
113
103
  pipeline_client_name = self.client.pipeline_class(async_mode)
114
- endpoint_name = (
115
- "base_url" if self.client.code_model.is_azure_flavor else "endpoint"
116
- )
104
+ endpoint_name = "base_url" if self.client.code_model.is_azure_flavor else "endpoint"
117
105
  params = {
118
106
  endpoint_name: self.host_variable_name,
119
107
  "policies": "_policies",
120
108
  }
121
109
  if not self.client.code_model.is_legacy and self.client.request_id_header_name:
122
- result.append(
123
- f'kwargs["request_id_header_name"] = "{self.client.request_id_header_name}"'
124
- )
110
+ result.append(f'kwargs["request_id_header_name"] = "{self.client.request_id_header_name}"')
125
111
  policies = build_policies(
126
112
  self.client.code_model.options["azure_arm"],
127
113
  async_mode,
@@ -152,33 +138,23 @@ class ClientSerializer:
152
138
  add_private_models = len(self.client.code_model.model_types) != len(
153
139
  self.client.code_model.public_model_types
154
140
  )
155
- model_dict_name = (
156
- f"_models.{self.client.code_model.models_filename}"
157
- if add_private_models
158
- else "_models"
159
- )
141
+ model_dict_name = f"_models.{self.client.code_model.models_filename}" if add_private_models else "_models"
160
142
  retval.append(
161
143
  f"client_models{': Dict[str, Any]' if not self.client.code_model.model_types else ''}"
162
144
  f" = {_get_client_models_value(model_dict_name)}"
163
145
  )
164
146
  if add_private_models and self.client.code_model.model_types:
165
- update_dict = (
166
- "{k: v for k, v in _models.__dict__.items() if isinstance(v, type)}"
167
- )
147
+ update_dict = "{k: v for k, v in _models.__dict__.items() if isinstance(v, type)}"
168
148
  retval.append(f"client_models.update({update_dict})")
169
149
  client_models_str = "client_models" if is_msrest_model else ""
170
150
  retval.append(f"self._serialize = Serializer({client_models_str})")
171
151
  retval.append(f"self._deserialize = Deserializer({client_models_str})")
172
152
  if not self.client.code_model.options["client_side_validation"]:
173
153
  retval.append("self._serialize.client_side_validation = False")
174
- operation_groups = [
175
- og for og in self.client.operation_groups if not og.is_mixin
176
- ]
154
+ operation_groups = [og for og in self.client.operation_groups if not og.is_mixin]
177
155
  for og in operation_groups:
178
156
  if og.code_model.options["multiapi"]:
179
- api_version = (
180
- f", '{og.api_versions[0]}'" if og.api_versions else ", None"
181
- )
157
+ api_version = f", '{og.api_versions[0]}'" if og.api_versions else ", None"
182
158
  else:
183
159
  api_version = ""
184
160
  retval.extend(
@@ -201,22 +177,16 @@ class ClientSerializer:
201
177
  method_param_signatures=send_request_signature,
202
178
  )
203
179
 
204
- def send_request_signature_and_response_type_annotation(
205
- self, async_mode: bool
206
- ) -> str:
180
+ def send_request_signature_and_response_type_annotation(self, async_mode: bool) -> str:
207
181
  send_request_signature = self._send_request_signature()
208
182
  return utils.method_signature_and_response_type_annotation_template(
209
183
  method_signature=send_request_signature,
210
- response_type_annotation=(
211
- "Awaitable[AsyncHttpResponse]" if async_mode else "HttpResponse"
212
- ),
184
+ response_type_annotation=("Awaitable[AsyncHttpResponse]" if async_mode else "HttpResponse"),
213
185
  )
214
186
 
215
187
  def _example_make_call(self, async_mode: bool) -> List[str]:
216
188
  http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
217
- retval = [
218
- f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"
219
- ]
189
+ retval = [f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"]
220
190
  retval.append(f"<{http_response}: 200 OK>")
221
191
  return retval
222
192
 
@@ -225,36 +195,26 @@ class ClientSerializer:
225
195
  "We have helper methods to create requests specific to this service in "
226
196
  + f"`{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}`."
227
197
  ]
228
- retval.append(
229
- "Use these helper methods to create the request you pass to this method."
230
- )
198
+ retval.append("Use these helper methods to create the request you pass to this method.")
231
199
  retval.append("")
232
200
 
233
201
  request_builder = self.client.request_builders[0]
234
202
  request_builder_signature = ", ".join(request_builder.parameters.call)
235
203
  if request_builder.group_name:
236
204
  rest_imported = request_builder.group_name
237
- request_builder_name = (
238
- f"{request_builder.group_name}.{request_builder.name}"
239
- )
205
+ request_builder_name = f"{request_builder.group_name}.{request_builder.name}"
240
206
  else:
241
207
  rest_imported = request_builder.name
242
208
  request_builder_name = request_builder.name
243
209
  full_path = f"{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}"
244
210
  retval.append(f">>> from {full_path} import {rest_imported}")
245
- retval.append(
246
- f">>> request = {request_builder_name}({request_builder_signature})"
247
- )
248
- retval.append(
249
- f"<HttpRequest [{request_builder.method}], url: '{request_builder.url}'>"
250
- )
211
+ retval.append(f">>> request = {request_builder_name}({request_builder_signature})")
212
+ retval.append(f"<HttpRequest [{request_builder.method}], url: '{request_builder.url}'>")
251
213
  retval.extend(self._example_make_call(async_mode))
252
214
  return retval
253
215
 
254
216
  def _rest_request_example(self, async_mode: bool) -> List[str]:
255
- retval = [
256
- f">>> from {self.client.code_model.core_library}.rest import HttpRequest"
257
- ]
217
+ retval = [f">>> from {self.client.code_model.core_library}.rest import HttpRequest"]
258
218
  retval.append('>>> request = HttpRequest("GET", "https://www.example.org/")')
259
219
  retval.append("<HttpRequest [GET], url: 'https://www.example.org/'>")
260
220
  retval.extend(self._example_make_call(async_mode))
@@ -269,27 +229,19 @@ class ClientSerializer:
269
229
  else:
270
230
  retval.extend(self._rest_request_example(async_mode))
271
231
  retval.append("")
272
- retval.append(
273
- "For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request"
274
- )
232
+ retval.append("For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request")
275
233
  retval.append("")
276
234
  retval.append(":param request: The network request you want to make. Required.")
277
235
  retval.append(f":type request: ~{rest_library}.HttpRequest")
278
- retval.append(
279
- ":keyword bool stream: Whether the response payload will be streamed. Defaults to False."
280
- )
281
- retval.append(
282
- ":return: The response of your network call. Does not do error handling on your response."
283
- )
236
+ retval.append(":keyword bool stream: Whether the response payload will be streamed. Defaults to False.")
237
+ retval.append(":return: The response of your network call. Does not do error handling on your response.")
284
238
  http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
285
239
  retval.append(f":rtype: ~{rest_library}.{http_response}")
286
240
  retval.append('"""')
287
241
  return retval
288
242
 
289
243
  def serialize_path(self) -> List[str]:
290
- return self.parameter_serializer.serialize_path(
291
- self.client.parameters.path, "self._serialize"
292
- )
244
+ return self.parameter_serializer.serialize_path(self.client.parameters.path, "self._serialize")
293
245
 
294
246
 
295
247
  class ConfigSerializer:
@@ -302,9 +254,7 @@ class ConfigSerializer:
302
254
  function_def="def",
303
255
  method_name="__init__",
304
256
  need_self_param=True,
305
- method_param_signatures=self.client.config.parameters.method_signature(
306
- async_mode
307
- ),
257
+ method_param_signatures=self.client.config.parameters.method_signature(async_mode),
308
258
  )
309
259
 
310
260
  def init_signature_and_response_type_annotation(self, async_mode: bool) -> str:
@@ -331,8 +281,7 @@ class ConfigSerializer:
331
281
 
332
282
  def check_required_parameters(self) -> List[str]:
333
283
  return [
334
- f"if {p.client_name} is None:\n"
335
- f" raise ValueError(\"Parameter '{p.client_name}' must not be None.\")"
284
+ f"if {p.client_name} is None:\n" f" raise ValueError(\"Parameter '{p.client_name}' must not be None.\")"
336
285
  for p in self.client.config.parameters.method
337
286
  if not (p.optional or p.constant)
338
287
  ]
@@ -341,8 +290,6 @@ class ConfigSerializer:
341
290
  retval: List[str] = []
342
291
  for p in self.client.config.parameters.method:
343
292
  retval.append(f":{p.description_keyword} {p.client_name}: {p.description}")
344
- retval.append(
345
- f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}"
346
- )
293
+ retval.append(f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}")
347
294
  retval.append('"""')
348
295
  return retval
@@ -12,6 +12,4 @@ class EnumSerializer(BaseSerializer):
12
12
  def serialize(self) -> str:
13
13
  # Generate the enum file
14
14
  template = self.env.get_template("enum_container.py.jinja2")
15
- return template.render(
16
- code_model=self.code_model, file_import=FileImport(self.code_model)
17
- )
15
+ return template.render(code_model=self.code_model, file_import=FileImport(self.code_model))
@@ -35,9 +35,7 @@ class GeneralSerializer(BaseSerializer):
35
35
  template = self.env.get_template(template_name)
36
36
  package_parts = (self.code_model.options["package_name"] or "").split("-")[:-1]
37
37
  token_credential = any(
38
- c
39
- for c in self.code_model.clients
40
- if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
38
+ c for c in self.code_model.clients if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
41
39
  )
42
40
  version = self.code_model.options["package_version"]
43
41
  if any(x in version for x in ["a", "b", "rc"]) or version[0] == "0":
@@ -48,13 +46,8 @@ class GeneralSerializer(BaseSerializer):
48
46
  "code_model": self.code_model,
49
47
  "dev_status": dev_status,
50
48
  "token_credential": token_credential,
51
- "pkgutil_names": [
52
- ".".join(package_parts[: i + 1]) for i in range(len(package_parts))
53
- ],
54
- "init_names": [
55
- "/".join(package_parts[: i + 1]) + "/__init__.py"
56
- for i in range(len(package_parts))
57
- ],
49
+ "pkgutil_names": [".".join(package_parts[: i + 1]) for i in range(len(package_parts))],
50
+ "init_names": ["/".join(package_parts[: i + 1]) + "/__init__.py" for i in range(len(package_parts))],
58
51
  "client_name": self.code_model.clients[0].name,
59
52
  "namespace": self.code_model.namespace,
60
53
  }
@@ -131,10 +124,7 @@ class GeneralSerializer(BaseSerializer):
131
124
  "MatchConditions",
132
125
  ImportType.SDKCORE,
133
126
  )
134
- if (
135
- self.code_model.has_form_data
136
- and self.code_model.options["models_mode"] == "dpg"
137
- ):
127
+ if self.code_model.has_form_data and self.code_model.options["models_mode"] == "dpg" and not self.async_mode:
138
128
  file_import.add_submodule_import("typing", "IO", ImportType.STDLIB)
139
129
  file_import.add_submodule_import("typing", "Tuple", ImportType.STDLIB)
140
130
  file_import.add_submodule_import("typing", "Union", ImportType.STDLIB)
@@ -190,9 +180,7 @@ class GeneralSerializer(BaseSerializer):
190
180
 
191
181
  def serialize_model_base_file(self) -> str:
192
182
  template = self.env.get_template("model_base.py.jinja2")
193
- return template.render(
194
- code_model=self.code_model, file_import=FileImport(self.code_model)
195
- )
183
+ return template.render(code_model=self.code_model, file_import=FileImport(self.code_model))
196
184
 
197
185
  def serialize_validation_file(self) -> str:
198
186
  template = self.env.get_template("validation.py.jinja2")
@@ -213,11 +201,7 @@ class GeneralSerializer(BaseSerializer):
213
201
  {
214
202
  (
215
203
  f"{self.code_model.namespace}.{client.name}."
216
- + (
217
- ""
218
- if operation_group.is_mixin
219
- else f"{operation_group.property_name}."
220
- )
204
+ + ("" if operation_group.is_mixin else f"{operation_group.property_name}.")
221
205
  + f"{operation.name}"
222
206
  ): operation.cross_language_definition_id
223
207
  for client in self.code_model.clients
@@ -17,15 +17,12 @@ from ..models.imports import (
17
17
  def _serialize_package(imports: List[ImportModel], delimiter: str) -> str:
18
18
  buffer = []
19
19
  if any(i for i in imports if i.submodule_name is None):
20
- buffer.append(
21
- f"import {imports[0].module_name}{f' as {imports[0].alias}' if imports[0].alias else ''}"
22
- )
20
+ buffer.append(f"import {imports[0].module_name}{f' as {imports[0].alias}' if imports[0].alias else ''}")
23
21
  else:
24
22
  import_str = ", ".join(
25
23
  sorted(
26
24
  set(
27
- f"{i.submodule_name} as {i.alias}" if i.alias else i.submodule_name # type: ignore
28
- for i in imports
25
+ f"{i.submodule_name} as {i.alias}" if i.alias else i.submodule_name for i in imports # type: ignore
29
26
  )
30
27
  )
31
28
  )
@@ -38,9 +35,7 @@ def _serialize_versioned_package(i: ImportModel, delimiter: str) -> str:
38
35
  return ""
39
36
  buffer = []
40
37
  for n, (version, module_name, comment) in enumerate(i.version_modules):
41
- buffer.append(
42
- "{} sys.version_info >= {}:".format("if" if n == 0 else "elif", version)
43
- )
38
+ buffer.append("{} sys.version_info >= {}:".format("if" if n == 0 else "elif", version))
44
39
  buffer.append(
45
40
  f" from {module_name} import {i.submodule_name}{f' as {i.alias}' if i.alias else ''}"
46
41
  f"{f' # {comment}' if comment else ''}"
@@ -57,12 +52,8 @@ def _serialize_import_type(imports: List[ImportModel], delimiter: str) -> str:
57
52
  """Serialize a given import type."""
58
53
  import_list = []
59
54
  for module_name in sorted(set(i.module_name for i in imports)):
60
- normal_imports = [
61
- i for i in imports if i.module_name == module_name and not i.version_modules
62
- ]
63
- versioned_imports = [
64
- i for i in imports if i.module_name == module_name and i.version_modules
65
- ]
55
+ normal_imports = [i for i in imports if i.module_name == module_name and not i.version_modules]
56
+ versioned_imports = [i for i in imports if i.module_name == module_name and i.version_modules]
66
57
  if normal_imports:
67
58
  import_list.append(_serialize_package(normal_imports, delimiter))
68
59
  for i in versioned_imports:
@@ -75,9 +66,7 @@ def _get_import_clauses(imports: List[ImportModel], delimiter: str) -> List[str]
75
66
  for import_type in ImportType:
76
67
  imports_with_import_type = [i for i in imports if i.import_type == import_type]
77
68
  if imports_with_import_type:
78
- import_clause.append(
79
- _serialize_import_type(imports_with_import_type, delimiter)
80
- )
69
+ import_clause.append(_serialize_import_type(imports_with_import_type, delimiter))
81
70
  return import_clause
82
71
 
83
72
 
@@ -86,15 +75,11 @@ class FileImportSerializer:
86
75
  self.file_import = file_import
87
76
  self.async_mode = async_mode
88
77
 
89
- def _get_imports_list(
90
- self, baseline_typing_section: TypingSection, add_conditional_typing: bool
91
- ):
78
+ def _get_imports_list(self, baseline_typing_section: TypingSection, add_conditional_typing: bool):
92
79
  # If this is a python 3 file, our regular imports include the CONDITIONAL category
93
80
  # If this is not a python 3 file, our typing imports include the CONDITIONAL category
94
81
  file_import_copy = deepcopy(self.file_import)
95
- if add_conditional_typing and any(
96
- self.file_import.get_imports_from_section(TypingSection.CONDITIONAL)
97
- ):
82
+ if add_conditional_typing and any(self.file_import.get_imports_from_section(TypingSection.CONDITIONAL)):
98
83
  # we switch the TypingSection key for the CONDITIONAL typing imports so we can merge
99
84
  # the imports together
100
85
  for i in file_import_copy.imports:
@@ -104,20 +89,12 @@ class FileImportSerializer:
104
89
 
105
90
  def _add_type_checking_import(self):
106
91
  if any(self.file_import.get_imports_from_section(TypingSection.TYPING)):
107
- self.file_import.add_submodule_import(
108
- "typing", "TYPE_CHECKING", ImportType.STDLIB
109
- )
92
+ self.file_import.add_submodule_import("typing", "TYPE_CHECKING", ImportType.STDLIB)
110
93
 
111
94
  def get_typing_definitions(self) -> str:
112
- def declare_definition(
113
- type_name: str, type_definition: TypeDefinition
114
- ) -> List[str]:
95
+ def declare_definition(type_name: str, type_definition: TypeDefinition) -> List[str]:
115
96
  ret: List[str] = []
116
- definition_value = (
117
- type_definition.async_definition
118
- if self.async_mode
119
- else type_definition.sync_definition
120
- )
97
+ definition_value = type_definition.async_definition if self.async_mode else type_definition.sync_definition
121
98
  ret.append("{} = {}".format(type_name, definition_value))
122
99
  return ret
123
100
 
@@ -137,9 +114,7 @@ class FileImportSerializer:
137
114
  )
138
115
 
139
116
  if regular_imports_list:
140
- regular_imports = "\n\n".join(
141
- _get_import_clauses(regular_imports_list, "\n")
142
- )
117
+ regular_imports = "\n\n".join(_get_import_clauses(regular_imports_list, "\n"))
143
118
 
144
119
  typing_imports = ""
145
120
  typing_imports_list = self._get_imports_list(
@@ -148,7 +123,5 @@ class FileImportSerializer:
148
123
  )
149
124
  if typing_imports_list:
150
125
  typing_imports += "\n\nif TYPE_CHECKING:\n # pylint: disable=unused-import,ungrouped-imports\n "
151
- typing_imports += "\n\n ".join(
152
- _get_import_clauses(typing_imports_list, "\n ")
153
- )
126
+ typing_imports += "\n\n ".join(_get_import_clauses(typing_imports_list, "\n "))
154
127
  return regular_imports + typing_imports + self.get_typing_definitions()
@@ -87,9 +87,7 @@ def _mixin_imports(
87
87
  sync_mixin_imports = mixin_operation_group.imports_for_multiapi(async_mode=False)
88
88
  async_mixin_imports = mixin_operation_group.imports_for_multiapi(async_mode=True)
89
89
 
90
- return _json_serialize_imports(
91
- sync_mixin_imports.to_dict()
92
- ), _json_serialize_imports(async_mixin_imports.to_dict())
90
+ return _json_serialize_imports(sync_mixin_imports.to_dict()), _json_serialize_imports(async_mixin_imports.to_dict())
93
91
 
94
92
 
95
93
  def _mixin_typing_definitions(
@@ -100,12 +98,8 @@ def _mixin_typing_definitions(
100
98
 
101
99
  sync_mixin_imports = mixin_operation_group.imports_for_multiapi(async_mode=False)
102
100
  async_mixin_imports = mixin_operation_group.imports_for_multiapi(async_mode=True)
103
- sync_mixin_typing_definitions = FileImportSerializer(
104
- sync_mixin_imports, False
105
- ).get_typing_definitions()
106
- async_mixin_typing_definitions = FileImportSerializer(
107
- async_mixin_imports, True
108
- ).get_typing_definitions()
101
+ sync_mixin_typing_definitions = FileImportSerializer(sync_mixin_imports, False).get_typing_definitions()
102
+ async_mixin_typing_definitions = FileImportSerializer(async_mixin_imports, True).get_typing_definitions()
109
103
 
110
104
  return sync_mixin_typing_definitions, async_mixin_typing_definitions
111
105
 
@@ -127,9 +121,7 @@ class MetadataSerializer:
127
121
  total_api_version_list.sort()
128
122
 
129
123
  # switching ' to " so json can decode the dict we end up writing to file
130
- total_api_version_list = [
131
- str(api_version).replace("'", '"') for api_version in total_api_version_list
132
- ]
124
+ total_api_version_list = [str(api_version).replace("'", '"') for api_version in total_api_version_list]
133
125
  if len(total_api_version_list) == 1:
134
126
  chosen_version = total_api_version_list[0]
135
127
  elif len(total_api_version_list) > 1:
@@ -156,9 +148,7 @@ class MetadataSerializer:
156
148
  ),
157
149
  None,
158
150
  )
159
- mixin_operations = (
160
- mixin_operation_group.operations if mixin_operation_group else []
161
- )
151
+ mixin_operations = mixin_operation_group.operations if mixin_operation_group else []
162
152
  sync_mixin_imports, async_mixin_imports = _mixin_imports(mixin_operation_group)
163
153
  (
164
154
  sync_mixin_typing_definitions,
@@ -186,12 +176,8 @@ class MetadataSerializer:
186
176
  async_mixin_imports=async_mixin_imports,
187
177
  sync_mixin_typing_definitions=sync_mixin_typing_definitions,
188
178
  async_mixin_typing_definitions=async_mixin_typing_definitions,
189
- sync_client_imports=_json_serialize_imports(
190
- self.client.imports_for_multiapi(async_mode=False).to_dict()
191
- ),
192
- async_client_imports=_json_serialize_imports(
193
- self.client.imports_for_multiapi(async_mode=True).to_dict()
194
- ),
179
+ sync_client_imports=_json_serialize_imports(self.client.imports_for_multiapi(async_mode=False).to_dict()),
180
+ async_client_imports=_json_serialize_imports(self.client.imports_for_multiapi(async_mode=True).to_dict()),
195
181
  sync_config_imports=_json_serialize_imports(
196
182
  self.client.config.imports_for_multiapi(async_mode=False).to_dict()
197
183
  ),
@@ -15,11 +15,7 @@ class ModelInitSerializer:
15
15
  def serialize(self) -> str:
16
16
  schemas = [s.name for s in self.code_model.public_model_types]
17
17
  schemas.sort()
18
- enums = (
19
- [e.name for e in self.code_model.enums if not e.internal]
20
- if self.code_model.enums
21
- else None
22
- )
18
+ enums = [e.name for e in self.code_model.enums if not e.internal] if self.code_model.enums else None
23
19
 
24
20
  if enums:
25
21
  enums.sort()
@@ -12,16 +12,12 @@ from .import_serializer import FileImportSerializer
12
12
  from .base_serializer import BaseSerializer
13
13
 
14
14
 
15
- def _documentation_string(
16
- prop: Property, description_keyword: str, docstring_type_keyword: str
17
- ) -> List[str]:
15
+ def _documentation_string(prop: Property, description_keyword: str, docstring_type_keyword: str) -> List[str]:
18
16
  retval: List[str] = []
19
17
  sphinx_prefix = f":{description_keyword} {prop.client_name}:"
20
18
  description = prop.description(is_operation_file=False).replace("\\", "\\\\")
21
19
  retval.append(f"{sphinx_prefix} {description}" if description else sphinx_prefix)
22
- retval.append(
23
- f":{docstring_type_keyword} {prop.client_name}: {prop.type.docstring_type()}"
24
- )
20
+ retval.append(f":{docstring_type_keyword} {prop.client_name}: {prop.type.docstring_type()}")
25
21
  return retval
26
22
 
27
23
 
@@ -60,9 +56,7 @@ class _ModelSerializer(BaseSerializer, ABC):
60
56
 
61
57
  @staticmethod
62
58
  def initialize_discriminator_property(model: ModelType, prop: Property) -> str:
63
- discriminator_value = (
64
- f"'{model.discriminator_value}'" if model.discriminator_value else None
65
- )
59
+ discriminator_value = f"'{model.discriminator_value}'" if model.discriminator_value else None
66
60
  if not discriminator_value:
67
61
  typing = "Optional[str]"
68
62
  else:
@@ -87,11 +81,7 @@ class _ModelSerializer(BaseSerializer, ABC):
87
81
 
88
82
  @staticmethod
89
83
  def _init_line_parameters(model: ModelType):
90
- return [
91
- p
92
- for p in model.properties
93
- if not p.readonly and not p.is_discriminator and not p.constant
94
- ]
84
+ return [p for p in model.properties if not p.readonly and not p.is_discriminator and not p.constant]
95
85
 
96
86
  def init_line(self, model: ModelType) -> List[str]:
97
87
  init_properties_declaration = []
@@ -109,15 +99,8 @@ class _ModelSerializer(BaseSerializer, ABC):
109
99
  properties_to_pass_to_super = []
110
100
  for parent in model.parents:
111
101
  for prop in model.properties:
112
- if (
113
- prop in parent.properties
114
- and not prop.is_discriminator
115
- and not prop.constant
116
- and not prop.readonly
117
- ):
118
- properties_to_pass_to_super.append(
119
- f"{prop.client_name}={prop.client_name}"
120
- )
102
+ if prop in parent.properties and not prop.is_discriminator and not prop.constant and not prop.readonly:
103
+ properties_to_pass_to_super.append(f"{prop.client_name}={prop.client_name}")
121
104
  properties_to_pass_to_super.append("**kwargs")
122
105
  return ", ".join(properties_to_pass_to_super)
123
106
 
@@ -176,9 +159,7 @@ class MsrestModelSerializer(_ModelSerializer):
176
159
  @staticmethod
177
160
  def declare_property(prop: Property) -> str:
178
161
  if prop.flattened_names:
179
- attribute_key = ".".join(
180
- _ModelSerializer.escape_dot(n) for n in prop.flattened_names
181
- )
162
+ attribute_key = ".".join(_ModelSerializer.escape_dot(n) for n in prop.flattened_names)
182
163
  else:
183
164
  attribute_key = _ModelSerializer.escape_dot(prop.wire_name)
184
165
  if prop.type.xml_serialization_ctxt:
@@ -219,9 +200,7 @@ class DpgModelSerializer(_ModelSerializer):
219
200
  if model.is_polymorphic:
220
201
  file_import.add_submodule_import("typing", "Dict", ImportType.STDLIB)
221
202
  if not model.internal and self.init_line(model):
222
- file_import.add_submodule_import(
223
- "typing", "overload", ImportType.STDLIB
224
- )
203
+ file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
225
204
  file_import.add_submodule_import("typing", "Mapping", ImportType.STDLIB)
226
205
  file_import.add_submodule_import("typing", "Any", ImportType.STDLIB)
227
206
  return file_import
@@ -271,11 +250,7 @@ class DpgModelSerializer(_ModelSerializer):
271
250
  args.append(f'format="{prop.type.encode}"') # type: ignore
272
251
 
273
252
  field = "rest_discriminator" if prop.is_discriminator else "rest_field"
274
- type_ignore = (
275
- prop.is_discriminator
276
- and isinstance(prop.type, (ConstantType, EnumValue))
277
- and prop.type.value
278
- )
253
+ type_ignore = prop.is_discriminator and isinstance(prop.type, (ConstantType, EnumValue)) and prop.type.value
279
254
  return (
280
255
  f"{prop.client_name}: {prop.type_annotation()} ="
281
256
  f' {field}({", ".join(args)}){" # type: ignore" if type_ignore else ""}'
@@ -285,10 +260,7 @@ class DpgModelSerializer(_ModelSerializer):
285
260
  init_args = []
286
261
  for prop in self.get_properties_to_declare(model):
287
262
  if prop.constant and not prop.is_base_discriminator:
288
- init_args.append(
289
- f"self.{prop.client_name}: {prop.type_annotation()} = "
290
- f"{prop.get_declaration()}"
291
- )
263
+ init_args.append(f"self.{prop.client_name}: {prop.type_annotation()} = " f"{prop.get_declaration()}")
292
264
  return init_args
293
265
 
294
266
  @staticmethod
@@ -296,10 +268,7 @@ class DpgModelSerializer(_ModelSerializer):
296
268
  return [
297
269
  p
298
270
  for p in model.properties
299
- if p.is_base_discriminator
300
- or not p.is_discriminator
301
- and not p.constant
302
- and p.visibility != ["read"]
271
+ if p.is_base_discriminator or not p.is_discriminator and not p.constant and p.visibility != ["read"]
303
272
  ]
304
273
 
305
274
  @staticmethod
@@ -308,18 +277,11 @@ class DpgModelSerializer(_ModelSerializer):
308
277
  for parent in model.parents:
309
278
  for prop in model.properties:
310
279
  if (
311
- prop.client_name
312
- in [
313
- prop.client_name
314
- for prop in parent.properties
315
- if prop.is_base_discriminator
316
- ]
280
+ prop.client_name in [prop.client_name for prop in parent.properties if prop.is_base_discriminator]
317
281
  and prop.is_discriminator
318
282
  and not prop.constant
319
283
  and not prop.readonly
320
284
  ):
321
- properties_to_pass_to_super.append(
322
- f"{prop.client_name}={prop.get_declaration()}"
323
- )
285
+ properties_to_pass_to_super.append(f"{prop.client_name}={prop.get_declaration()}")
324
286
  properties_to_pass_to_super.append("**kwargs")
325
287
  return ", ".join(properties_to_pass_to_super)
@@ -66,9 +66,7 @@ class OperationGroupsSerializer(BaseSerializer):
66
66
  )
67
67
  )
68
68
 
69
- template = self.env.get_or_select_template(
70
- "operation_groups_container.py.jinja2"
71
- )
69
+ template = self.env.get_or_select_template("operation_groups_container.py.jinja2")
72
70
 
73
71
  return template.render(
74
72
  code_model=self.code_model,