@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
@@ -6,10 +6,10 @@
6
6
  from typing import List
7
7
  from abc import ABC, abstractmethod
8
8
 
9
- from jinja2 import Environment
10
- from ..models import ModelType, CodeModel, Property, ConstantType, EnumValue
9
+ from ..models import ModelType, Property, ConstantType, EnumValue
11
10
  from ..models.imports import FileImport, TypingSection, MsrestImportType, ImportType
12
11
  from .import_serializer import FileImportSerializer
12
+ from .base_serializer import BaseSerializer
13
13
 
14
14
 
15
15
  def _documentation_string(
@@ -28,11 +28,7 @@ def _documentation_string(
28
28
  return retval
29
29
 
30
30
 
31
- class _ModelSerializer(ABC):
32
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
33
- self.code_model = code_model
34
- self.env = env
35
-
31
+ class _ModelSerializer(BaseSerializer, ABC):
36
32
  @abstractmethod
37
33
  def imports(self) -> FileImport:
38
34
  ...
@@ -133,7 +129,7 @@ class _ModelSerializer(ABC):
133
129
 
134
130
  class MsrestModelSerializer(_ModelSerializer):
135
131
  def imports(self) -> FileImport:
136
- file_import = FileImport(self.code_model)
132
+ file_import = self.init_file_import()
137
133
  file_import.add_msrest_import(
138
134
  relative_path="..",
139
135
  msrest_import_type=MsrestImportType.Module,
@@ -202,7 +198,7 @@ class MsrestModelSerializer(_ModelSerializer):
202
198
 
203
199
  class DpgModelSerializer(_ModelSerializer):
204
200
  def imports(self) -> FileImport:
205
- file_import = FileImport(self.code_model)
201
+ file_import = self.init_file_import()
206
202
  file_import.add_submodule_import(
207
203
  "..",
208
204
  "_model_base",
@@ -10,7 +10,6 @@ from jinja2 import Environment
10
10
  from ..models import (
11
11
  CodeModel,
12
12
  OperationGroup,
13
- FileImport,
14
13
  RequestBuilder,
15
14
  OverloadedRequestBuilder,
16
15
  Client,
@@ -20,9 +19,10 @@ from .builder_serializer import (
20
19
  get_operation_serializer,
21
20
  RequestBuilderSerializer,
22
21
  )
22
+ from .base_serializer import BaseSerializer
23
23
 
24
24
 
25
- class OperationGroupsSerializer:
25
+ class OperationGroupsSerializer(BaseSerializer):
26
26
  def __init__(
27
27
  self,
28
28
  code_model: CodeModel,
@@ -31,9 +31,8 @@ class OperationGroupsSerializer:
31
31
  async_mode: bool,
32
32
  operation_group: Optional[OperationGroup] = None,
33
33
  ):
34
+ super().__init__(code_model, env)
34
35
  self.clients = clients
35
- self.code_model = code_model
36
- self.env = env
37
36
  self.async_mode = async_mode
38
37
  self.operation_group = operation_group
39
38
 
@@ -57,7 +56,7 @@ class OperationGroupsSerializer:
57
56
  if self.operation_group
58
57
  else [og for client in self.clients for og in client.operation_groups]
59
58
  )
60
- imports = FileImport(code_model=self.code_model)
59
+ imports = self.init_file_import()
61
60
  for operation_group in operation_groups:
62
61
  imports.merge(
63
62
  operation_group.imports(
@@ -3,19 +3,15 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
- from jinja2 import Environment
7
6
  from .import_serializer import FileImportSerializer
8
- from ..models import CodeModel, FileImport, ImportType
7
+ from ..models import ImportType
8
+ from .base_serializer import BaseSerializer
9
9
 
10
10
 
11
- class PatchSerializer:
12
- def __init__(self, env: Environment, code_model: CodeModel) -> None:
13
- self.env = env
14
- self.code_model = code_model
15
-
11
+ class PatchSerializer(BaseSerializer):
16
12
  def serialize(self) -> str:
17
13
  template = self.env.get_template("patch.py.jinja2")
18
- imports = FileImport(code_model=self.code_model)
14
+ imports = self.init_file_import()
19
15
  imports.add_submodule_import("typing", "List", ImportType.STDLIB)
20
16
  return template.render(
21
17
  code_model=self.code_model,
@@ -10,23 +10,23 @@ from ..models import FileImport
10
10
  from .import_serializer import FileImportSerializer
11
11
  from ..models import CodeModel, RequestBuilderType
12
12
  from .builder_serializer import RequestBuilderSerializer
13
+ from .base_serializer import BaseSerializer
13
14
 
14
15
 
15
- class RequestBuildersSerializer:
16
+ class RequestBuildersSerializer(BaseSerializer):
16
17
  def __init__(
17
18
  self,
18
19
  code_model: CodeModel,
19
20
  env: Environment,
20
21
  request_builders: List[RequestBuilderType],
21
22
  ) -> None:
22
- self.code_model = code_model
23
- self.env = env
23
+ super().__init__(code_model, env)
24
24
  self.request_builders = request_builders
25
25
  self.group_name = request_builders[0].group_name
26
26
 
27
27
  @property
28
28
  def imports(self) -> FileImport:
29
- file_import = FileImport(code_model=self.code_model)
29
+ file_import = self.init_file_import()
30
30
  for request_builder in self.request_builders:
31
31
  if request_builder.group_name == self.group_name:
32
32
  file_import.merge(request_builder.imports())
@@ -8,13 +8,14 @@ import logging
8
8
  from typing import Dict, Any, Union, Tuple
9
9
  from jinja2 import Environment
10
10
 
11
- from autorest.codegen.models.credential_types import AzureKeyCredentialType
11
+ from autorest.codegen.models.credential_types import KeyCredentialType
12
12
  from autorest.codegen.models.credential_types import TokenCredentialType
13
- from autorest.codegen.models.imports import FileImport, ImportType
13
+ from autorest.codegen.models.imports import ImportType
14
14
  from autorest.codegen.models.operation import OperationBase
15
15
  from autorest.codegen.models.operation_group import OperationGroup
16
16
  from autorest.codegen.models.parameter import Parameter, BodyParameter
17
17
  from autorest.codegen.serializers.import_serializer import FileImportSerializer
18
+ from autorest.codegen.serializers.base_serializer import BaseSerializer
18
19
  from ..models import CodeModel
19
20
  from .utils import get_namespace_config, get_namespace_from_package_name
20
21
  from ..._utils import to_snake_case
@@ -22,7 +23,7 @@ from ..._utils import to_snake_case
22
23
  _LOGGER = logging.getLogger(__name__)
23
24
 
24
25
 
25
- class SampleSerializer:
26
+ class SampleSerializer(BaseSerializer):
26
27
  def __init__(
27
28
  self,
28
29
  code_model: CodeModel,
@@ -32,8 +33,7 @@ class SampleSerializer:
32
33
  sample: Dict[str, Any],
33
34
  file_name: str,
34
35
  ) -> None:
35
- self.code_model = code_model
36
- self.env = env
36
+ super().__init__(code_model, env)
37
37
  self.operation_group = operation_group
38
38
  self.operation = operation
39
39
  self.sample = sample
@@ -43,7 +43,7 @@ class SampleSerializer:
43
43
  }
44
44
 
45
45
  def _imports(self) -> FileImportSerializer:
46
- imports = FileImport(self.code_model)
46
+ imports = self.init_file_import()
47
47
  namespace_from_package_name = get_namespace_from_package_name(
48
48
  self.code_model.options["package_name"]
49
49
  )
@@ -63,10 +63,12 @@ class SampleSerializer:
63
63
  imports.add_submodule_import(
64
64
  "azure.identity", "DefaultAzureCredential", ImportType.THIRDPARTY
65
65
  )
66
- elif isinstance(credential_type, AzureKeyCredentialType):
66
+ elif isinstance(credential_type, KeyCredentialType):
67
67
  imports.add_import("os", ImportType.STDLIB)
68
68
  imports.add_submodule_import(
69
- "azure.core.credentials", "AzureKeyCredential", ImportType.THIRDPARTY
69
+ f"{imports.import_core}.credentials",
70
+ "AzureKeyCredential",
71
+ ImportType.THIRDPARTY,
70
72
  )
71
73
  for param in self.operation.parameters.positional:
72
74
  if (
@@ -83,7 +85,7 @@ class SampleSerializer:
83
85
  credential_type = getattr(self.code_model.clients[0].credential, "type", None)
84
86
  if isinstance(credential_type, TokenCredentialType):
85
87
  special_param.update({"credential": "DefaultAzureCredential()"})
86
- elif isinstance(credential_type, AzureKeyCredentialType):
88
+ elif isinstance(credential_type, KeyCredentialType):
87
89
  special_param.update(
88
90
  {"credential": 'AzureKeyCredential(key=os.getenv("AZURE_KEY"))'}
89
91
  )
@@ -3,19 +3,14 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
- from jinja2 import Environment
7
- from ..models import CodeModel
8
6
  from ..models.imports import FileImport, ImportType
9
7
  from .import_serializer import FileImportSerializer
8
+ from .base_serializer import BaseSerializer
10
9
 
11
10
 
12
- class TypesSerializer:
13
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
14
- self.code_model = code_model
15
- self.env = env
16
-
11
+ class TypesSerializer(BaseSerializer):
17
12
  def imports(self) -> FileImport:
18
- file_import = FileImport(code_model=self.code_model)
13
+ file_import = self.init_file_import()
19
14
  if self.code_model.named_unions:
20
15
  file_import.add_submodule_import(
21
16
  "typing",
@@ -24,7 +24,7 @@
24
24
  {% else %}
25
25
  request_copy.url = self._client.format_url(request_copy.url)
26
26
  {% endif %}
27
- return self._client.send_request(request_copy, **kwargs) # type: ignore
27
+ return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore
28
28
 
29
29
  {{ keywords.def }} close(self) -> None:
30
30
  {{ keywords.await }}self._client.close()
@@ -51,10 +51,12 @@ class {{ client.name }}Configuration: {{ client.config.pylint_disable }}
51
51
  self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
52
52
  self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
53
53
  self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
54
+ {% if not code_model.options["unbranded"] %}
54
55
  self.http_logging_policy = kwargs.get('http_logging_policy') or {{ "ARM" if client.code_model.options['azure_arm'] else "policies." }}HttpLoggingPolicy(**kwargs)
55
- self.retry_policy = kwargs.get('retry_policy') or policies.{{ keywords.async_class }}RetryPolicy(**kwargs)
56
56
  self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
57
57
  self.redirect_policy = kwargs.get('redirect_policy') or policies.{{ keywords.async_class }}RedirectPolicy(**kwargs)
58
+ {% endif %}
59
+ self.retry_policy = kwargs.get('retry_policy') or policies.{{ keywords.async_class }}RetryPolicy(**kwargs)
58
60
  self.authentication_policy = kwargs.get('authentication_policy')
59
61
  {% if client.credential and client.credential.type.policy is defined %}
60
62
  {# only adding this if credential_scopes is not passed during code generation #}
@@ -2,7 +2,7 @@
2
2
  {{ code_model.options['license_header'] }}
3
3
 
4
4
  from enum import Enum
5
- from azure.core import CaseInsensitiveEnumMeta
5
+ from {{ file_import.import_core_case_insensitive_enum }} import CaseInsensitiveEnumMeta
6
6
 
7
7
  {% for enum in code_model.enums | sort %}
8
8
  {% include "enum.py.jinja2" %}
@@ -19,10 +19,10 @@ import email
19
19
  from datetime import datetime, date, time, timedelta, timezone
20
20
  from json import JSONEncoder
21
21
  import isodate
22
- from azure.core.exceptions import DeserializationError
23
- from azure.core import CaseInsensitiveEnumMeta
24
- from azure.core.pipeline import PipelineResponse
25
- from azure.core.serialization import _Null
22
+ from {{ file_import.import_core_exceptions }} import DeserializationError
23
+ from {{ file_import.import_core_case_insensitive_enum }} import CaseInsensitiveEnumMeta
24
+ from {{ file_import.import_core_pipeline }} import PipelineResponse
25
+ from {{ file_import.import_core_serialization }} import _Null
26
26
 
27
27
  if sys.version_info >= (3, 9):
28
28
  from collections.abc import MutableMapping
@@ -1,4 +1,4 @@
1
- Copyright (c) Microsoft Corporation.
1
+ Copyright (c) {{ company_name }} Corporation.
2
2
 
3
3
  MIT License
4
4
 
@@ -1,3 +1,4 @@
1
+ {% if not code_model.options["unbranded"] %}
1
2
  {% if package_mode == "mgmtplane" -%}
2
3
  # Microsoft Azure SDK for Python
3
4
 
@@ -66,7 +67,7 @@ Use the returned token credential to authenticate the client:
66
67
  ```python
67
68
  >>> from {{ namespace }} import {{ client_name }}
68
69
  >>> from azure.identity import DefaultAzureCredential
69
- >>> from azure.core.exceptions import HttpResponseError
70
+ >>> from {{ file_import.import_core_exceptions }} import HttpResponseError
70
71
 
71
72
  >>> client = {{ client_name }}(endpoint='<endpoint>', credential=DefaultAzureCredential())
72
73
  >>> try:
@@ -103,3 +104,4 @@ additional questions or comments.
103
104
  [pip]: https://pypi.org/project/pip/
104
105
  [azure_sub]: https://azure.microsoft.com/free/
105
106
  {% endif %}
107
+ {% endif %}
@@ -24,7 +24,7 @@ with open(os.path.join(package_folder_path, "_version.py"), "r") as fd:
24
24
 
25
25
  if not version:
26
26
  raise RuntimeError("Cannot find version information")
27
- {% set description = "\"Microsoft {} Client Library for Python\".format(PACKAGE_PPRINT_NAME)" %}
27
+ {% set description = "\"" + company_name + " {} Client Library for Python\".format(PACKAGE_PPRINT_NAME)" %}
28
28
  {% set author_email = "azpysdkhelp@microsoft.com" %}
29
29
  {% set url = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" %}
30
30
  {% else %}
@@ -43,11 +43,13 @@ setup(
43
43
  long_description=open("README.md", "r").read(),
44
44
  long_description_content_type="text/markdown",
45
45
  license="MIT License",
46
- author="Microsoft Corporation",
46
+ author="{{ company_name }} Corporation",
47
47
  {% endif %}
48
48
  author_email="{{ author_email }}",
49
+ {% if not unbranded %}
49
50
  url="{{ url }}",
50
51
  keywords="azure, azure sdk",
52
+ {% endif %}
51
53
  {% if package_mode %}
52
54
  classifiers=[
53
55
  "Development Status :: {{ dev_status }}",
@@ -75,7 +77,7 @@ setup(
75
77
  ),
76
78
  include_package_data=True,
77
79
  package_data={
78
- 'pytyped': ['py.typed'],
80
+ '{{ code_model.namespace }}': ['py.typed'],
79
81
  },
80
82
  {% else %}
81
83
  packages=find_packages(),
@@ -87,7 +89,9 @@ setup(
87
89
  {% else %}
88
90
  "isodate<1.0.0,>=0.6.1",
89
91
  {% endif %}
90
- {% if azure_arm %}
92
+ {% if unbranded %}
93
+ "corehttp",
94
+ {% elif azure_arm %}
91
95
  "azure-mgmt-core<2.0.0,>=1.3.2",
92
96
  {% else %}
93
97
  "azure-core<2.0.0,>=1.28.0",
@@ -63,8 +63,8 @@ import xml.etree.ElementTree as ET
63
63
 
64
64
  import isodate # type: ignore
65
65
 
66
- from azure.core.exceptions import DeserializationError, SerializationError, raise_with_traceback
67
- from azure.core.serialization import NULL as AzureCoreNull
66
+ from {{ import_core_exceptions }} import DeserializationError, SerializationError
67
+ from {{ import_core_serialization }} import NULL as AzureCoreNull
68
68
 
69
69
  _BOM = codecs.BOM_UTF8.decode(encoding="utf-8")
70
70
 
@@ -124,7 +124,7 @@ class RawDeserializer:
124
124
  pass
125
125
 
126
126
  return ET.fromstring(data_as_str) # nosec
127
- except ET.ParseError:
127
+ except ET.ParseError as err:
128
128
  # It might be because the server has an issue, and returned JSON with
129
129
  # content-type XML....
130
130
  # So let's try a JSON load, and if it's still broken
@@ -143,7 +143,7 @@ class RawDeserializer:
143
143
  # The function hack is because Py2.7 messes up with exception
144
144
  # context otherwise.
145
145
  _LOGGER.critical("Wasn't XML not JSON, failing")
146
- raise_with_traceback(DeserializationError, "XML is invalid")
146
+ raise DeserializationError("XML is invalid") from err
147
147
  raise DeserializationError("Cannot deserialize content-type: {}".format(content_type))
148
148
 
149
149
  @classmethod
@@ -340,7 +340,7 @@ class Model(object):
340
340
  return _create_xml_node(xml_map.get("name", cls.__name__), xml_map.get("prefix", None), xml_map.get("ns", None))
341
341
 
342
342
  def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON:
343
- """Return the JSON that would be sent to azure from this model.
343
+ """Return the JSON that would be sent to server from this model.
344
344
 
345
345
  This is an alias to `as_dict(full_restapi_key_transformer, keep_readonly=False)`.
346
346
 
@@ -670,7 +670,7 @@ class Serializer(object):
670
670
 
671
671
  except (AttributeError, KeyError, TypeError) as err:
672
672
  msg = "Attribute {} in object {} cannot be serialized.\n{}".format(attr_name, class_name, str(target_obj))
673
- raise_with_traceback(SerializationError, msg, err)
673
+ raise SerializationError(msg) from err
674
674
  else:
675
675
  return serialized
676
676
 
@@ -712,7 +712,7 @@ class Serializer(object):
712
712
  ]
713
713
  data = deserializer._deserialize(data_type, data)
714
714
  except DeserializationError as err:
715
- raise_with_traceback(SerializationError, "Unable to build a model: " + str(err), err)
715
+ raise SerializationError("Unable to build a model: " + str(err)) from err
716
716
 
717
717
  return self._serialize(data, data_type, **kwargs)
718
718
 
@@ -828,7 +828,7 @@ class Serializer(object):
828
828
 
829
829
  except (ValueError, TypeError) as err:
830
830
  msg = "Unable to serialize value: {!r} as type: {!r}."
831
- raise_with_traceback(SerializationError, msg.format(data, data_type), err)
831
+ raise SerializationError(msg.format(data, data_type)) from err
832
832
  else:
833
833
  return self._serialize(data, **kwargs)
834
834
 
@@ -1178,10 +1178,10 @@ class Serializer(object):
1178
1178
  return date + microseconds + "Z"
1179
1179
  except (ValueError, OverflowError) as err:
1180
1180
  msg = "Unable to serialize datetime object."
1181
- raise_with_traceback(SerializationError, msg, err)
1181
+ raise SerializationError(msg) from err
1182
1182
  except AttributeError as err:
1183
1183
  msg = "ISO-8601 object must be valid Datetime object."
1184
- raise_with_traceback(TypeError, msg, err)
1184
+ raise TypeError(msg) from err
1185
1185
 
1186
1186
  @staticmethod
1187
1187
  def serialize_unix(attr, **kwargs):
@@ -1489,7 +1489,7 @@ class Deserializer(object):
1489
1489
  d_attrs[attr] = value
1490
1490
  except (AttributeError, TypeError, KeyError) as err:
1491
1491
  msg = "Unable to deserialize to object: " + class_name # type: ignore
1492
- raise_with_traceback(DeserializationError, msg, err)
1492
+ raise DeserializationError(msg) from err
1493
1493
  else:
1494
1494
  additional_properties = self._build_additional_properties(attributes, data)
1495
1495
  return self._instantiate_model(response, d_attrs, additional_properties)
@@ -1660,7 +1660,7 @@ class Deserializer(object):
1660
1660
  except (ValueError, TypeError, AttributeError) as err:
1661
1661
  msg = "Unable to deserialize response data."
1662
1662
  msg += " Data: {}, {}".format(data, data_type)
1663
- raise_with_traceback(DeserializationError, msg, err)
1663
+ raise DeserializationError(msg) from err
1664
1664
  else:
1665
1665
  return self._deserialize(obj_type, data)
1666
1666
 
@@ -1816,7 +1816,6 @@ class Deserializer(object):
1816
1816
  data = data.value
1817
1817
  if isinstance(data, int):
1818
1818
  # Workaround. We might consider remove it in the future.
1819
- # https://github.com/Azure/azure-rest-api-specs/issues/141
1820
1819
  try:
1821
1820
  return list(enum_obj.__members__.values())[data]
1822
1821
  except IndexError:
@@ -1873,7 +1872,7 @@ class Deserializer(object):
1873
1872
  return decimal.Decimal(attr) # type: ignore
1874
1873
  except decimal.DecimalException as err:
1875
1874
  msg = "Invalid decimal {}".format(attr)
1876
- raise_with_traceback(DeserializationError, msg, err)
1875
+ raise DeserializationError(msg) from err
1877
1876
 
1878
1877
  @staticmethod
1879
1878
  def deserialize_long(attr):
@@ -1901,7 +1900,7 @@ class Deserializer(object):
1901
1900
  duration = isodate.parse_duration(attr)
1902
1901
  except (ValueError, OverflowError, AttributeError) as err:
1903
1902
  msg = "Cannot deserialize duration object."
1904
- raise_with_traceback(DeserializationError, msg, err)
1903
+ raise DeserializationError(msg) from err
1905
1904
  else:
1906
1905
  return duration
1907
1906
 
@@ -1953,7 +1952,7 @@ class Deserializer(object):
1953
1952
  date_obj = date_obj.astimezone(tz=TZ_UTC)
1954
1953
  except ValueError as err:
1955
1954
  msg = "Cannot deserialize to rfc datetime object."
1956
- raise_with_traceback(DeserializationError, msg, err)
1955
+ raise DeserializationError(msg) from err
1957
1956
  else:
1958
1957
  return date_obj
1959
1958
 
@@ -1990,7 +1989,7 @@ class Deserializer(object):
1990
1989
  raise OverflowError("Hit max or min date")
1991
1990
  except (ValueError, OverflowError, AttributeError) as err:
1992
1991
  msg = "Cannot deserialize datetime object."
1993
- raise_with_traceback(DeserializationError, msg, err)
1992
+ raise DeserializationError(msg) from err
1994
1993
  else:
1995
1994
  return date_obj
1996
1995
 
@@ -2009,6 +2008,6 @@ class Deserializer(object):
2009
2008
  date_obj = datetime.datetime.fromtimestamp(attr, TZ_UTC)
2010
2009
  except ValueError as err:
2011
2010
  msg = "Cannot deserialize to unix datetime object."
2012
- raise_with_traceback(DeserializationError, msg, err)
2011
+ raise DeserializationError(msg) from err
2013
2012
  else:
2014
2013
  return date_obj
@@ -41,7 +41,7 @@ def get_body_parameter(yaml_data: Dict[str, Any]) -> Dict[str, Any]:
41
41
  def get_azure_key_credential(key: str) -> Dict[str, Any]:
42
42
  retval = {
43
43
  "type": KEY_TYPE,
44
- "policy": {"type": "AzureKeyCredentialPolicy", "key": key},
44
+ "policy": {"type": "KeyCredentialPolicy", "key": key},
45
45
  }
46
46
  update_type(retval)
47
47
  return retval
@@ -11,7 +11,7 @@ from ..utils import convert_list_to_tuple
11
11
  class ImportType(str, Enum):
12
12
  STDLIB = "stdlib"
13
13
  THIRDPARTY = "thirdparty"
14
- AZURECORE = "azurecore"
14
+ SDKCORE = "sdkcore"
15
15
  LOCAL = "local"
16
16
  BYVERSION = "by_version"
17
17
 
@@ -149,7 +149,10 @@ class MultiAPISerializer(ReaderAndWriter): # pylint: disable=abstract-method
149
149
  )
150
150
  self.write_file(
151
151
  Path("_serialization.py"),
152
- codegen_env.get_template("serialization.py.jinja2").render(),
152
+ codegen_env.get_template("serialization.py.jinja2").render(
153
+ import_core_exceptions="azure.core.exceptions",
154
+ import_core_serialization="azure.core.serialization",
155
+ ),
153
156
  )
154
157
 
155
158
 
@@ -20,30 +20,6 @@ from .. import YamlUpdatePlugin, YamlUpdatePluginAutorest
20
20
  from .._utils import parse_args, get_body_type_for_description, JSON_REGEXP, KNOWN_TYPES
21
21
 
22
22
 
23
- def add_body_param_type(
24
- code_model: Dict[str, Any],
25
- body_parameter: Dict[str, Any],
26
- ):
27
- if (
28
- body_parameter
29
- and body_parameter["type"]["type"] in ("model", "dict", "list")
30
- and any(
31
- ct for ct in body_parameter.get("contentTypes", []) if JSON_REGEXP.match(ct)
32
- )
33
- and not body_parameter["type"].get("xmlMetadata")
34
- and not any(t for t in ["flattened", "groupedBy"] if body_parameter.get(t))
35
- ):
36
- origin_type = body_parameter["type"]["type"]
37
- is_dpg_model = body_parameter["type"].get("base") == "dpg"
38
- body_parameter["type"] = {
39
- "type": "combined",
40
- "types": [body_parameter["type"], KNOWN_TYPES["binary"]],
41
- }
42
- if origin_type == "model" and is_dpg_model:
43
- body_parameter["type"]["types"].insert(1, KNOWN_TYPES["any-object"])
44
- code_model["types"].append(body_parameter["type"])
45
-
46
-
47
23
  def update_overload_section(
48
24
  overload: Dict[str, Any],
49
25
  yaml_data: Dict[str, Any],
@@ -160,10 +136,6 @@ def update_operation_group_class_name(
160
136
 
161
137
  def update_paging_response(yaml_data: Dict[str, Any]) -> None:
162
138
  yaml_data["discriminator"] = "paging"
163
- yaml_data["pagerSync"] = yaml_data.get("pagerSync") or "azure.core.paging.ItemPaged"
164
- yaml_data["pagerAsync"] = (
165
- yaml_data.get("pagerAsync") or "azure.core.async_paging.AsyncItemPaged"
166
- )
167
139
 
168
140
 
169
141
  HEADERS_HIDE_IN_METHOD = (
@@ -184,7 +156,7 @@ HEADERS_CONVERT_IN_METHOD = {
184
156
  "wireName": "match-condition",
185
157
  "description": "The match condition to use upon the etag.",
186
158
  "type": {
187
- "type": "azurecore",
159
+ "type": "sdkcore",
188
160
  "name": "MatchConditions",
189
161
  },
190
162
  },
@@ -220,6 +192,32 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
220
192
  def is_cadl(self) -> bool:
221
193
  return self.options.get("cadl_file", False)
222
194
 
195
+ def add_body_param_type(
196
+ self,
197
+ code_model: Dict[str, Any],
198
+ body_parameter: Dict[str, Any],
199
+ ):
200
+ if (
201
+ body_parameter
202
+ and body_parameter["type"]["type"] in ("model", "dict", "list")
203
+ and any(
204
+ ct
205
+ for ct in body_parameter.get("contentTypes", [])
206
+ if JSON_REGEXP.match(ct)
207
+ )
208
+ and not body_parameter["type"].get("xmlMetadata")
209
+ and not any(t for t in ["flattened", "groupedBy"] if body_parameter.get(t))
210
+ ):
211
+ origin_type = body_parameter["type"]["type"]
212
+ is_dpg_model = body_parameter["type"].get("base") == "dpg"
213
+ body_parameter["type"] = {
214
+ "type": "combined",
215
+ "types": [body_parameter["type"], KNOWN_TYPES["binary"]],
216
+ }
217
+ if origin_type == "model" and is_dpg_model and self.models_mode == "dpg":
218
+ body_parameter["type"]["types"].insert(1, KNOWN_TYPES["any-object"])
219
+ code_model["types"].append(body_parameter["type"])
220
+
223
221
  def pad_reserved_words(self, name: str, pad_type: PadType):
224
222
  # we want to pad hidden variables as well
225
223
  if not name:
@@ -417,7 +415,7 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
417
415
  response["discriminator"] = "operation"
418
416
  if body_parameter and not is_overload:
419
417
  # if we have a JSON body, we add a binary overload
420
- add_body_param_type(code_model, body_parameter)
418
+ self.add_body_param_type(code_model, body_parameter)
421
419
  add_overloads_for_body_param(yaml_data)
422
420
 
423
421
  def _update_lro_operation_helper(self, yaml_data: Dict[str, Any]) -> None:
@@ -489,10 +487,6 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
489
487
  item_type: Optional[Dict[str, Any]] = None,
490
488
  ) -> None:
491
489
  self.update_operation(code_model, yaml_data, is_overload=is_overload)
492
- if not yaml_data.get("pagerSync"):
493
- yaml_data["pagerSync"] = "azure.core.paging.ItemPaged"
494
- if not yaml_data.get("pagerAsync"):
495
- yaml_data["pagerAsync"] = "azure.core.async_paging.AsyncItemPaged"
496
490
  item_type = item_type or yaml_data["itemType"]["elementType"]
497
491
  if yaml_data.get("nextOperation"):
498
492
  yaml_data["nextOperation"]["groupName"] = self.pad_reserved_words(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autorest/python",
3
- "version": "6.9.4",
3
+ "version": "6.9.6",
4
4
  "description": "The Python extension for generators in AutoRest.",
5
5
  "main": "index.js",
6
6
  "repository": {