@autorest/python 6.27.4 → 6.28.1

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 (120) hide show
  1. package/generator/build/lib/pygen/black.py +3 -3
  2. package/generator/build/lib/pygen/codegen/__init__.py +2 -0
  3. package/generator/build/lib/pygen/codegen/_utils.py +4 -0
  4. package/generator/build/lib/pygen/codegen/models/base.py +2 -3
  5. package/generator/build/lib/pygen/codegen/models/base_builder.py +5 -3
  6. package/generator/build/lib/pygen/codegen/models/client.py +28 -19
  7. package/generator/build/lib/pygen/codegen/models/code_model.py +204 -33
  8. package/generator/build/lib/pygen/codegen/models/combined_type.py +12 -8
  9. package/generator/build/lib/pygen/codegen/models/constant_type.py +2 -3
  10. package/generator/build/lib/pygen/codegen/models/credential_types.py +6 -3
  11. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +2 -3
  12. package/generator/build/lib/pygen/codegen/models/enum_type.py +47 -24
  13. package/generator/build/lib/pygen/codegen/models/imports.py +14 -12
  14. package/generator/build/lib/pygen/codegen/models/list_type.py +2 -3
  15. package/generator/build/lib/pygen/codegen/models/lro_operation.py +8 -4
  16. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
  17. package/generator/build/lib/pygen/codegen/models/model_type.py +34 -19
  18. package/generator/build/lib/pygen/codegen/models/operation.py +74 -31
  19. package/generator/build/lib/pygen/codegen/models/operation_group.py +82 -12
  20. package/generator/build/lib/pygen/codegen/models/paging_operation.py +10 -7
  21. package/generator/build/lib/pygen/codegen/models/parameter.py +10 -10
  22. package/generator/build/lib/pygen/codegen/models/parameter_list.py +7 -7
  23. package/generator/build/lib/pygen/codegen/models/primitive_types.py +23 -43
  24. package/generator/build/lib/pygen/codegen/models/property.py +9 -9
  25. package/generator/build/lib/pygen/codegen/models/request_builder.py +9 -15
  26. package/generator/build/lib/pygen/codegen/models/response.py +6 -8
  27. package/generator/build/lib/pygen/codegen/models/utils.py +11 -0
  28. package/generator/build/lib/pygen/codegen/serializers/__init__.py +228 -243
  29. package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +19 -1
  30. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +58 -36
  31. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +9 -5
  32. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +17 -3
  33. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +26 -14
  34. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +26 -8
  35. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +9 -4
  36. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +65 -24
  37. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +20 -16
  38. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -10
  39. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +10 -7
  40. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +10 -1
  41. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +7 -10
  42. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +24 -28
  43. package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +6 -1
  44. package/generator/build/lib/pygen/codegen/serializers/utils.py +1 -15
  45. package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +1 -1
  46. package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
  47. package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
  48. package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
  49. package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +1 -1
  50. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +4 -4
  51. package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +2 -0
  52. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
  53. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +2 -68
  54. package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +3 -3
  55. package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
  56. package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +4 -4
  57. package/generator/build/lib/pygen/preprocess/__init__.py +0 -4
  58. package/generator/component-detection-pip-report.json +2 -2
  59. package/generator/dev_requirements.txt +2 -2
  60. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  61. package/generator/pygen/black.py +3 -3
  62. package/generator/pygen/codegen/__init__.py +2 -0
  63. package/generator/pygen/codegen/_utils.py +4 -0
  64. package/generator/pygen/codegen/models/base.py +2 -3
  65. package/generator/pygen/codegen/models/base_builder.py +5 -3
  66. package/generator/pygen/codegen/models/client.py +28 -19
  67. package/generator/pygen/codegen/models/code_model.py +204 -33
  68. package/generator/pygen/codegen/models/combined_type.py +12 -8
  69. package/generator/pygen/codegen/models/constant_type.py +2 -3
  70. package/generator/pygen/codegen/models/credential_types.py +6 -3
  71. package/generator/pygen/codegen/models/dictionary_type.py +2 -3
  72. package/generator/pygen/codegen/models/enum_type.py +47 -24
  73. package/generator/pygen/codegen/models/imports.py +14 -12
  74. package/generator/pygen/codegen/models/list_type.py +2 -3
  75. package/generator/pygen/codegen/models/lro_operation.py +8 -4
  76. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  77. package/generator/pygen/codegen/models/model_type.py +34 -19
  78. package/generator/pygen/codegen/models/operation.py +74 -31
  79. package/generator/pygen/codegen/models/operation_group.py +82 -12
  80. package/generator/pygen/codegen/models/paging_operation.py +10 -7
  81. package/generator/pygen/codegen/models/parameter.py +10 -10
  82. package/generator/pygen/codegen/models/parameter_list.py +7 -7
  83. package/generator/pygen/codegen/models/primitive_types.py +23 -43
  84. package/generator/pygen/codegen/models/property.py +9 -9
  85. package/generator/pygen/codegen/models/request_builder.py +9 -15
  86. package/generator/pygen/codegen/models/response.py +6 -8
  87. package/generator/pygen/codegen/models/utils.py +11 -0
  88. package/generator/pygen/codegen/serializers/__init__.py +228 -243
  89. package/generator/pygen/codegen/serializers/base_serializer.py +19 -1
  90. package/generator/pygen/codegen/serializers/builder_serializer.py +58 -36
  91. package/generator/pygen/codegen/serializers/client_serializer.py +9 -5
  92. package/generator/pygen/codegen/serializers/enum_serializer.py +17 -3
  93. package/generator/pygen/codegen/serializers/general_serializer.py +26 -14
  94. package/generator/pygen/codegen/serializers/metadata_serializer.py +26 -8
  95. package/generator/pygen/codegen/serializers/model_init_serializer.py +9 -4
  96. package/generator/pygen/codegen/serializers/model_serializer.py +65 -24
  97. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +20 -16
  98. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -10
  99. package/generator/pygen/codegen/serializers/parameter_serializer.py +10 -7
  100. package/generator/pygen/codegen/serializers/request_builders_serializer.py +10 -1
  101. package/generator/pygen/codegen/serializers/sample_serializer.py +7 -10
  102. package/generator/pygen/codegen/serializers/test_serializer.py +24 -28
  103. package/generator/pygen/codegen/serializers/types_serializer.py +6 -1
  104. package/generator/pygen/codegen/serializers/utils.py +1 -15
  105. package/generator/pygen/codegen/templates/client_container.py.jinja2 +1 -1
  106. package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
  107. package/generator/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
  108. package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
  109. package/generator/pygen/codegen/templates/model_container.py.jinja2 +1 -1
  110. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +4 -4
  111. package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +2 -0
  112. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
  113. package/generator/pygen/codegen/templates/serialization.py.jinja2 +2 -68
  114. package/generator/pygen/codegen/templates/test.py.jinja2 +3 -3
  115. package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
  116. package/generator/pygen/codegen/templates/vendor.py.jinja2 +4 -4
  117. package/generator/pygen/preprocess/__init__.py +0 -4
  118. package/generator/pygen.egg-info/PKG-INFO +10 -1
  119. package/package.json +2 -2
  120. package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
@@ -7,6 +7,6 @@
7
7
  {{ imports }}
8
8
 
9
9
  {% for client in clients %}
10
- {% set serializer = get_serializer(client) %}
10
+ {% set serializer = get_serializer(client, serialize_namespace) %}
11
11
  {% include "client.py.jinja2" %}
12
12
  {% endfor %}
@@ -11,6 +11,6 @@ VERSION = "unknown"
11
11
  {% endif %}
12
12
 
13
13
  {% for client in clients %}
14
- {% set serializer = get_serializer(client) %}
14
+ {% set serializer = get_serializer(client, serialize_namespace) %}
15
15
  {% include "config.py.jinja2" %}
16
16
  {% endfor %}
@@ -5,6 +5,6 @@
5
5
  from enum import Enum
6
6
  from {{ code_model.core_library }}{{ "" if code_model.is_azure_flavor else ".utils" }} import CaseInsensitiveEnumMeta
7
7
 
8
- {% for enum in code_model.enums | sort %}
8
+ {% for enum in enums | sort %}
9
9
  {% include "enum.py.jinja2" %}
10
10
  {% endfor %}
@@ -8,7 +8,7 @@ from .{{ client.filename }} import {{ client.name }} # type: ignore
8
8
  {% endfor %}
9
9
  {% endif %}
10
10
  {% if not async_mode and code_model.options['package_version']%}
11
- from ._version import VERSION
11
+ from {{ code_model.get_relative_import_path(serialize_namespace, module_name="_version") }} import VERSION
12
12
 
13
13
  __version__ = VERSION
14
14
  {% endif %}
@@ -6,7 +6,7 @@
6
6
  {% endif %}
7
7
 
8
8
  {{ imports }}
9
- {% for model in code_model.model_types %}
9
+ {% for model in models %}
10
10
  {% if model.base == "dpg" %}
11
11
  {% include "model_dpg.py.jinja2" %}
12
12
  {% elif model.base == "msrest" %}
@@ -31,10 +31,10 @@ class {{ operation_group.class_name }}: {{ operation_group.pylint_disable() }}
31
31
  {% endif %}
32
32
  def __init__(self, *args, **kwargs){{ return_none_type_annotation }}:
33
33
  input_args = list(args)
34
- self._client = input_args.pop(0) if input_args else kwargs.pop("client")
35
- self._config = input_args.pop(0) if input_args else kwargs.pop("config")
36
- self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer")
37
- self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer")
34
+ self._client: {{ 'Async' if async_mode else ''}}PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client")
35
+ self._config: {{ operation_group.client.name }}Configuration = input_args.pop(0) if input_args else kwargs.pop("config")
36
+ self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer")
37
+ self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer")
38
38
  {% if code_model.options["multiapi"] %}
39
39
  self._api_version = input_args.pop(0) if input_args else kwargs.pop("api_version")
40
40
  {% endif %}
@@ -6,7 +6,9 @@
6
6
  {{ imports }}
7
7
  {{ unset }}
8
8
  {% if code_model.options["builders_visibility"] == "embedded" and not async_mode %}
9
+ {% if need_declare_serializer %}
9
10
  {{ op_tools.declare_serializer(code_model) }}
11
+ {% endif %}
10
12
  {% for operation_group in operation_groups %}
11
13
  {% for request_builder in get_request_builders(operation_group) %}
12
14
 
@@ -7,11 +7,9 @@
7
7
  {{ op_tools.serialize(operation_group_imports()) }}
8
8
  {{ keywords.patch_imports() }}
9
9
  __all__ = [
10
- {% for client in clients %}
11
- {% for operation_group in client.operation_groups %}
10
+ {% for operation_group in operation_groups %}
12
11
  '{{ operation_group.class_name }}',
13
- {% endfor %}
14
- {% endfor %}
12
+ {% endfor %}
15
13
  ]
16
14
  {{ keywords.extend_all }}
17
15
  _patch_sdk()
@@ -184,73 +184,7 @@ try:
184
184
  except NameError:
185
185
  _long_type = int
186
186
 
187
-
188
- class UTC(datetime.tzinfo):
189
- """Time Zone info for handling UTC"""
190
-
191
- def utcoffset(self, dt):
192
- """UTF offset for UTC is 0.
193
-
194
- :param datetime.datetime dt: The datetime
195
- :returns: The offset
196
- :rtype: datetime.timedelta
197
- """
198
- return datetime.timedelta(0)
199
-
200
- def tzname(self, dt):
201
- """Timestamp representation.
202
-
203
- :param datetime.datetime dt: The datetime
204
- :returns: The timestamp representation
205
- :rtype: str
206
- """
207
- return "Z"
208
-
209
- def dst(self, dt):
210
- """No daylight saving for UTC.
211
-
212
- :param datetime.datetime dt: The datetime
213
- :returns: The daylight saving time
214
- :rtype: datetime.timedelta
215
- """
216
- return datetime.timedelta(hours=1)
217
-
218
-
219
- try:
220
- from datetime import timezone as _FixedOffset # type: ignore
221
- except ImportError: # Python 2.7
222
-
223
- class _FixedOffset(datetime.tzinfo): # type: ignore
224
- """Fixed offset in minutes east from UTC.
225
- Copy/pasted from Python doc
226
- :param datetime.timedelta offset: offset in timedelta format
227
- """
228
-
229
- def __init__(self, offset) -> None:
230
- self.__offset = offset
231
-
232
- def utcoffset(self, dt):
233
- return self.__offset
234
-
235
- def tzname(self, dt):
236
- return str(self.__offset.total_seconds() / 3600)
237
-
238
- def __repr__(self):
239
- return "<FixedOffset {}>".format(self.tzname(None))
240
-
241
- def dst(self, dt):
242
- return datetime.timedelta(0)
243
-
244
- def __getinitargs__(self):
245
- return (self.__offset,)
246
-
247
-
248
- try:
249
- from datetime import timezone
250
-
251
- TZ_UTC = timezone.utc
252
- except ImportError:
253
- TZ_UTC = UTC() # type: ignore
187
+ TZ_UTC = datetime.timezone.utc
254
188
 
255
189
  _FLATTEN = re.compile(r"(?<!\\)\.")
256
190
 
@@ -2050,7 +1984,7 @@ class Deserializer:
2050
1984
  try:
2051
1985
  parsed_date = email.utils.parsedate_tz(attr) # type: ignore
2052
1986
  date_obj = datetime.datetime(
2053
- *parsed_date[:6], tzinfo=_FixedOffset(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60))
1987
+ *parsed_date[:6], tzinfo=datetime.timezone(datetime.timedelta(minutes=(parsed_date[9] or 0) / 60))
2054
1988
  )
2055
1989
  if not date_obj.tzinfo:
2056
1990
  date_obj = date_obj.astimezone(tz=TZ_UTC)
@@ -1,7 +1,7 @@
1
1
  {% set prefix_lower = test.prefix|lower %}
2
2
  {% set client_var = "self.client" if code_model.options["azure_arm"] else "client" %}
3
- {% set async = "async " if test.is_async else "" %}
4
- {% set async_suffix = "_async" if test.is_async else "" %}
3
+ {% set async = "async " if test.async_mode else "" %}
4
+ {% set async_suffix = "_async" if test.async_mode else "" %}
5
5
  # coding=utf-8
6
6
  {{ code_model.options['license_header'] }}
7
7
  import pytest
@@ -15,7 +15,7 @@ AZURE_LOCATION = "eastus"
15
15
  class {{ test.test_class_name }}({{ test.base_test_class_name }}):
16
16
  {% if code_model.options["azure_arm"] %}
17
17
  def setup_method(self, method):
18
- {% if test.is_async %}
18
+ {% if test.async_mode %}
19
19
  self.client = self.create_mgmt_client({{ test.client_name }}, is_async=True)
20
20
  {% else %}
21
21
  self.client = self.create_mgmt_client({{ test.client_name }})
@@ -3,7 +3,7 @@
3
3
  {{ imports }}
4
4
 
5
5
  {% for test_name in test_names %}
6
- {% set extra_async = ", is_async=True" if test_name.is_async else ""%}
6
+ {% set extra_async = ", is_async=True" if test_name.async_mode else ""%}
7
7
  {% set prefix_lower = test_name.prefix|lower %}
8
8
  class {{ test_name.base_test_class_name }}(AzureRecordedTestCase):
9
9
 
@@ -15,7 +15,7 @@ class {{ test_name.base_test_class_name }}(AzureRecordedTestCase):
15
15
  endpoint=endpoint,
16
16
  )
17
17
 
18
- {% if not test_name.is_async %}
18
+ {% if not test_name.async_mode %}
19
19
  {{ test_name.preparer_name }} = functools.partial(
20
20
  PowerShellPreparer,
21
21
  "{{ prefix_lower }}",
@@ -3,7 +3,7 @@
3
3
 
4
4
  {{ imports }}
5
5
 
6
- {% if code_model.need_mixin_abc %}
6
+ {% if code_model.need_vendored_mixin(client_namespace) %}
7
7
  {% for client in clients | selectattr("has_mixin") %}
8
8
  {% set pylint_disable = "# pylint: disable=name-too-long" if (client.name | length) + ("MixinABC" | length) > 40 else "" %}
9
9
  class {{ client.name }}MixinABC( {{ pylint_disable }}
@@ -16,7 +16,7 @@ class {{ client.name }}MixinABC( {{ pylint_disable }}
16
16
  _deserialize: "Deserializer"
17
17
  {% endfor %}
18
18
  {% endif %}
19
- {% if code_model.has_abstract_operations %}
19
+ {% if code_model.need_vendored_abstract(client_namespace) %}
20
20
 
21
21
  def raise_if_not_implemented(cls, abstract_methods):
22
22
  not_implemented = [f for f in abstract_methods if not callable(getattr(cls, f, None))]
@@ -27,7 +27,7 @@ def raise_if_not_implemented(cls, abstract_methods):
27
27
  )
28
28
  {% endif %}
29
29
 
30
- {% if code_model.has_etag %}
30
+ {% if code_model.need_vendored_etag(client_namespace) %}
31
31
  def quote_etag(etag: Optional[str]) -> Optional[str]:
32
32
  if not etag or etag == "*":
33
33
  return etag
@@ -57,7 +57,7 @@ def prep_if_none_match(etag: Optional[str], match_condition: Optional[MatchCondi
57
57
  return "*"
58
58
  return None
59
59
  {% endif %}
60
- {% if code_model.has_form_data and code_model.options["models_mode"] == "dpg" and not async_mode %}
60
+ {% if code_model.need_vendored_form_data(async_mode, client_namespace) %}
61
61
  # file-like tuple could be `(filename, IO (or bytes))` or `(filename, IO (or bytes), content_type)`
62
62
  FileContent = Union[str, bytes, IO[str], IO[bytes]]
63
63
 
@@ -501,10 +501,6 @@ class PreProcessPlugin(YamlUpdatePlugin):
501
501
  for client in yaml_data["clients"]:
502
502
  self.update_client(client)
503
503
  self.update_operation_groups(yaml_data, client)
504
- for clients in yaml_data["subnamespaceToClients"].values():
505
- for client in clients:
506
- self.update_client(client)
507
- self.update_operation_groups(yaml_data, client)
508
504
  if yaml_data.get("namespace"):
509
505
  yaml_data["namespace"] = pad_builtin_namespaces(yaml_data["namespace"])
510
506
 
@@ -1,4 +1,4 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pygen
3
3
  Version: 0.1.0
4
4
  Summary: Core Library for Python Generation
@@ -24,5 +24,14 @@ Requires-Dist: m2r2==0.3.3.post2
24
24
  Requires-Dist: PyYAML==6.0.1
25
25
  Requires-Dist: tomli==2.0.1
26
26
  Requires-Dist: setuptools==69.5.1
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: license
34
+ Dynamic: requires-dist
35
+ Dynamic: summary
27
36
 
28
37
  # Core Library for Python Generation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autorest/python",
3
- "version": "6.27.4",
3
+ "version": "6.28.1",
4
4
  "description": "The Python extension for generators in AutoRest.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "homepage": "https://github.com/Azure/autorest.python/blob/main/README.md",
21
21
  "dependencies": {
22
- "@typespec/http-client-python": "~0.5.1",
22
+ "@typespec/http-client-python": "~0.6.5",
23
23
  "@autorest/system-requirements": "~1.0.2",
24
24
  "fs-extra": "~11.2.0",
25
25
  "tsx": "~4.19.1"