@autorest/python 6.14.3 → 6.16.0

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 (132) hide show
  1. package/autorest/__init__.py +2 -93
  2. package/autorest/black.py +13 -0
  3. package/autorest/codegen.py +117 -0
  4. package/autorest/m2r.py +16 -0
  5. package/autorest/m4reformatter/__init__.py +1 -1
  6. package/autorest/multiapi/__init__.py +2 -1
  7. package/autorest/multiapi/serializers/__init__.py +5 -3
  8. package/autorest/multiclient/__init__.py +2 -1
  9. package/autorest/postprocess.py +14 -0
  10. package/autorest/preprocess.py +20 -0
  11. package/generator/LICENSE +21 -0
  12. package/generator/README.md +1 -0
  13. package/generator/dev_requirements.txt +5 -0
  14. package/generator/pygen/__init__.py +107 -0
  15. package/generator/pygen/_version.py +7 -0
  16. package/{autorest/black/__init__.py → generator/pygen/black.py} +2 -7
  17. package/{autorest → generator/pygen}/codegen/__init__.py +7 -83
  18. package/{autorest → generator/pygen}/codegen/models/client.py +2 -1
  19. package/{autorest → generator/pygen}/codegen/models/combined_type.py +1 -1
  20. package/{autorest → generator/pygen}/codegen/models/model_type.py +1 -1
  21. package/{autorest → generator/pygen}/codegen/models/operation.py +2 -0
  22. package/{autorest → generator/pygen}/codegen/models/operation_group.py +1 -1
  23. package/{autorest → generator/pygen}/codegen/serializers/__init__.py +16 -30
  24. package/{autorest → generator/pygen}/codegen/serializers/builder_serializer.py +37 -18
  25. package/{autorest → generator/pygen}/codegen/serializers/client_serializer.py +1 -1
  26. package/{autorest → generator/pygen}/codegen/serializers/operations_init_serializer.py +1 -1
  27. package/{autorest → generator/pygen}/codegen/serializers/parameter_serializer.py +1 -1
  28. package/{autorest → generator/pygen}/codegen/serializers/sample_serializer.py +2 -2
  29. package/{autorest → generator/pygen}/codegen/serializers/test_serializer.py +48 -24
  30. package/{autorest → generator/pygen}/codegen/templates/conftest.py.jinja2 +1 -1
  31. package/{autorest → generator/pygen}/codegen/templates/request_builder.py.jinja2 +2 -2
  32. package/generator/pygen/codegen/templates/test.py.jinja2 +50 -0
  33. package/{autorest/m2r/__init__.py → generator/pygen/m2r.py} +5 -10
  34. package/{autorest → generator/pygen}/postprocess/__init__.py +1 -6
  35. package/{autorest → generator/pygen}/preprocess/__init__.py +12 -16
  36. package/{autorest → generator/pygen}/preprocess/python_mappings.py +6 -4
  37. package/{autorest/_utils.py → generator/pygen/utils.py} +4 -0
  38. package/generator/pygen.egg-info/PKG-INFO +25 -0
  39. package/generator/pygen.egg-info/SOURCES.txt +66 -0
  40. package/generator/pygen.egg-info/dependency_links.txt +1 -0
  41. package/generator/pygen.egg-info/requires.txt +4 -0
  42. package/generator/pygen.egg-info/top_level.txt +1 -0
  43. package/generator/requirements.txt +12 -0
  44. package/generator/setup.py +55 -0
  45. package/package.json +11 -12
  46. package/requirements.txt +1 -1
  47. package/scripts/__pycache__/venvtools.cpython-38.pyc +0 -0
  48. package/scripts/copy-generator.js +19 -0
  49. package/{install.py → scripts/install.py} +3 -5
  50. package/{prepare.py → scripts/prepare.py} +7 -4
  51. package/{start.py → scripts/start.py} +1 -1
  52. package/{venvtools.py → scripts/venvtools.py} +1 -1
  53. package/autorest/codegen/templates/test.py.jinja2 +0 -26
  54. package/run_cadl.py +0 -40
  55. /package/{autorest → generator/pygen}/codegen/_utils.py +0 -0
  56. /package/{autorest → generator/pygen}/codegen/models/__init__.py +0 -0
  57. /package/{autorest → generator/pygen}/codegen/models/base.py +0 -0
  58. /package/{autorest → generator/pygen}/codegen/models/base_builder.py +0 -0
  59. /package/{autorest → generator/pygen}/codegen/models/code_model.py +0 -0
  60. /package/{autorest → generator/pygen}/codegen/models/constant_type.py +0 -0
  61. /package/{autorest → generator/pygen}/codegen/models/credential_types.py +0 -0
  62. /package/{autorest → generator/pygen}/codegen/models/dictionary_type.py +0 -0
  63. /package/{autorest → generator/pygen}/codegen/models/enum_type.py +0 -0
  64. /package/{autorest → generator/pygen}/codegen/models/imports.py +0 -0
  65. /package/{autorest → generator/pygen}/codegen/models/list_type.py +0 -0
  66. /package/{autorest → generator/pygen}/codegen/models/lro_operation.py +0 -0
  67. /package/{autorest → generator/pygen}/codegen/models/lro_paging_operation.py +0 -0
  68. /package/{autorest → generator/pygen}/codegen/models/paging_operation.py +0 -0
  69. /package/{autorest → generator/pygen}/codegen/models/parameter.py +0 -0
  70. /package/{autorest → generator/pygen}/codegen/models/parameter_list.py +0 -0
  71. /package/{autorest → generator/pygen}/codegen/models/primitive_types.py +0 -0
  72. /package/{autorest → generator/pygen}/codegen/models/property.py +0 -0
  73. /package/{autorest → generator/pygen}/codegen/models/request_builder.py +0 -0
  74. /package/{autorest → generator/pygen}/codegen/models/request_builder_parameter.py +0 -0
  75. /package/{autorest → generator/pygen}/codegen/models/response.py +0 -0
  76. /package/{autorest → generator/pygen}/codegen/models/utils.py +0 -0
  77. /package/{autorest → generator/pygen}/codegen/serializers/base_serializer.py +0 -0
  78. /package/{autorest → generator/pygen}/codegen/serializers/enum_serializer.py +0 -0
  79. /package/{autorest → generator/pygen}/codegen/serializers/general_serializer.py +0 -0
  80. /package/{autorest → generator/pygen}/codegen/serializers/import_serializer.py +0 -0
  81. /package/{autorest → generator/pygen}/codegen/serializers/metadata_serializer.py +0 -0
  82. /package/{autorest → generator/pygen}/codegen/serializers/model_init_serializer.py +0 -0
  83. /package/{autorest → generator/pygen}/codegen/serializers/model_serializer.py +0 -0
  84. /package/{autorest → generator/pygen}/codegen/serializers/operation_groups_serializer.py +0 -0
  85. /package/{autorest → generator/pygen}/codegen/serializers/patch_serializer.py +0 -0
  86. /package/{autorest → generator/pygen}/codegen/serializers/request_builders_serializer.py +0 -0
  87. /package/{autorest → generator/pygen}/codegen/serializers/types_serializer.py +0 -0
  88. /package/{autorest → generator/pygen}/codegen/serializers/utils.py +0 -0
  89. /package/{autorest → generator/pygen}/codegen/templates/client.py.jinja2 +0 -0
  90. /package/{autorest → generator/pygen}/codegen/templates/client_container.py.jinja2 +0 -0
  91. /package/{autorest → generator/pygen}/codegen/templates/config.py.jinja2 +0 -0
  92. /package/{autorest → generator/pygen}/codegen/templates/config_container.py.jinja2 +0 -0
  93. /package/{autorest → generator/pygen}/codegen/templates/enum.py.jinja2 +0 -0
  94. /package/{autorest → generator/pygen}/codegen/templates/enum_container.py.jinja2 +0 -0
  95. /package/{autorest → generator/pygen}/codegen/templates/init.py.jinja2 +0 -0
  96. /package/{autorest → generator/pygen}/codegen/templates/keywords.jinja2 +0 -0
  97. /package/{autorest → generator/pygen}/codegen/templates/lro_operation.py.jinja2 +0 -0
  98. /package/{autorest → generator/pygen}/codegen/templates/lro_paging_operation.py.jinja2 +0 -0
  99. /package/{autorest → generator/pygen}/codegen/templates/macros.jinja2 +0 -0
  100. /package/{autorest → generator/pygen}/codegen/templates/metadata.json.jinja2 +0 -0
  101. /package/{autorest → generator/pygen}/codegen/templates/model_base.py.jinja2 +0 -0
  102. /package/{autorest → generator/pygen}/codegen/templates/model_container.py.jinja2 +0 -0
  103. /package/{autorest → generator/pygen}/codegen/templates/model_dpg.py.jinja2 +0 -0
  104. /package/{autorest → generator/pygen}/codegen/templates/model_init.py.jinja2 +0 -0
  105. /package/{autorest → generator/pygen}/codegen/templates/model_msrest.py.jinja2 +0 -0
  106. /package/{autorest → generator/pygen}/codegen/templates/operation.py.jinja2 +0 -0
  107. /package/{autorest → generator/pygen}/codegen/templates/operation_group.py.jinja2 +0 -0
  108. /package/{autorest → generator/pygen}/codegen/templates/operation_groups_container.py.jinja2 +0 -0
  109. /package/{autorest → generator/pygen}/codegen/templates/operation_tools.jinja2 +0 -0
  110. /package/{autorest → generator/pygen}/codegen/templates/operations_folder_init.py.jinja2 +0 -0
  111. /package/{autorest → generator/pygen}/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +0 -0
  112. /package/{autorest → generator/pygen}/codegen/templates/packaging_templates/LICENSE.jinja2 +0 -0
  113. /package/{autorest → generator/pygen}/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +0 -0
  114. /package/{autorest → generator/pygen}/codegen/templates/packaging_templates/README.md.jinja2 +0 -0
  115. /package/{autorest → generator/pygen}/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +0 -0
  116. /package/{autorest → generator/pygen}/codegen/templates/packaging_templates/setup.py.jinja2 +0 -0
  117. /package/{autorest → generator/pygen}/codegen/templates/paging_operation.py.jinja2 +0 -0
  118. /package/{autorest → generator/pygen}/codegen/templates/patch.py.jinja2 +0 -0
  119. /package/{autorest → generator/pygen}/codegen/templates/pkgutil_init.py.jinja2 +0 -0
  120. /package/{autorest → generator/pygen}/codegen/templates/request_builders.py.jinja2 +0 -0
  121. /package/{autorest → generator/pygen}/codegen/templates/rest_init.py.jinja2 +0 -0
  122. /package/{autorest → generator/pygen}/codegen/templates/sample.py.jinja2 +0 -0
  123. /package/{autorest → generator/pygen}/codegen/templates/serialization.py.jinja2 +0 -0
  124. /package/{autorest → generator/pygen}/codegen/templates/testpreparer.py.jinja2 +0 -0
  125. /package/{autorest → generator/pygen}/codegen/templates/types.py.jinja2 +0 -0
  126. /package/{autorest → generator/pygen}/codegen/templates/validation.py.jinja2 +0 -0
  127. /package/{autorest → generator/pygen}/codegen/templates/vendor.py.jinja2 +0 -0
  128. /package/{autorest → generator/pygen}/codegen/templates/version.py.jinja2 +0 -0
  129. /package/{autorest → generator/pygen}/postprocess/get_all.py +0 -0
  130. /package/{autorest → generator/pygen}/postprocess/venvtools.py +0 -0
  131. /package/{autorest → generator/pygen}/preprocess/helpers.py +0 -0
  132. /package/{run-python3.js → scripts/run-python3.js} +0 -0
@@ -8,7 +8,7 @@
8
8
  import copy
9
9
  from typing import Callable, Dict, Any, List, Optional
10
10
 
11
- from .._utils import to_snake_case
11
+ from ..utils import to_snake_case, extract_original_name
12
12
  from .helpers import (
13
13
  add_redefined_builtin_info,
14
14
  pad_builtin_namespaces,
@@ -16,8 +16,8 @@ from .helpers import (
16
16
  )
17
17
  from .python_mappings import CADL_RESERVED_WORDS, RESERVED_WORDS, PadType
18
18
 
19
- from .. import YamlUpdatePlugin, YamlUpdatePluginAutorest
20
- from .._utils import parse_args, get_body_type_for_description, JSON_REGEXP, KNOWN_TYPES, update_enum_value
19
+ from .. import YamlUpdatePlugin
20
+ from ..utils import parse_args, get_body_type_for_description, JSON_REGEXP, KNOWN_TYPES, update_enum_value
21
21
 
22
22
 
23
23
  def update_overload_section(
@@ -235,7 +235,8 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
235
235
  property["clientName"] = self.pad_reserved_words(property["clientName"].lower(), PadType.PROPERTY)
236
236
  add_redefined_builtin_info(property["clientName"], property)
237
237
  if type.get("name"):
238
- name = self.pad_reserved_words(type["name"], PadType.MODEL)
238
+ pad_type = PadType.MODEL if type["type"] == "model" else PadType.ENUM_CLASS
239
+ name = self.pad_reserved_words(type["name"], pad_type)
239
240
  type["name"] = name[0].upper() + name[1:]
240
241
  type["description"] = update_description(type.get("description", ""), type["name"])
241
242
  type["snakeCaseName"] = to_snake_case(type["name"])
@@ -243,7 +244,7 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
243
244
  # we're enums
244
245
  values_to_add = []
245
246
  for value in type["values"]:
246
- padded_name = self.pad_reserved_words(value["name"].lower(), PadType.ENUM).upper()
247
+ padded_name = self.pad_reserved_words(value["name"].lower(), PadType.ENUM_VALUE).upper()
247
248
  if self.version_tolerant:
248
249
  if padded_name[0] in "0123456789":
249
250
  padded_name = "ENUM_" + padded_name
@@ -362,7 +363,12 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
362
363
  yaml_data["groupName"] = self.pad_reserved_words(yaml_data["groupName"], PadType.OPERATION_GROUP)
363
364
  yaml_data["groupName"] = to_snake_case(yaml_data["groupName"])
364
365
  yaml_data["name"] = yaml_data["name"].lower()
365
- yaml_data["name"] = self.pad_reserved_words(yaml_data["name"], PadType.METHOD)
366
+ if yaml_data.get("isLroInitialOperation") is True:
367
+ yaml_data["name"] = (
368
+ "_" + self.pad_reserved_words(extract_original_name(yaml_data["name"]), PadType.METHOD) + "_initial"
369
+ )
370
+ else:
371
+ yaml_data["name"] = self.pad_reserved_words(yaml_data["name"], PadType.METHOD)
366
372
  yaml_data["description"] = update_description(yaml_data["description"], yaml_data["name"])
367
373
  yaml_data["summary"] = update_description(yaml_data.get("summary", ""))
368
374
  body_parameter = yaml_data.get("bodyParameter")
@@ -497,16 +503,6 @@ class PreProcessPlugin(YamlUpdatePlugin): # pylint: disable=abstract-method
497
503
  yaml_data["namespace"] = pad_builtin_namespaces(yaml_data["namespace"])
498
504
 
499
505
 
500
- class PreProcessPluginAutorest(YamlUpdatePluginAutorest, PreProcessPlugin):
501
- def get_options(self) -> Dict[str, Any]:
502
- options = {
503
- "version-tolerant": self._autorestapi.get_boolean_value("version-tolerant"),
504
- "azure-arm": self._autorestapi.get_boolean_value("azure-arm"),
505
- "models-mode": self._autorestapi.get_value("models-mode"),
506
- }
507
- return {k: v for k, v in options.items() if v is not None}
508
-
509
-
510
506
  if __name__ == "__main__":
511
507
  # CADL pipeline will call this
512
508
  args, unknown_args = parse_args()
@@ -53,9 +53,10 @@ basic_latin_chars = {
53
53
 
54
54
  class PadType(str, Enum):
55
55
  MODEL = "Model"
56
+ ENUM_CLASS = "Enum"
56
57
  METHOD = "_method"
57
58
  PARAMETER = "_parameter"
58
- ENUM = "_enum"
59
+ ENUM_VALUE = "_enum"
59
60
  PROPERTY = "_property"
60
61
  OPERATION_GROUP = "Operations"
61
62
 
@@ -112,7 +113,7 @@ RESERVED_WORDS = {
112
113
  PadType.METHOD: [*_always_reserved],
113
114
  PadType.PARAMETER: [
114
115
  "self",
115
- # these are kwargs we've reserved for our autorest generated operations
116
+ # these are kwargs we've reserved for our generated operations
116
117
  "content_type",
117
118
  "accept",
118
119
  "cls",
@@ -175,9 +176,10 @@ RESERVED_WORDS = {
175
176
  "retry_on_status_codes",
176
177
  *_always_reserved,
177
178
  ],
178
- PadType.MODEL: [*_always_reserved],
179
+ PadType.MODEL: ["enum", *_always_reserved],
179
180
  PadType.PROPERTY: ["self", *_always_reserved],
180
- PadType.ENUM: ["mro", *_always_reserved],
181
+ PadType.ENUM_CLASS: ["enum", *_always_reserved],
182
+ PadType.ENUM_VALUE: ["mro", *_always_reserved],
181
183
  PadType.OPERATION_GROUP: [*_always_reserved],
182
184
  }
183
185
 
@@ -147,3 +147,7 @@ def build_policies(
147
147
  "self._config.logging_policy",
148
148
  ]
149
149
  return [p for p in policies if p]
150
+
151
+
152
+ def extract_original_name(name: str) -> str:
153
+ return name[1 : -len("_initial")]
@@ -0,0 +1,25 @@
1
+ Metadata-Version: 2.1
2
+ Name: pygen
3
+ Version: 0.1.0
4
+ Summary: Core Library for Python Generation
5
+ Home-page: https://github.com/Azure/autorest.python/packages/core
6
+ Author: Microsoft Corporation
7
+ Author-email: azpysdkhelp@microsoft.com
8
+ License: MIT License
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Programming Language :: Python
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.8
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: Jinja2>=2.11
21
+ Requires-Dist: pyyaml
22
+ Requires-Dist: m2r2
23
+ Requires-Dist: black
24
+
25
+ # Core Library for Python Generation
@@ -0,0 +1,66 @@
1
+ LICENSE
2
+ README.md
3
+ setup.py
4
+ pygen/__init__.py
5
+ pygen/_version.py
6
+ pygen/black.py
7
+ pygen/m2r.py
8
+ pygen/utils.py
9
+ pygen.egg-info/PKG-INFO
10
+ pygen.egg-info/SOURCES.txt
11
+ pygen.egg-info/dependency_links.txt
12
+ pygen.egg-info/requires.txt
13
+ pygen.egg-info/top_level.txt
14
+ pygen/codegen/__init__.py
15
+ pygen/codegen/_utils.py
16
+ pygen/codegen/models/__init__.py
17
+ pygen/codegen/models/base.py
18
+ pygen/codegen/models/base_builder.py
19
+ pygen/codegen/models/client.py
20
+ pygen/codegen/models/code_model.py
21
+ pygen/codegen/models/combined_type.py
22
+ pygen/codegen/models/constant_type.py
23
+ pygen/codegen/models/credential_types.py
24
+ pygen/codegen/models/dictionary_type.py
25
+ pygen/codegen/models/enum_type.py
26
+ pygen/codegen/models/imports.py
27
+ pygen/codegen/models/list_type.py
28
+ pygen/codegen/models/lro_operation.py
29
+ pygen/codegen/models/lro_paging_operation.py
30
+ pygen/codegen/models/model_type.py
31
+ pygen/codegen/models/operation.py
32
+ pygen/codegen/models/operation_group.py
33
+ pygen/codegen/models/paging_operation.py
34
+ pygen/codegen/models/parameter.py
35
+ pygen/codegen/models/parameter_list.py
36
+ pygen/codegen/models/primitive_types.py
37
+ pygen/codegen/models/property.py
38
+ pygen/codegen/models/request_builder.py
39
+ pygen/codegen/models/request_builder_parameter.py
40
+ pygen/codegen/models/response.py
41
+ pygen/codegen/models/utils.py
42
+ pygen/codegen/serializers/__init__.py
43
+ pygen/codegen/serializers/base_serializer.py
44
+ pygen/codegen/serializers/builder_serializer.py
45
+ pygen/codegen/serializers/client_serializer.py
46
+ pygen/codegen/serializers/enum_serializer.py
47
+ pygen/codegen/serializers/general_serializer.py
48
+ pygen/codegen/serializers/import_serializer.py
49
+ pygen/codegen/serializers/metadata_serializer.py
50
+ pygen/codegen/serializers/model_init_serializer.py
51
+ pygen/codegen/serializers/model_serializer.py
52
+ pygen/codegen/serializers/operation_groups_serializer.py
53
+ pygen/codegen/serializers/operations_init_serializer.py
54
+ pygen/codegen/serializers/parameter_serializer.py
55
+ pygen/codegen/serializers/patch_serializer.py
56
+ pygen/codegen/serializers/request_builders_serializer.py
57
+ pygen/codegen/serializers/sample_serializer.py
58
+ pygen/codegen/serializers/test_serializer.py
59
+ pygen/codegen/serializers/types_serializer.py
60
+ pygen/codegen/serializers/utils.py
61
+ pygen/postprocess/__init__.py
62
+ pygen/postprocess/get_all.py
63
+ pygen/postprocess/venvtools.py
64
+ pygen/preprocess/__init__.py
65
+ pygen/preprocess/helpers.py
66
+ pygen/preprocess/python_mappings.py
@@ -0,0 +1,4 @@
1
+ Jinja2>=2.11
2
+ pyyaml
3
+ m2r2
4
+ black
@@ -0,0 +1 @@
1
+ pygen
@@ -0,0 +1,12 @@
1
+ black==24.4.0
2
+ click==8.1.3
3
+ docutils==0.19
4
+ Jinja2==3.1.4
5
+ m2r2==0.3.3
6
+ MarkupSafe==2.1.2
7
+ mistune==0.8.4
8
+ pathspec==0.11.1
9
+ platformdirs==3.2.0
10
+ PyYAML==6.0.1
11
+ tomli==2.0.1
12
+ setuptools==69.2.0
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env python
2
+
3
+ # -------------------------------------------------------------------------
4
+ # Copyright (c) Microsoft Corporation. All rights reserved.
5
+ # Licensed under the MIT License. See License.txt in the project root for
6
+ # license information.
7
+ # --------------------------------------------------------------------------
8
+
9
+
10
+ import os
11
+ import re
12
+
13
+ from setuptools import setup, find_packages
14
+
15
+
16
+ # Version extraction inspired from 'requests'
17
+ with open(os.path.join("pygen", "_version.py"), "r") as fd:
18
+ version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1)
19
+
20
+ if not version:
21
+ raise RuntimeError("Cannot find version information")
22
+
23
+ setup(
24
+ name="pygen",
25
+ version=version,
26
+ description="Core Library for Python Generation",
27
+ long_description=open("README.md", "r").read(),
28
+ long_description_content_type="text/markdown",
29
+ license="MIT License",
30
+ author="Microsoft Corporation",
31
+ author_email="azpysdkhelp@microsoft.com",
32
+ url="https://github.com/Azure/autorest.python/packages/core",
33
+ classifiers=[
34
+ "Development Status :: 4 - Beta",
35
+ "Programming Language :: Python",
36
+ "Programming Language :: Python :: 3",
37
+ "Programming Language :: Python :: 3.8",
38
+ "Programming Language :: Python :: 3.9",
39
+ "Programming Language :: Python :: 3.10",
40
+ "Programming Language :: Python :: 3.11",
41
+ "Programming Language :: Python :: 3.12",
42
+ "License :: OSI Approved :: MIT License",
43
+ ],
44
+ packages=find_packages(
45
+ exclude=[
46
+ "test",
47
+ ]
48
+ ),
49
+ install_requires=[
50
+ "Jinja2 >= 2.11", # I need "include" and auto-context + blank line are not indented by default
51
+ "pyyaml",
52
+ "m2r2",
53
+ "black",
54
+ ],
55
+ )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autorest/python",
3
- "version": "6.14.3",
3
+ "version": "6.16.0",
4
4
  "description": "The Python extension for generators in AutoRest.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -19,27 +19,26 @@
19
19
  },
20
20
  "homepage": "https://github.com/Azure/autorest.python/blob/main/README.md",
21
21
  "dependencies": {
22
- "@autorest/system-requirements": "~1.0.2"
22
+ "@autorest/system-requirements": "~1.0.2",
23
+ "fs-extra": "~11.2.0"
23
24
  },
24
25
  "devDependencies": {
25
26
  "@microsoft.azure/autorest.testserver": "^3.3.46",
26
- "typescript": "~5.1.3"
27
+ "typescript": "~5.1.3",
28
+ "@azure-tools/typespec-python": "^0.26.0"
27
29
  },
28
30
  "files": [
29
31
  "autorest/**/*.py",
30
32
  "autorest/**/*.jinja2",
33
+ "scripts/",
31
34
  "setup.py",
32
- "install.py",
33
- "prepare.py",
34
- "start.py",
35
- "venvtools.py",
36
- "run-python3.js",
37
35
  "requirements.txt",
38
- "run_cadl.py"
36
+ "generator/"
39
37
  ],
40
38
  "scripts": {
41
- "start": "node run-python3.js start.py",
42
- "install": "node run-python3.js install.py",
43
- "debug": "node run-python3.js start.py --debug"
39
+ "start": "node ./scripts/run-python3.js ./scripts/start.py",
40
+ "build": "node ./scripts/copy-generator.js --force",
41
+ "install": "node ./scripts/copy-generator.js && node ./scripts/run-python3.js ./scripts/install.py",
42
+ "debug": "node ./scripts/run-python3.js ./scripts/start.py --debug"
44
43
  }
45
44
  }
package/requirements.txt CHANGED
@@ -2,7 +2,6 @@ black==24.4.0
2
2
  click==8.1.3
3
3
  docutils==0.19
4
4
  Jinja2==3.1.4
5
- json-rpc==1.14.0
6
5
  m2r2==0.3.3
7
6
  MarkupSafe==2.1.2
8
7
  mistune==0.8.4
@@ -11,3 +10,4 @@ platformdirs==3.2.0
11
10
  PyYAML==6.0.1
12
11
  tomli==2.0.1
13
12
  setuptools==69.2.0
13
+ json-rpc==1.14.0
@@ -0,0 +1,19 @@
1
+ const fs = require("fs-extra");
2
+ const path = require("path");
3
+
4
+ const force = process.argv[2] === "--force" ? true : false;
5
+
6
+ const typespecModulePath = path.join(__dirname, "..", "node_modules", "@azure-tools", "typespec-python");
7
+
8
+ // Define the source and destination directories
9
+ const sourceDir = path.join(typespecModulePath, "generator");
10
+ const destDir = path.join(__dirname, "..", "generator");
11
+
12
+ // Delete the destination directory if it exists
13
+ if (fs.existsSync(destDir)) {
14
+ if (force) fs.removeSync(destDir);
15
+ else process.exit(0);
16
+ }
17
+
18
+ // Copy the source directory to the destination directory
19
+ fs.copySync(sourceDir, destDir);
@@ -23,17 +23,15 @@ except ImportError:
23
23
 
24
24
  # Now we have pip and Py >= 3.8, go to work
25
25
 
26
- import subprocess
27
26
  from pathlib import Path
28
27
 
29
28
  from venvtools import ExtendedEnvBuilder, python_run
30
29
 
31
- _ROOT_DIR = Path(__file__).parent
30
+ _ROOT_DIR = Path(__file__).parent.parent
32
31
 
33
32
 
34
33
  def main():
35
34
  venv_path = _ROOT_DIR / "venv"
36
-
37
35
  if venv_path.exists():
38
36
  env_builder = venv.EnvBuilder(with_pip=True)
39
37
  venv_context = env_builder.ensure_directories(venv_path)
@@ -43,8 +41,8 @@ def main():
43
41
  venv_context = env_builder.context
44
42
 
45
43
  python_run(venv_context, "pip", ["install", "-U", "pip"])
46
- python_run(venv_context, "pip", ["install", "-r", "requirements.txt"])
47
- python_run(venv_context, "pip", ["install", "-e", str(_ROOT_DIR)])
44
+ python_run(venv_context, "pip", ["install", "-r", f"{_ROOT_DIR}/requirements.txt"])
45
+ python_run(venv_context, "pip", ["install", "-e", f"{_ROOT_DIR}/generator"])
48
46
 
49
47
 
50
48
  if __name__ == "__main__":
@@ -6,6 +6,8 @@
6
6
  # license information.
7
7
  # --------------------------------------------------------------------------
8
8
  import sys
9
+ import os
10
+ import argparse
9
11
 
10
12
  if not sys.version_info >= (3, 8, 0):
11
13
  raise Exception("Autorest for Python extension requires Python 3.8 at least")
@@ -15,7 +17,7 @@ import venv
15
17
 
16
18
  from venvtools import python_run
17
19
 
18
- _ROOT_DIR = Path(__file__).parent
20
+ _ROOT_DIR = Path(__file__).parent.parent
19
21
 
20
22
 
21
23
  def main():
@@ -26,9 +28,10 @@ def main():
26
28
 
27
29
  env_builder = venv.EnvBuilder(with_pip=True)
28
30
  venv_context = env_builder.ensure_directories(venv_path)
29
- requirements_path = _ROOT_DIR / "dev_requirements.txt"
30
-
31
- python_run(venv_context, "pip", ["install", "-r", str(requirements_path)])
31
+ try:
32
+ python_run(venv_context, "pip", ["install", "-r", f"{_ROOT_DIR}/dev_requirements.txt"])
33
+ except FileNotFoundError as e:
34
+ raise ValueError(e.filename)
32
35
 
33
36
 
34
37
  if __name__ == "__main__":
@@ -15,7 +15,7 @@ import venv
15
15
 
16
16
  from venvtools import python_run
17
17
 
18
- _ROOT_DIR = Path(__file__).parent
18
+ _ROOT_DIR = Path(__file__).parent.parent
19
19
 
20
20
 
21
21
  def main():
@@ -11,7 +11,7 @@ import sys
11
11
  from pathlib import Path
12
12
 
13
13
 
14
- _ROOT_DIR = Path(__file__).parent
14
+ _ROOT_DIR = Path(__file__).parent.parent
15
15
 
16
16
 
17
17
  class ExtendedEnvBuilder(venv.EnvBuilder):
@@ -1,26 +0,0 @@
1
- {% set prefix_lower = test.prefix|lower %}
2
- {% set async = "async " if test.is_async else "" %}
3
- {% set async_suffix = "_async" if test.is_async else "" %}
4
- # coding=utf-8
5
- {{ code_model.options['license_header'] }}
6
- import pytest
7
- {{ imports }}
8
-
9
-
10
- @pytest.mark.skip("you may need to update the auto-generated test case before run it")
11
- class {{ test.test_class_name }}({{ test.base_test_class_name }}):
12
- {% for testcase in test.testcases %}
13
- @{{ test.preparer_name }}()
14
- @recorded_by_proxy{{ async_suffix }}
15
- {{ async }}def test_{{ testcase.operation.name }}(self, {{ prefix_lower }}_endpoint):
16
- client = self.{{ test.create_client_name }}(endpoint={{ prefix_lower }}_endpoint)
17
- {{testcase.response }}client{{ testcase.operation_group_prefix }}.{{ testcase.operation.name }}(
18
- {% for key, value in testcase.params.items() %}
19
- {{ key }}={{ value|indent(12) }},
20
- {% endfor %}
21
- ){{ testcase.operation_suffix }}
22
- {{ testcase.extra_operation }}
23
- # please add some check logic here by yourself
24
- # ...
25
-
26
- {% endfor %}
package/run_cadl.py DELETED
@@ -1,40 +0,0 @@
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
- import sys
7
- import venv
8
- import logging
9
- from pathlib import Path
10
- from venvtools import python_run
11
-
12
- _ROOT_DIR = Path(__file__).parent
13
-
14
- _LOGGER = logging.getLogger(__name__)
15
-
16
- if __name__ == "__main__":
17
- venv_path = _ROOT_DIR / "venv"
18
- venv_prexists = venv_path.exists()
19
-
20
- assert venv_prexists # Otherwise install was not done
21
-
22
- env_builder = venv.EnvBuilder(with_pip=True)
23
- venv_context = env_builder.ensure_directories(venv_path)
24
-
25
- if "--debug" in sys.argv or "--debug=true" in sys.argv:
26
- try:
27
- import debugpy # pylint: disable=import-outside-toplevel
28
- except ImportError:
29
- raise SystemExit("Please pip install ptvsd in order to use VSCode debugging")
30
-
31
- # 5678 is the default attach port in the VS Code debug configurations
32
- debugpy.listen(("localhost", 5678))
33
- debugpy.wait_for_client()
34
- breakpoint() # pylint: disable=undefined-variable
35
-
36
- # run m2r
37
- python_run(venv_context, "autorest.m2r.__init__", command=sys.argv[1:])
38
- python_run(venv_context, "autorest.preprocess.__init__", command=sys.argv[1:])
39
- python_run(venv_context, "autorest.codegen.__init__", command=sys.argv[1:])
40
- python_run(venv_context, "autorest.black.__init__", command=sys.argv[1:])
File without changes