@autorest/python 6.13.15 → 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 (79) 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 +26 -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 +15 -56
  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/codegen/templates/enum.py.jinja2 +2 -2
  47. package/autorest/codegen/templates/enum_container.py.jinja2 +1 -0
  48. package/autorest/codegen/templates/model_container.py.jinja2 +1 -0
  49. package/autorest/codegen/templates/model_dpg.py.jinja2 +3 -3
  50. package/autorest/codegen/templates/model_msrest.py.jinja2 +1 -1
  51. package/autorest/codegen/templates/operation_tools.jinja2 +1 -1
  52. package/autorest/jsonrpc/__init__.py +1 -3
  53. package/autorest/jsonrpc/server.py +3 -9
  54. package/autorest/jsonrpc/stdstream.py +4 -12
  55. package/autorest/m2r/__init__.py +2 -6
  56. package/autorest/m4reformatter/__init__.py +72 -237
  57. package/autorest/multiapi/__init__.py +4 -11
  58. package/autorest/multiapi/models/client.py +7 -21
  59. package/autorest/multiapi/models/code_model.py +9 -28
  60. package/autorest/multiapi/models/config.py +1 -3
  61. package/autorest/multiapi/models/global_parameters.py +6 -16
  62. package/autorest/multiapi/models/imports.py +5 -9
  63. package/autorest/multiapi/models/operation_mixin_group.py +5 -17
  64. package/autorest/multiapi/serializers/__init__.py +10 -31
  65. package/autorest/multiapi/serializers/import_serializer.py +8 -24
  66. package/autorest/multiapi/utils.py +2 -6
  67. package/autorest/multiclient/__init__.py +1 -3
  68. package/autorest/postprocess/__init__.py +9 -29
  69. package/autorest/postprocess/get_all.py +1 -3
  70. package/autorest/postprocess/venvtools.py +1 -3
  71. package/autorest/preprocess/__init__.py +40 -126
  72. package/install.py +2 -0
  73. package/package.json +1 -1
  74. package/prepare.py +3 -1
  75. package/requirements.txt +1 -1
  76. package/run_cadl.py +1 -3
  77. package/setup.py +25 -25
  78. package/start.py +2 -0
  79. 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
  )
@@ -77,6 +71,7 @@ class ClientSerializer:
77
71
  ":keyword int polling_interval: Default waiting time between two polls for LRO operations "
78
72
  "if no Retry-After header is present."
79
73
  )
74
+ retval = [s.replace("\\", "\\\\") for s in retval]
80
75
  retval.append('"""')
81
76
  return retval
82
77
 
@@ -101,26 +96,18 @@ class ClientSerializer:
101
96
 
102
97
  @property
103
98
  def should_init_super(self) -> bool:
104
- return any(
105
- og
106
- for og in self.client.operation_groups
107
- if og.is_mixin and og.has_abstract_operations
108
- )
99
+ return any(og for og in self.client.operation_groups if og.is_mixin and og.has_abstract_operations)
109
100
 
110
101
  def initialize_pipeline_client(self, async_mode: bool) -> List[str]:
111
102
  result = []
112
103
  pipeline_client_name = self.client.pipeline_class(async_mode)
113
- endpoint_name = (
114
- "base_url" if self.client.code_model.is_azure_flavor else "endpoint"
115
- )
104
+ endpoint_name = "base_url" if self.client.code_model.is_azure_flavor else "endpoint"
116
105
  params = {
117
106
  endpoint_name: self.host_variable_name,
118
107
  "policies": "_policies",
119
108
  }
120
109
  if not self.client.code_model.is_legacy and self.client.request_id_header_name:
121
- result.append(
122
- f'kwargs["request_id_header_name"] = "{self.client.request_id_header_name}"'
123
- )
110
+ result.append(f'kwargs["request_id_header_name"] = "{self.client.request_id_header_name}"')
124
111
  policies = build_policies(
125
112
  self.client.code_model.options["azure_arm"],
126
113
  async_mode,
@@ -151,33 +138,23 @@ class ClientSerializer:
151
138
  add_private_models = len(self.client.code_model.model_types) != len(
152
139
  self.client.code_model.public_model_types
153
140
  )
154
- model_dict_name = (
155
- f"_models.{self.client.code_model.models_filename}"
156
- if add_private_models
157
- else "_models"
158
- )
141
+ model_dict_name = f"_models.{self.client.code_model.models_filename}" if add_private_models else "_models"
159
142
  retval.append(
160
143
  f"client_models{': Dict[str, Any]' if not self.client.code_model.model_types else ''}"
161
144
  f" = {_get_client_models_value(model_dict_name)}"
162
145
  )
163
146
  if add_private_models and self.client.code_model.model_types:
164
- update_dict = (
165
- "{k: v for k, v in _models.__dict__.items() if isinstance(v, type)}"
166
- )
147
+ update_dict = "{k: v for k, v in _models.__dict__.items() if isinstance(v, type)}"
167
148
  retval.append(f"client_models.update({update_dict})")
168
149
  client_models_str = "client_models" if is_msrest_model else ""
169
150
  retval.append(f"self._serialize = Serializer({client_models_str})")
170
151
  retval.append(f"self._deserialize = Deserializer({client_models_str})")
171
152
  if not self.client.code_model.options["client_side_validation"]:
172
153
  retval.append("self._serialize.client_side_validation = False")
173
- operation_groups = [
174
- og for og in self.client.operation_groups if not og.is_mixin
175
- ]
154
+ operation_groups = [og for og in self.client.operation_groups if not og.is_mixin]
176
155
  for og in operation_groups:
177
156
  if og.code_model.options["multiapi"]:
178
- api_version = (
179
- f", '{og.api_versions[0]}'" if og.api_versions else ", None"
180
- )
157
+ api_version = f", '{og.api_versions[0]}'" if og.api_versions else ", None"
181
158
  else:
182
159
  api_version = ""
183
160
  retval.extend(
@@ -200,22 +177,16 @@ class ClientSerializer:
200
177
  method_param_signatures=send_request_signature,
201
178
  )
202
179
 
203
- def send_request_signature_and_response_type_annotation(
204
- self, async_mode: bool
205
- ) -> str:
180
+ def send_request_signature_and_response_type_annotation(self, async_mode: bool) -> str:
206
181
  send_request_signature = self._send_request_signature()
207
182
  return utils.method_signature_and_response_type_annotation_template(
208
183
  method_signature=send_request_signature,
209
- response_type_annotation=(
210
- "Awaitable[AsyncHttpResponse]" if async_mode else "HttpResponse"
211
- ),
184
+ response_type_annotation=("Awaitable[AsyncHttpResponse]" if async_mode else "HttpResponse"),
212
185
  )
213
186
 
214
187
  def _example_make_call(self, async_mode: bool) -> List[str]:
215
188
  http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
216
- retval = [
217
- f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"
218
- ]
189
+ retval = [f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"]
219
190
  retval.append(f"<{http_response}: 200 OK>")
220
191
  return retval
221
192
 
@@ -224,36 +195,26 @@ class ClientSerializer:
224
195
  "We have helper methods to create requests specific to this service in "
225
196
  + f"`{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}`."
226
197
  ]
227
- retval.append(
228
- "Use these helper methods to create the request you pass to this method."
229
- )
198
+ retval.append("Use these helper methods to create the request you pass to this method.")
230
199
  retval.append("")
231
200
 
232
201
  request_builder = self.client.request_builders[0]
233
202
  request_builder_signature = ", ".join(request_builder.parameters.call)
234
203
  if request_builder.group_name:
235
204
  rest_imported = request_builder.group_name
236
- request_builder_name = (
237
- f"{request_builder.group_name}.{request_builder.name}"
238
- )
205
+ request_builder_name = f"{request_builder.group_name}.{request_builder.name}"
239
206
  else:
240
207
  rest_imported = request_builder.name
241
208
  request_builder_name = request_builder.name
242
209
  full_path = f"{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}"
243
210
  retval.append(f">>> from {full_path} import {rest_imported}")
244
- retval.append(
245
- f">>> request = {request_builder_name}({request_builder_signature})"
246
- )
247
- retval.append(
248
- f"<HttpRequest [{request_builder.method}], url: '{request_builder.url}'>"
249
- )
211
+ retval.append(f">>> request = {request_builder_name}({request_builder_signature})")
212
+ retval.append(f"<HttpRequest [{request_builder.method}], url: '{request_builder.url}'>")
250
213
  retval.extend(self._example_make_call(async_mode))
251
214
  return retval
252
215
 
253
216
  def _rest_request_example(self, async_mode: bool) -> List[str]:
254
- retval = [
255
- f">>> from {self.client.code_model.core_library}.rest import HttpRequest"
256
- ]
217
+ retval = [f">>> from {self.client.code_model.core_library}.rest import HttpRequest"]
257
218
  retval.append('>>> request = HttpRequest("GET", "https://www.example.org/")')
258
219
  retval.append("<HttpRequest [GET], url: 'https://www.example.org/'>")
259
220
  retval.extend(self._example_make_call(async_mode))
@@ -268,27 +229,19 @@ class ClientSerializer:
268
229
  else:
269
230
  retval.extend(self._rest_request_example(async_mode))
270
231
  retval.append("")
271
- retval.append(
272
- "For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request"
273
- )
232
+ retval.append("For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request")
274
233
  retval.append("")
275
234
  retval.append(":param request: The network request you want to make. Required.")
276
235
  retval.append(f":type request: ~{rest_library}.HttpRequest")
277
- retval.append(
278
- ":keyword bool stream: Whether the response payload will be streamed. Defaults to False."
279
- )
280
- retval.append(
281
- ":return: The response of your network call. Does not do error handling on your response."
282
- )
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.")
283
238
  http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
284
239
  retval.append(f":rtype: ~{rest_library}.{http_response}")
285
240
  retval.append('"""')
286
241
  return retval
287
242
 
288
243
  def serialize_path(self) -> List[str]:
289
- return self.parameter_serializer.serialize_path(
290
- self.client.parameters.path, "self._serialize"
291
- )
244
+ return self.parameter_serializer.serialize_path(self.client.parameters.path, "self._serialize")
292
245
 
293
246
 
294
247
  class ConfigSerializer:
@@ -301,9 +254,7 @@ class ConfigSerializer:
301
254
  function_def="def",
302
255
  method_name="__init__",
303
256
  need_self_param=True,
304
- method_param_signatures=self.client.config.parameters.method_signature(
305
- async_mode
306
- ),
257
+ method_param_signatures=self.client.config.parameters.method_signature(async_mode),
307
258
  )
308
259
 
309
260
  def init_signature_and_response_type_annotation(self, async_mode: bool) -> str:
@@ -330,8 +281,7 @@ class ConfigSerializer:
330
281
 
331
282
  def check_required_parameters(self) -> List[str]:
332
283
  return [
333
- f"if {p.client_name} is None:\n"
334
- 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.\")"
335
285
  for p in self.client.config.parameters.method
336
286
  if not (p.optional or p.constant)
337
287
  ]
@@ -340,8 +290,6 @@ class ConfigSerializer:
340
290
  retval: List[str] = []
341
291
  for p in self.client.config.parameters.method:
342
292
  retval.append(f":{p.description_keyword} {p.client_name}: {p.description}")
343
- retval.append(
344
- f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}"
345
- )
293
+ retval.append(f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}")
346
294
  retval.append('"""')
347
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,19 +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
- retval.append(
21
- f"{sphinx_prefix} {prop.description(is_operation_file=False)}"
22
- if prop.description(is_operation_file=False)
23
- else sphinx_prefix
24
- )
25
- retval.append(
26
- f":{docstring_type_keyword} {prop.client_name}: {prop.type.docstring_type()}"
27
- )
18
+ description = prop.description(is_operation_file=False).replace("\\", "\\\\")
19
+ retval.append(f"{sphinx_prefix} {description}" if description else sphinx_prefix)
20
+ retval.append(f":{docstring_type_keyword} {prop.client_name}: {prop.type.docstring_type()}")
28
21
  return retval
29
22
 
30
23
 
@@ -63,9 +56,7 @@ class _ModelSerializer(BaseSerializer, ABC):
63
56
 
64
57
  @staticmethod
65
58
  def initialize_discriminator_property(model: ModelType, prop: Property) -> str:
66
- discriminator_value = (
67
- f"'{model.discriminator_value}'" if model.discriminator_value else None
68
- )
59
+ discriminator_value = f"'{model.discriminator_value}'" if model.discriminator_value else None
69
60
  if not discriminator_value:
70
61
  typing = "Optional[str]"
71
62
  else:
@@ -90,11 +81,7 @@ class _ModelSerializer(BaseSerializer, ABC):
90
81
 
91
82
  @staticmethod
92
83
  def _init_line_parameters(model: ModelType):
93
- return [
94
- p
95
- for p in model.properties
96
- if not p.readonly and not p.is_discriminator and not p.constant
97
- ]
84
+ return [p for p in model.properties if not p.readonly and not p.is_discriminator and not p.constant]
98
85
 
99
86
  def init_line(self, model: ModelType) -> List[str]:
100
87
  init_properties_declaration = []
@@ -112,15 +99,8 @@ class _ModelSerializer(BaseSerializer, ABC):
112
99
  properties_to_pass_to_super = []
113
100
  for parent in model.parents:
114
101
  for prop in model.properties:
115
- if (
116
- prop in parent.properties
117
- and not prop.is_discriminator
118
- and not prop.constant
119
- and not prop.readonly
120
- ):
121
- properties_to_pass_to_super.append(
122
- f"{prop.client_name}={prop.client_name}"
123
- )
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}")
124
104
  properties_to_pass_to_super.append("**kwargs")
125
105
  return ", ".join(properties_to_pass_to_super)
126
106
 
@@ -179,9 +159,7 @@ class MsrestModelSerializer(_ModelSerializer):
179
159
  @staticmethod
180
160
  def declare_property(prop: Property) -> str:
181
161
  if prop.flattened_names:
182
- attribute_key = ".".join(
183
- _ModelSerializer.escape_dot(n) for n in prop.flattened_names
184
- )
162
+ attribute_key = ".".join(_ModelSerializer.escape_dot(n) for n in prop.flattened_names)
185
163
  else:
186
164
  attribute_key = _ModelSerializer.escape_dot(prop.wire_name)
187
165
  if prop.type.xml_serialization_ctxt:
@@ -222,9 +200,7 @@ class DpgModelSerializer(_ModelSerializer):
222
200
  if model.is_polymorphic:
223
201
  file_import.add_submodule_import("typing", "Dict", ImportType.STDLIB)
224
202
  if not model.internal and self.init_line(model):
225
- file_import.add_submodule_import(
226
- "typing", "overload", ImportType.STDLIB
227
- )
203
+ file_import.add_submodule_import("typing", "overload", ImportType.STDLIB)
228
204
  file_import.add_submodule_import("typing", "Mapping", ImportType.STDLIB)
229
205
  file_import.add_submodule_import("typing", "Any", ImportType.STDLIB)
230
206
  return file_import
@@ -274,11 +250,7 @@ class DpgModelSerializer(_ModelSerializer):
274
250
  args.append(f'format="{prop.type.encode}"') # type: ignore
275
251
 
276
252
  field = "rest_discriminator" if prop.is_discriminator else "rest_field"
277
- type_ignore = (
278
- prop.is_discriminator
279
- and isinstance(prop.type, (ConstantType, EnumValue))
280
- and prop.type.value
281
- )
253
+ type_ignore = prop.is_discriminator and isinstance(prop.type, (ConstantType, EnumValue)) and prop.type.value
282
254
  return (
283
255
  f"{prop.client_name}: {prop.type_annotation()} ="
284
256
  f' {field}({", ".join(args)}){" # type: ignore" if type_ignore else ""}'
@@ -288,10 +260,7 @@ class DpgModelSerializer(_ModelSerializer):
288
260
  init_args = []
289
261
  for prop in self.get_properties_to_declare(model):
290
262
  if prop.constant and not prop.is_base_discriminator:
291
- init_args.append(
292
- f"self.{prop.client_name}: {prop.type_annotation()} = "
293
- f"{prop.get_declaration()}"
294
- )
263
+ init_args.append(f"self.{prop.client_name}: {prop.type_annotation()} = " f"{prop.get_declaration()}")
295
264
  return init_args
296
265
 
297
266
  @staticmethod
@@ -299,10 +268,7 @@ class DpgModelSerializer(_ModelSerializer):
299
268
  return [
300
269
  p
301
270
  for p in model.properties
302
- if p.is_base_discriminator
303
- or not p.is_discriminator
304
- and not p.constant
305
- and p.visibility != ["read"]
271
+ if p.is_base_discriminator or not p.is_discriminator and not p.constant and p.visibility != ["read"]
306
272
  ]
307
273
 
308
274
  @staticmethod
@@ -311,18 +277,11 @@ class DpgModelSerializer(_ModelSerializer):
311
277
  for parent in model.parents:
312
278
  for prop in model.properties:
313
279
  if (
314
- prop.client_name
315
- in [
316
- prop.client_name
317
- for prop in parent.properties
318
- if prop.is_base_discriminator
319
- ]
280
+ prop.client_name in [prop.client_name for prop in parent.properties if prop.is_base_discriminator]
320
281
  and prop.is_discriminator
321
282
  and not prop.constant
322
283
  and not prop.readonly
323
284
  ):
324
- properties_to_pass_to_super.append(
325
- f"{prop.client_name}={prop.get_declaration()}"
326
- )
285
+ properties_to_pass_to_super.append(f"{prop.client_name}={prop.get_declaration()}")
327
286
  properties_to_pass_to_super.append("**kwargs")
328
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,