@autorest/python 6.9.4 → 6.9.6

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 (48) hide show
  1. package/autorest/_utils.py +2 -2
  2. package/autorest/codegen/__init__.py +250 -138
  3. package/autorest/codegen/_utils.py +2 -2
  4. package/autorest/codegen/models/__init__.py +7 -7
  5. package/autorest/codegen/models/base.py +5 -2
  6. package/autorest/codegen/models/client.py +31 -24
  7. package/autorest/codegen/models/combined_type.py +1 -1
  8. package/autorest/codegen/models/constant_type.py +1 -1
  9. package/autorest/codegen/models/credential_types.py +33 -23
  10. package/autorest/codegen/models/dictionary_type.py +1 -1
  11. package/autorest/codegen/models/enum_type.py +2 -2
  12. package/autorest/codegen/models/imports.py +71 -3
  13. package/autorest/codegen/models/list_type.py +1 -1
  14. package/autorest/codegen/models/lro_operation.py +2 -2
  15. package/autorest/codegen/models/model_type.py +1 -1
  16. package/autorest/codegen/models/operation.py +25 -17
  17. package/autorest/codegen/models/operation_group.py +2 -2
  18. package/autorest/codegen/models/paging_operation.py +13 -5
  19. package/autorest/codegen/models/parameter.py +1 -1
  20. package/autorest/codegen/models/primitive_types.py +17 -13
  21. package/autorest/codegen/models/property.py +1 -1
  22. package/autorest/codegen/models/request_builder.py +8 -6
  23. package/autorest/codegen/models/response.py +26 -14
  24. package/autorest/codegen/serializers/__init__.py +5 -0
  25. package/autorest/codegen/serializers/base_serializer.py +21 -0
  26. package/autorest/codegen/serializers/builder_serializer.py +33 -19
  27. package/autorest/codegen/serializers/client_serializer.py +21 -6
  28. package/autorest/codegen/serializers/enum_serializer.py +5 -8
  29. package/autorest/codegen/serializers/general_serializer.py +19 -23
  30. package/autorest/codegen/serializers/model_serializer.py +5 -9
  31. package/autorest/codegen/serializers/operation_groups_serializer.py +4 -5
  32. package/autorest/codegen/serializers/patch_serializer.py +4 -8
  33. package/autorest/codegen/serializers/request_builders_serializer.py +4 -4
  34. package/autorest/codegen/serializers/sample_serializer.py +11 -9
  35. package/autorest/codegen/serializers/types_serializer.py +3 -8
  36. package/autorest/codegen/templates/client.py.jinja2 +1 -1
  37. package/autorest/codegen/templates/config.py.jinja2 +3 -1
  38. package/autorest/codegen/templates/enum_container.py.jinja2 +1 -1
  39. package/autorest/codegen/templates/model_base.py.jinja2 +4 -4
  40. package/autorest/codegen/templates/packaging_templates/LICENSE.jinja2 +1 -1
  41. package/autorest/codegen/templates/packaging_templates/README.md.jinja2 +3 -1
  42. package/autorest/codegen/templates/packaging_templates/setup.py.jinja2 +8 -4
  43. package/autorest/codegen/templates/serialization.py.jinja2 +17 -18
  44. package/autorest/m4reformatter/__init__.py +1 -1
  45. package/autorest/multiapi/models/imports.py +1 -1
  46. package/autorest/multiapi/serializers/__init__.py +4 -1
  47. package/autorest/preprocess/__init__.py +28 -34
  48. package/package.json +1 -1
@@ -107,7 +107,7 @@ class BinaryType(PrimitiveType):
107
107
  from .combined_type import CombinedType
108
108
  from .operation import OperationBase
109
109
 
110
- file_import = FileImport(self.code_model)
110
+ file_import = self.init_file_import()
111
111
  file_import.add_submodule_import("typing", "IO", ImportType.STDLIB)
112
112
  operation = kwargs.get("operation")
113
113
  if (
@@ -145,7 +145,7 @@ class BinaryIteratorType(PrimitiveType):
145
145
  return self.get_declaration("Iterator[bytes]")
146
146
 
147
147
  def imports(self, **kwargs: Any) -> FileImport:
148
- file_import = FileImport(self.code_model)
148
+ file_import = self.init_file_import()
149
149
  iterator = "AsyncIterator" if kwargs.get("async_mode") else "Iterator"
150
150
  file_import.add_submodule_import("typing", iterator, ImportType.STDLIB)
151
151
  return file_import
@@ -171,7 +171,7 @@ class AnyType(PrimitiveType):
171
171
  return self.get_declaration({})
172
172
 
173
173
  def imports(self, **kwargs: Any) -> FileImport:
174
- file_import = FileImport(self.code_model)
174
+ file_import = self.init_file_import()
175
175
  file_import.add_submodule_import(
176
176
  "typing", "Any", ImportType.STDLIB, TypingSection.CONDITIONAL
177
177
  )
@@ -204,7 +204,7 @@ class AnyObjectType(PrimitiveType):
204
204
  return "isinstance({}, MutableMapping)"
205
205
 
206
206
  def imports(self, **kwargs: Any) -> FileImport:
207
- file_import = FileImport(self.code_model)
207
+ file_import = self.init_file_import()
208
208
  file_import.define_mutable_mapping_type()
209
209
  return file_import
210
210
 
@@ -386,7 +386,7 @@ class DatetimeType(PrimitiveType):
386
386
  return f'"{value}"'
387
387
 
388
388
  def imports(self, **kwargs: Any) -> FileImport:
389
- file_import = FileImport(self.code_model)
389
+ file_import = self.init_file_import()
390
390
  file_import.add_import("datetime", ImportType.STDLIB)
391
391
  return file_import
392
392
 
@@ -429,7 +429,7 @@ class TimeType(PrimitiveType):
429
429
  return f'"{value}"'
430
430
 
431
431
  def imports(self, **kwargs: Any) -> FileImport:
432
- file_import = FileImport(self.code_model)
432
+ file_import = self.init_file_import()
433
433
  file_import.add_import("datetime", ImportType.STDLIB)
434
434
  return file_import
435
435
 
@@ -476,7 +476,7 @@ class UnixTimeType(PrimitiveType):
476
476
  return f'"{value}"'
477
477
 
478
478
  def imports(self, **kwargs: Any) -> FileImport:
479
- file_import = FileImport(self.code_model)
479
+ file_import = self.init_file_import()
480
480
  file_import.add_import("datetime", ImportType.STDLIB)
481
481
  return file_import
482
482
 
@@ -519,7 +519,7 @@ class DateType(PrimitiveType):
519
519
  return f'"{value}"'
520
520
 
521
521
  def imports(self, **kwargs: Any) -> FileImport:
522
- file_import = FileImport(self.code_model)
522
+ file_import = self.init_file_import()
523
523
  file_import.add_import("datetime", ImportType.STDLIB)
524
524
  return file_import
525
525
 
@@ -562,7 +562,7 @@ class DurationType(PrimitiveType):
562
562
  return f'"{value}"'
563
563
 
564
564
  def imports(self, **kwargs: Any) -> FileImport:
565
- file_import = FileImport(self.code_model)
565
+ file_import = self.init_file_import()
566
566
  file_import.add_import("datetime", ImportType.STDLIB)
567
567
  return file_import
568
568
 
@@ -606,20 +606,24 @@ class ByteArraySchema(PrimitiveType):
606
606
  return "isinstance({}, bytes)"
607
607
 
608
608
 
609
- class AzureCoreType(PrimitiveType):
609
+ class SdkCoreType(PrimitiveType):
610
610
  def __init__(self, yaml_data: Dict[str, Any], code_model: "CodeModel") -> None:
611
611
  super().__init__(yaml_data=yaml_data, code_model=code_model)
612
612
  self.name = yaml_data.get("name", "")
613
613
 
614
614
  def docstring_type(self, **kwargs: Any) -> str:
615
- return "~azure.core." + self.type_annotation(**kwargs)
615
+ return f"~{self.init_file_import().import_core}" + self.type_annotation(
616
+ **kwargs
617
+ )
616
618
 
617
619
  def type_annotation(self, **kwargs: Any) -> str:
618
620
  return self.name
619
621
 
620
622
  def imports(self, **kwargs: Any) -> FileImport:
621
- file_import = FileImport(self.code_model)
622
- file_import.add_submodule_import("azure.core", self.name, ImportType.AZURECORE)
623
+ file_import = self.init_file_import()
624
+ file_import.add_submodule_import(
625
+ file_import.import_core, self.name, ImportType.SDKCORE
626
+ )
623
627
  return file_import
624
628
 
625
629
  @property
@@ -147,7 +147,7 @@ class Property(BaseModel): # pylint: disable=too-many-instance-attributes
147
147
  return retval or None
148
148
 
149
149
  def imports(self, **kwargs) -> FileImport:
150
- file_import = FileImport(self.code_model)
150
+ file_import = self.init_file_import()
151
151
  if self.is_discriminator and isinstance(self.type, EnumType):
152
152
  return file_import
153
153
  file_import.merge(
@@ -72,16 +72,16 @@ class RequestBuilderBase(BaseBuilder[ParameterListType]):
72
72
 
73
73
  def response_docstring_text(self, **kwargs) -> str:
74
74
  return (
75
- "Returns an :class:`~azure.core.rest.HttpRequest` that you will pass to the client's "
75
+ f"Returns an :class:`~{self.response_docstring_type()}` that you will pass to the client's "
76
76
  + "`send_request` method. See https://aka.ms/azsdk/dpcodegen/python/send_request for how to "
77
77
  + "incorporate this response into your code flow."
78
78
  )
79
79
 
80
80
  def response_docstring_type(self, **kwargs) -> str:
81
- return "~azure.core.rest.HttpRequest"
81
+ return f"~{self.init_file_import().import_core_rest}.HttpRequest"
82
82
 
83
83
  def imports(self) -> FileImport:
84
- file_import = FileImport(self.code_model)
84
+ file_import = self.init_file_import()
85
85
  relative_path = ".."
86
86
  if (
87
87
  not self.code_model.options["builders_visibility"] == "embedded"
@@ -98,14 +98,16 @@ class RequestBuilderBase(BaseBuilder[ParameterListType]):
98
98
  )
99
99
 
100
100
  file_import.add_submodule_import(
101
- "azure.core.rest",
101
+ file_import.import_core_rest,
102
102
  "HttpRequest",
103
- ImportType.AZURECORE,
103
+ ImportType.SDKCORE,
104
104
  )
105
105
 
106
106
  if self.parameters.headers or self.parameters.query:
107
107
  file_import.add_submodule_import(
108
- "azure.core.utils", "case_insensitive_dict", ImportType.AZURECORE
108
+ file_import.import_core_utils,
109
+ "case_insensitive_dict",
110
+ ImportType.SDKCORE,
109
111
  )
110
112
  file_import.add_submodule_import(
111
113
  "typing", "Any", ImportType.STDLIB, typing_section=TypingSection.CONDITIONAL
@@ -8,7 +8,7 @@ from typing import Dict, Optional, List, Any, TYPE_CHECKING, Union
8
8
  from .base import BaseModel
9
9
  from .base import BaseType
10
10
  from .imports import FileImport, ImportType, TypingSection
11
- from .primitive_types import BinaryType, BinaryIteratorType
11
+ from .primitive_types import BinaryType, BinaryIteratorType, ByteArraySchema
12
12
  from .dictionary_type import DictionaryType
13
13
  from .list_type import ListType
14
14
  from .model_type import ModelType
@@ -58,6 +58,7 @@ class Response(BaseModel):
58
58
  self.headers = headers or []
59
59
  self.type = type
60
60
  self.nullable = yaml_data.get("nullable")
61
+ self.default_content_type = yaml_data.get("defaultContentType")
61
62
 
62
63
  @property
63
64
  def result_property(self) -> str:
@@ -80,7 +81,12 @@ class Response(BaseModel):
80
81
  @property
81
82
  def is_stream_response(self) -> bool:
82
83
  """Is the response expected to be streamable, like a download."""
83
- return isinstance(self.type, BinaryIteratorType)
84
+ retval = isinstance(self.type, BinaryIteratorType) or (
85
+ isinstance(self.type, ByteArraySchema)
86
+ and bool(self.default_content_type)
87
+ and self.default_content_type != "application/json"
88
+ )
89
+ return retval
84
90
 
85
91
  @property
86
92
  def serialization_type(self) -> str:
@@ -108,7 +114,7 @@ class Response(BaseModel):
108
114
  return self.type.docstring_type(**kwargs) if self.type else "None"
109
115
 
110
116
  def _imports_shared(self, **kwargs: Any) -> FileImport:
111
- file_import = FileImport(self.code_model)
117
+ file_import = self.init_file_import()
112
118
  if self.type:
113
119
  file_import.merge(self.type.imports(**kwargs))
114
120
  if self.nullable:
@@ -158,6 +164,14 @@ class PagingResponse(Response):
158
164
  def __init__(self, *args, **kwargs) -> None:
159
165
  super().__init__(*args, **kwargs)
160
166
  self.item_type = self.code_model.lookup_type(id(self.yaml_data["itemType"]))
167
+ self.pager_sync: str = (
168
+ self.yaml_data.get("pagerSync")
169
+ or f"{self.init_file_import().import_core_paging}.ItemPaged"
170
+ )
171
+ self.pager_async: str = (
172
+ self.yaml_data.get("pagerAsync")
173
+ or f"{self.init_file_import().import_core_paging_async}.AsyncItemPaged"
174
+ )
161
175
 
162
176
  def get_polymorphic_subtypes(self, polymorphic_subtypes: List["ModelType"]) -> None:
163
177
  return self.item_type.get_polymorphic_subtypes(polymorphic_subtypes)
@@ -166,9 +180,7 @@ class PagingResponse(Response):
166
180
  return self.item_type.get_json_template_representation()
167
181
 
168
182
  def get_pager_path(self, async_mode: bool) -> str:
169
- return (
170
- self.yaml_data["pagerAsync"] if async_mode else self.yaml_data["pagerSync"]
171
- )
183
+ return self.pager_async if async_mode else self.pager_sync
172
184
 
173
185
  def get_pager(self, async_mode: bool) -> str:
174
186
  return self.get_pager_path(async_mode).split(".")[-1]
@@ -192,7 +204,7 @@ class PagingResponse(Response):
192
204
  pager_import_path = ".".join(self.get_pager_path(async_mode).split(".")[:-1])
193
205
  pager = self.get_pager(async_mode)
194
206
 
195
- file_import.add_submodule_import(pager_import_path, pager, ImportType.AZURECORE)
207
+ file_import.add_submodule_import(pager_import_path, pager, ImportType.SDKCORE)
196
208
  return file_import
197
209
 
198
210
  def imports(self, **kwargs: Any) -> FileImport:
@@ -200,7 +212,9 @@ class PagingResponse(Response):
200
212
  async_mode = kwargs.get("async_mode")
201
213
  if async_mode:
202
214
  file_import.add_submodule_import(
203
- "azure.core.async_paging", "AsyncList", ImportType.AZURECORE
215
+ file_import.import_core_paging_async,
216
+ "AsyncList",
217
+ ImportType.SDKCORE,
204
218
  )
205
219
 
206
220
  return file_import
@@ -269,9 +283,7 @@ class LROResponse(Response):
269
283
  async_mode = kwargs["async_mode"]
270
284
  poller_import_path = ".".join(self.get_poller_path(async_mode).split(".")[:-1])
271
285
  poller = self.get_poller(async_mode)
272
- file_import.add_submodule_import(
273
- poller_import_path, poller, ImportType.AZURECORE
274
- )
286
+ file_import.add_submodule_import(poller_import_path, poller, ImportType.SDKCORE)
275
287
  return file_import
276
288
 
277
289
  def imports(self, **kwargs: Any) -> FileImport:
@@ -285,7 +297,7 @@ class LROResponse(Response):
285
297
  file_import.add_submodule_import(
286
298
  default_polling_method_import_path,
287
299
  default_polling_method,
288
- ImportType.AZURECORE,
300
+ ImportType.SDKCORE,
289
301
  )
290
302
  default_no_polling_method_import_path = ".".join(
291
303
  self.get_no_polling_method_path(async_mode).split(".")[:-1]
@@ -294,7 +306,7 @@ class LROResponse(Response):
294
306
  file_import.add_submodule_import(
295
307
  default_no_polling_method_import_path,
296
308
  default_no_polling_method,
297
- ImportType.AZURECORE,
309
+ ImportType.SDKCORE,
298
310
  )
299
311
 
300
312
  base_polling_method_import_path = ".".join(
@@ -302,7 +314,7 @@ class LROResponse(Response):
302
314
  )
303
315
  base_polling_method = self.get_base_polling_method(async_mode)
304
316
  file_import.add_submodule_import(
305
- base_polling_method_import_path, base_polling_method, ImportType.AZURECORE
317
+ base_polling_method_import_path, base_polling_method, ImportType.SDKCORE
306
318
  )
307
319
  return file_import
308
320
 
@@ -240,6 +240,11 @@ class JinjaSerializer(ReaderAndWriter): # pylint: disable=abstract-method
240
240
  serializer = GeneralSerializer(self.code_model, env, async_mode=False)
241
241
  params = self.code_model.options["package_configuration"] or {}
242
242
  for template_name in package_files:
243
+ if (
244
+ self.code_model.options["unbranded"]
245
+ and template_name == "dev_requirements.txt.jinja2"
246
+ ):
247
+ continue
243
248
  file = template_name.replace(".jinja2", "")
244
249
  output_name = root_of_sdk / file
245
250
  if not self.read_file(output_name) or file in _REGENERATE_FILES:
@@ -0,0 +1,21 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ from jinja2 import Environment
7
+ from ..models import (
8
+ FileImport,
9
+ CodeModel,
10
+ )
11
+
12
+
13
+ class BaseSerializer:
14
+ """Base serializer for SDK root level files"""
15
+
16
+ def __init__(self, code_model: CodeModel, env: Environment):
17
+ self.code_model = code_model
18
+ self.env = env
19
+
20
+ def init_file_import(self) -> FileImport:
21
+ return FileImport(self.code_model)
@@ -426,6 +426,12 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
426
426
  builder.parameters.path, self.serializer_name
427
427
  )
428
428
 
429
+ @property
430
+ def pipeline_name(self) -> str:
431
+ if not self.code_model.options["unbranded"]:
432
+ return "_pipeline"
433
+ return "pipeline"
434
+
429
435
 
430
436
  ############################## REQUEST BUILDERS ##############################
431
437
 
@@ -483,12 +489,13 @@ class RequestBuilderSerializer(
483
489
  return False
484
490
 
485
491
  def response_docstring(self, builder: RequestBuilderType) -> List[str]:
492
+ import_core_rest = builder.init_file_import().import_core_rest
486
493
  response_str = (
487
- ":return: Returns an :class:`~azure.core.rest.HttpRequest` that you will pass to the client's "
494
+ f":return: Returns an :class:`~{import_core_rest}.HttpRequest` that you will pass to the client's "
488
495
  + "`send_request` method. See https://aka.ms/azsdk/dpcodegen/python/send_request for how to "
489
496
  + "incorporate this response into your code flow."
490
497
  )
491
- rtype_str = ":rtype: ~azure.core.rest.HttpRequest"
498
+ rtype_str = f":rtype: ~{import_core_rest}.HttpRequest"
492
499
  return [response_str, rtype_str]
493
500
 
494
501
  def pop_kwargs_from_signature(self, builder: RequestBuilderType) -> List[str]:
@@ -637,13 +644,13 @@ class _OperationSerializer(
637
644
  def make_pipeline_call(self, builder: OperationType) -> List[str]:
638
645
  type_ignore = self.async_mode and builder.group_name == "" # is in a mixin
639
646
  stream_value = (
640
- 'kwargs.pop("stream", False)'
647
+ f'kwargs.pop("stream", {builder.has_stream_response})'
641
648
  if builder.expose_stream_keyword
642
649
  else builder.has_stream_response
643
650
  )
644
651
  return [
645
652
  f"_stream = {stream_value}",
646
- f"pipeline_response: PipelineResponse = {self._call_method}self._client._pipeline.run( "
653
+ f"pipeline_response: PipelineResponse = {self._call_method}self._client.{self.pipeline_name}.run( "
647
654
  + f"{'# type: ignore' if type_ignore else ''} # pylint: disable=protected-access",
648
655
  " _request,",
649
656
  " stream=_stream,",
@@ -723,7 +730,7 @@ class _OperationSerializer(
723
730
  return [
724
731
  response_str,
725
732
  rtype_str,
726
- ":raises ~azure.core.exceptions.HttpResponseError:",
733
+ f":raises ~{builder.init_file_import().import_core_exceptions}.HttpResponseError:",
727
734
  ]
728
735
 
729
736
  def _serialize_body_parameter(self, builder: OperationType) -> List[str]:
@@ -1049,14 +1056,17 @@ class _OperationSerializer(
1049
1056
  if response.headers:
1050
1057
  retval.append("")
1051
1058
  deserialize_code: List[str] = []
1052
- if response.is_stream_response:
1053
- deserialize_code.append(
1054
- "deserialized = {}".format(
1059
+ if builder.has_stream_response:
1060
+ if isinstance(response.type, ByteArraySchema):
1061
+ retval.append(f"{'await ' if self.async_mode else ''}response.read()")
1062
+ deserialized = "response.content"
1063
+ else:
1064
+ deserialized = (
1055
1065
  "response.iter_bytes()"
1056
1066
  if self.code_model.options["version_tolerant"]
1057
- else "response.stream_download(self._client._pipeline)"
1067
+ else f"response.stream_download(self._client.{self.pipeline_name})"
1058
1068
  )
1059
- )
1069
+ deserialize_code.append(f"deserialized = {deserialized}")
1060
1070
  elif response.type:
1061
1071
  pylint_disable = ""
1062
1072
  if isinstance(response.type, ModelType) and response.type.internal:
@@ -1069,14 +1079,18 @@ class _OperationSerializer(
1069
1079
  deserialize_code.append(" pipeline_response")
1070
1080
  deserialize_code.append(")")
1071
1081
  elif self.code_model.options["models_mode"] == "dpg":
1072
- deserialize_code.append("deserialized = _deserialize(")
1073
- deserialize_code.append(
1074
- f" {response.type.type_annotation(is_operation_file=True)},{pylint_disable}"
1075
- )
1076
- deserialize_code.append(
1077
- f" response.json(){response.result_property}"
1078
- )
1079
- deserialize_code.append(")")
1082
+ if builder.has_stream_response:
1083
+ deserialize_code.append("deserialized = response.content")
1084
+ else:
1085
+ deserialize_code.append("deserialized = _deserialize(")
1086
+ deserialize_code.append(
1087
+ f" {response.type.type_annotation(is_operation_file=True)},{pylint_disable}"
1088
+ )
1089
+ deserialize_code.append(
1090
+ f" response.json(){response.result_property}"
1091
+ )
1092
+ deserialize_code.append(")")
1093
+
1080
1094
  else:
1081
1095
  deserialized_value = (
1082
1096
  "ET.fromstring(response.text())"
@@ -1088,7 +1102,7 @@ class _OperationSerializer(
1088
1102
  deserialize_code.append("else:")
1089
1103
  deserialize_code.append(" deserialized = None")
1090
1104
  if len(deserialize_code) > 0:
1091
- if builder.expose_stream_keyword:
1105
+ if builder.expose_stream_keyword and not builder.has_stream_response:
1092
1106
  retval.append("if _stream:")
1093
1107
  retval.append(" deserialized = response.iter_bytes()")
1094
1108
  retval.append("else:")
@@ -111,19 +111,28 @@ class ClientSerializer:
111
111
  def initialize_pipeline_client(self, async_mode: bool) -> List[str]:
112
112
  result = []
113
113
  pipeline_client_name = self.client.pipeline_class(async_mode)
114
+ endpoint_name = (
115
+ "endpoint" if self.client.code_model.options["unbranded"] else "base_url"
116
+ )
114
117
  params = {
115
- "base_url": self.host_variable_name,
118
+ endpoint_name: self.host_variable_name,
116
119
  "policies": "_policies",
117
120
  }
118
121
  if not self.client.code_model.is_legacy and self.client.request_id_header_name:
119
122
  result.append(
120
123
  f'kwargs["request_id_header_name"] = "{self.client.request_id_header_name}"'
121
124
  )
125
+ policies = build_policies(
126
+ self.client.code_model.options["azure_arm"],
127
+ async_mode,
128
+ self.client.code_model.options["unbranded"],
129
+ self.client.code_model.options["tracing"],
130
+ )
122
131
  result.extend(
123
132
  [
124
133
  "_policies = kwargs.pop('policies', None)",
125
134
  "if _policies is None:",
126
- f' _policies = [{",".join(build_policies(self.client.code_model.options["azure_arm"], async_mode, self.client.code_model.options["unbranded"]))}]', # pylint: disable=line-too-long
135
+ f' _policies = [{",".join(policies)}]',
127
136
  f"self._client: {pipeline_client_name} = {pipeline_client_name}("
128
137
  f"{', '.join(f'{k}={v}' for k, v in params.items())}, **kwargs)",
129
138
  ]
@@ -183,7 +192,7 @@ class ClientSerializer:
183
192
 
184
193
  def _send_request_signature(self) -> str:
185
194
  send_request_signature = [
186
- "request: HttpRequest,"
195
+ "request: HttpRequest, *, stream: bool = False,"
187
196
  ] + self.client.parameters.method_signature_kwargs
188
197
  return self.parameter_serializer.serialize_method(
189
198
  function_def="def",
@@ -243,7 +252,9 @@ class ClientSerializer:
243
252
  return retval
244
253
 
245
254
  def _rest_request_example(self, async_mode: bool) -> List[str]:
246
- retval = [">>> from azure.core.rest import HttpRequest"]
255
+ retval = [
256
+ f">>> from {self.client.init_file_import().import_core_rest} import HttpRequest"
257
+ ]
247
258
  retval.append('>>> request = HttpRequest("GET", "https://www.example.org/")')
248
259
  retval.append("<HttpRequest [GET], url: 'https://www.example.org/'>")
249
260
  retval.extend(self._example_make_call(async_mode))
@@ -262,7 +273,9 @@ class ClientSerializer:
262
273
  )
263
274
  retval.append("")
264
275
  retval.append(":param request: The network request you want to make. Required.")
265
- retval.append(":type request: ~azure.core.rest.HttpRequest")
276
+ retval.append(
277
+ f":type request: ~{self.client.init_file_import().import_core_rest}.HttpRequest"
278
+ )
266
279
  retval.append(
267
280
  ":keyword bool stream: Whether the response payload will be streamed. Defaults to False."
268
281
  )
@@ -270,7 +283,9 @@ class ClientSerializer:
270
283
  ":return: The response of your network call. Does not do error handling on your response."
271
284
  )
272
285
  http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
273
- retval.append(f":rtype: ~azure.core.rest.{http_response}")
286
+ retval.append(
287
+ f":rtype: ~{self.client.init_file_import().import_core_rest}.{http_response}"
288
+ )
274
289
  retval.append('"""')
275
290
  return retval
276
291
 
@@ -4,16 +4,13 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
 
7
- from jinja2 import Environment
8
- from ..models import CodeModel
7
+ from .base_serializer import BaseSerializer
9
8
 
10
9
 
11
- class EnumSerializer:
12
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
13
- self.code_model = code_model
14
- self.env = env
15
-
10
+ class EnumSerializer(BaseSerializer):
16
11
  def serialize(self) -> str:
17
12
  # Generate the enum file
18
13
  template = self.env.get_template("enum_container.py.jinja2")
19
- return template.render(code_model=self.code_model)
14
+ return template.render(
15
+ code_model=self.code_model, file_import=self.init_file_import()
16
+ )
@@ -8,29 +8,20 @@ from jinja2 import Environment
8
8
  from .import_serializer import FileImportSerializer, TypingSection
9
9
  from ..models.imports import MsrestImportType
10
10
  from ..models import (
11
- FileImport,
12
11
  ImportType,
13
12
  CodeModel,
14
13
  TokenCredentialType,
15
14
  Client,
16
15
  )
17
16
  from .client_serializer import ClientSerializer, ConfigSerializer
17
+ from .base_serializer import BaseSerializer
18
18
 
19
- _PACKAGE_MODE_FILES = [
20
- "CHANGELOG.md.jinja2",
21
- "dev_requirements.txt.jinja2",
22
- "LICENSE.jinja2",
23
- "MANIFEST.in.jinja2",
24
- "README.md.jinja2",
25
- ]
26
19
 
27
-
28
- class GeneralSerializer:
20
+ class GeneralSerializer(BaseSerializer):
29
21
  """General serializer for SDK root level files"""
30
22
 
31
23
  def __init__(self, code_model: CodeModel, env: Environment, async_mode: bool):
32
- self.code_model = code_model
33
- self.env = env
24
+ super().__init__(code_model, env)
34
25
  self.async_mode = async_mode
35
26
 
36
27
  def serialize_setup_file(self) -> str:
@@ -68,7 +59,7 @@ class GeneralSerializer:
68
59
  }
69
60
  params.update(self.code_model.options)
70
61
  params.update(kwargs)
71
- return template.render(**params)
62
+ return template.render(file_import=self.init_file_import(), **params)
72
63
 
73
64
  def serialize_pkgutil_init_file(self) -> str:
74
65
  template = self.env.get_template("pkgutil_init.py.jinja2")
@@ -85,7 +76,7 @@ class GeneralSerializer:
85
76
  def serialize_service_client_file(self, clients: List[Client]) -> str:
86
77
  template = self.env.get_template("client_container.py.jinja2")
87
78
 
88
- imports = FileImport(self.code_model)
79
+ imports = self.init_file_import()
89
80
  for client in clients:
90
81
  imports.merge(client.imports(self.async_mode))
91
82
 
@@ -101,12 +92,12 @@ class GeneralSerializer:
101
92
  template = self.env.get_template("vendor.py.jinja2")
102
93
 
103
94
  # configure imports
104
- file_import = FileImport(self.code_model)
95
+ file_import = self.init_file_import()
105
96
  if self.code_model.need_request_converter:
106
97
  file_import.add_submodule_import(
107
98
  "azure.core.pipeline.transport",
108
99
  "HttpRequest",
109
- ImportType.AZURECORE,
100
+ ImportType.SDKCORE,
110
101
  )
111
102
 
112
103
  if self.code_model.need_mixin_abc:
@@ -116,9 +107,9 @@ class GeneralSerializer:
116
107
  ImportType.STDLIB,
117
108
  )
118
109
  file_import.add_submodule_import(
119
- "azure.core",
110
+ file_import.import_core_pipeline_client,
120
111
  f"{'Async' if self.async_mode else ''}PipelineClient",
121
- ImportType.AZURECORE,
112
+ ImportType.SDKCORE,
122
113
  TypingSection.TYPING,
123
114
  )
124
115
  file_import.add_msrest_import(
@@ -135,9 +126,9 @@ class GeneralSerializer:
135
126
  if self.code_model.has_etag:
136
127
  file_import.add_submodule_import("typing", "Optional", ImportType.STDLIB)
137
128
  file_import.add_submodule_import(
138
- "azure.core",
129
+ file_import.import_core,
139
130
  "MatchConditions",
140
- ImportType.AZURECORE,
131
+ ImportType.SDKCORE,
141
132
  )
142
133
 
143
134
  return template.render(
@@ -151,7 +142,7 @@ class GeneralSerializer:
151
142
 
152
143
  def serialize_config_file(self, clients: List[Client]) -> str:
153
144
  template = self.env.get_template("config_container.py.jinja2")
154
- imports = FileImport(self.code_model)
145
+ imports = self.init_file_import()
155
146
  for client in self.code_model.clients:
156
147
  imports.merge(client.config.imports(self.async_mode))
157
148
  return template.render(
@@ -168,11 +159,16 @@ class GeneralSerializer:
168
159
 
169
160
  def serialize_serialization_file(self) -> str:
170
161
  template = self.env.get_template("serialization.py.jinja2")
171
- return template.render(code_model=self.code_model)
162
+ return template.render(
163
+ import_core_exceptions=self.init_file_import().import_core_exceptions,
164
+ import_core_serialization=self.init_file_import().import_core_serialization,
165
+ )
172
166
 
173
167
  def serialize_model_base_file(self) -> str:
174
168
  template = self.env.get_template("model_base.py.jinja2")
175
- return template.render(code_model=self.code_model)
169
+ return template.render(
170
+ code_model=self.code_model, file_import=self.init_file_import()
171
+ )
176
172
 
177
173
  def serialize_validation_file(self) -> str:
178
174
  template = self.env.get_template("validation.py.jinja2")