@autorest/python 6.27.1 → 6.27.3
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.
- package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +1 -2
- package/generator/build/lib/pygen/__init__.py +107 -0
- package/generator/build/lib/pygen/_version.py +7 -0
- package/generator/build/lib/pygen/black.py +71 -0
- package/generator/build/lib/pygen/codegen/__init__.py +357 -0
- package/generator/build/lib/pygen/codegen/_utils.py +17 -0
- package/generator/build/lib/pygen/codegen/models/__init__.py +204 -0
- package/generator/build/lib/pygen/codegen/models/base.py +186 -0
- package/generator/build/lib/pygen/codegen/models/base_builder.py +118 -0
- package/generator/build/lib/pygen/codegen/models/client.py +435 -0
- package/generator/build/lib/pygen/codegen/models/code_model.py +237 -0
- package/generator/build/lib/pygen/codegen/models/combined_type.py +149 -0
- package/generator/build/lib/pygen/codegen/models/constant_type.py +129 -0
- package/generator/build/lib/pygen/codegen/models/credential_types.py +214 -0
- package/generator/build/lib/pygen/codegen/models/dictionary_type.py +127 -0
- package/generator/build/lib/pygen/codegen/models/enum_type.py +238 -0
- package/generator/build/lib/pygen/codegen/models/imports.py +291 -0
- package/generator/build/lib/pygen/codegen/models/list_type.py +143 -0
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +142 -0
- package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +32 -0
- package/generator/build/lib/pygen/codegen/models/model_type.py +357 -0
- package/generator/build/lib/pygen/codegen/models/operation.py +509 -0
- package/generator/build/lib/pygen/codegen/models/operation_group.py +184 -0
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +155 -0
- package/generator/build/lib/pygen/codegen/models/parameter.py +412 -0
- package/generator/build/lib/pygen/codegen/models/parameter_list.py +387 -0
- package/generator/build/lib/pygen/codegen/models/primitive_types.py +659 -0
- package/generator/build/lib/pygen/codegen/models/property.py +170 -0
- package/generator/build/lib/pygen/codegen/models/request_builder.py +189 -0
- package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +115 -0
- package/generator/build/lib/pygen/codegen/models/response.py +348 -0
- package/generator/build/lib/pygen/codegen/models/utils.py +21 -0
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +574 -0
- package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +21 -0
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +1533 -0
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +294 -0
- package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +15 -0
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +213 -0
- package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +126 -0
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +198 -0
- package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +33 -0
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +335 -0
- package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +89 -0
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +44 -0
- package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +221 -0
- package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +19 -0
- package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +52 -0
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +168 -0
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +292 -0
- package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +31 -0
- package/generator/build/lib/pygen/codegen/serializers/utils.py +68 -0
- package/generator/build/lib/pygen/codegen/templates/client.py.jinja2 +37 -0
- package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +12 -0
- package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +73 -0
- package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +16 -0
- package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +28 -0
- package/generator/build/lib/pygen/codegen/templates/enum.py.jinja2 +13 -0
- package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +10 -0
- package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +24 -0
- package/generator/build/lib/pygen/codegen/templates/keywords.jinja2 +27 -0
- package/generator/build/lib/pygen/codegen/templates/lro_operation.py.jinja2 +16 -0
- package/generator/build/lib/pygen/codegen/templates/lro_paging_operation.py.jinja2 +18 -0
- package/generator/build/lib/pygen/codegen/templates/macros.jinja2 +12 -0
- package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +167 -0
- package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +1174 -0
- package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +15 -0
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +97 -0
- package/generator/build/lib/pygen/codegen/templates/model_init.py.jinja2 +33 -0
- package/generator/build/lib/pygen/codegen/templates/model_msrest.py.jinja2 +92 -0
- package/generator/build/lib/pygen/codegen/templates/operation.py.jinja2 +21 -0
- package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +75 -0
- package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +19 -0
- package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +81 -0
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +17 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +6 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +21 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +8 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +107 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +9 -0
- package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +108 -0
- package/generator/build/lib/pygen/codegen/templates/paging_operation.py.jinja2 +21 -0
- package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +19 -0
- package/generator/build/lib/pygen/codegen/templates/pkgutil_init.py.jinja2 +1 -0
- package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +28 -0
- package/generator/build/lib/pygen/codegen/templates/request_builders.py.jinja2 +10 -0
- package/generator/build/lib/pygen/codegen/templates/rest_init.py.jinja2 +12 -0
- package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +44 -0
- package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +2117 -0
- package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +50 -0
- package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +26 -0
- package/generator/build/lib/pygen/codegen/templates/types.py.jinja2 +7 -0
- package/generator/build/lib/pygen/codegen/templates/validation.py.jinja2 +38 -0
- package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +96 -0
- package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +4 -0
- package/generator/build/lib/pygen/m2r.py +65 -0
- package/generator/build/lib/pygen/preprocess/__init__.py +515 -0
- package/generator/build/lib/pygen/preprocess/helpers.py +27 -0
- package/generator/build/lib/pygen/preprocess/python_mappings.py +226 -0
- package/generator/build/lib/pygen/utils.py +163 -0
- package/generator/component-detection-pip-report.json +134 -0
- package/generator/dev_requirements.txt +0 -1
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/codegen/__init__.py +4 -4
- package/generator/pygen/m2r.py +1 -1
- package/generator/pygen.egg-info/PKG-INFO +7 -4
- package/generator/pygen.egg-info/requires.txt +7 -4
- package/generator/setup.py +7 -4
- package/package.json +2 -2
- package/requirements.txt +0 -12
- package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
- package/scripts/eng/pylintrc +2 -2
- package/scripts/install.py +0 -1
- package/generator/requirements.txt +0 -12
|
@@ -0,0 +1,226 @@
|
|
|
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 enum import Enum
|
|
7
|
+
|
|
8
|
+
basic_latin_chars = {
|
|
9
|
+
" ": "Space",
|
|
10
|
+
"!": "ExclamationMark",
|
|
11
|
+
'"': "QuotationMark",
|
|
12
|
+
"#": "NumberSign",
|
|
13
|
+
"$": "DollarSign",
|
|
14
|
+
"%": "PercentSign",
|
|
15
|
+
"&": "Ampersand",
|
|
16
|
+
"'": "Apostrophe",
|
|
17
|
+
"(": "LeftParenthesis",
|
|
18
|
+
")": "RightParenthesis",
|
|
19
|
+
"*": "Asterisk",
|
|
20
|
+
"+": "PlusSign",
|
|
21
|
+
",": "Comma",
|
|
22
|
+
"-": "HyphenMinus",
|
|
23
|
+
".": "FullStop",
|
|
24
|
+
"/": "Slash",
|
|
25
|
+
"0": "Zero",
|
|
26
|
+
"1": "One",
|
|
27
|
+
"2": "Two",
|
|
28
|
+
"3": "Three",
|
|
29
|
+
"4": "Four",
|
|
30
|
+
"5": "Five",
|
|
31
|
+
"6": "Six",
|
|
32
|
+
"7": "Seven",
|
|
33
|
+
"8": "Eight",
|
|
34
|
+
"9": "Nine",
|
|
35
|
+
":": "Colon",
|
|
36
|
+
";": "Semicolon",
|
|
37
|
+
"<": "LessThanSign",
|
|
38
|
+
"=": "EqualSign",
|
|
39
|
+
">": "GreaterThanSign",
|
|
40
|
+
"?": "QuestionMark",
|
|
41
|
+
"@": "AtSign",
|
|
42
|
+
"[": "LeftSquareBracket",
|
|
43
|
+
"\\": "Backslash",
|
|
44
|
+
"]": "RightSquareBracket",
|
|
45
|
+
"^": "CircumflexAccent",
|
|
46
|
+
"`": "GraveAccent",
|
|
47
|
+
"{": "LeftCurlyBracket",
|
|
48
|
+
"|": "VerticalBar",
|
|
49
|
+
"}": "RightCurlyBracket",
|
|
50
|
+
"~": "Tilde",
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class PadType(str, Enum):
|
|
55
|
+
MODEL = "Model"
|
|
56
|
+
ENUM_CLASS = "Enum"
|
|
57
|
+
METHOD = "_method"
|
|
58
|
+
PARAMETER = "_parameter"
|
|
59
|
+
ENUM_VALUE = "_enum"
|
|
60
|
+
PROPERTY = "_property"
|
|
61
|
+
OPERATION_GROUP = "Operations"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
_always_reserved = [
|
|
65
|
+
"and",
|
|
66
|
+
"as",
|
|
67
|
+
"assert",
|
|
68
|
+
"break",
|
|
69
|
+
"class",
|
|
70
|
+
"continue",
|
|
71
|
+
"def",
|
|
72
|
+
"del",
|
|
73
|
+
"elif",
|
|
74
|
+
"else",
|
|
75
|
+
"except",
|
|
76
|
+
"exec",
|
|
77
|
+
"finally",
|
|
78
|
+
"for",
|
|
79
|
+
"from",
|
|
80
|
+
"global",
|
|
81
|
+
"if",
|
|
82
|
+
"import",
|
|
83
|
+
"in",
|
|
84
|
+
"is",
|
|
85
|
+
"lambda",
|
|
86
|
+
"not",
|
|
87
|
+
"or",
|
|
88
|
+
"pass",
|
|
89
|
+
"raise",
|
|
90
|
+
"return",
|
|
91
|
+
"try",
|
|
92
|
+
"while",
|
|
93
|
+
"with",
|
|
94
|
+
"yield",
|
|
95
|
+
"async",
|
|
96
|
+
"await",
|
|
97
|
+
"int",
|
|
98
|
+
]
|
|
99
|
+
|
|
100
|
+
RESERVED_MODEL_PROPERTIES = [
|
|
101
|
+
"keys",
|
|
102
|
+
"items",
|
|
103
|
+
"values",
|
|
104
|
+
"popitem",
|
|
105
|
+
"clear",
|
|
106
|
+
"update",
|
|
107
|
+
"setdefault",
|
|
108
|
+
"pop",
|
|
109
|
+
"get",
|
|
110
|
+
"copy",
|
|
111
|
+
"as_dict",
|
|
112
|
+
]
|
|
113
|
+
|
|
114
|
+
RESERVED_WORDS = {
|
|
115
|
+
PadType.METHOD: [*_always_reserved],
|
|
116
|
+
PadType.PARAMETER: [
|
|
117
|
+
"self",
|
|
118
|
+
# these are kwargs we've reserved for our generated operations
|
|
119
|
+
"content_type",
|
|
120
|
+
"accept",
|
|
121
|
+
"cls",
|
|
122
|
+
"polling",
|
|
123
|
+
"continuation_token", # for LRO calls
|
|
124
|
+
# these are transport kwargs
|
|
125
|
+
# https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#transport
|
|
126
|
+
"connection_timeout",
|
|
127
|
+
"connection_verify",
|
|
128
|
+
"connection_cert",
|
|
129
|
+
"connection_data_block_size",
|
|
130
|
+
"use_env_settings",
|
|
131
|
+
# the following aren't in the readme, but @xiangyan99 said these are also transport kwargs
|
|
132
|
+
"read_timeout",
|
|
133
|
+
"proxies",
|
|
134
|
+
"cookies",
|
|
135
|
+
# these are policy kwargs
|
|
136
|
+
# https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#available-policies
|
|
137
|
+
"base_headers",
|
|
138
|
+
"headers",
|
|
139
|
+
"request_id",
|
|
140
|
+
"auto_request_id",
|
|
141
|
+
"base_user_agent",
|
|
142
|
+
"user_agent",
|
|
143
|
+
"user_agent_overwrite",
|
|
144
|
+
"user_agent_use_env",
|
|
145
|
+
"user_agent",
|
|
146
|
+
"sdk_moniker",
|
|
147
|
+
"logging_enable",
|
|
148
|
+
"logger",
|
|
149
|
+
"response_encoding",
|
|
150
|
+
"proxies",
|
|
151
|
+
"raw_request_hook",
|
|
152
|
+
"raw_response_hook",
|
|
153
|
+
"network_span_namer",
|
|
154
|
+
"tracing_attributes",
|
|
155
|
+
"permit_redirects",
|
|
156
|
+
"redirect_max",
|
|
157
|
+
"redirect_remove_headers",
|
|
158
|
+
"redirect_on_status_codes",
|
|
159
|
+
"permit_redirects",
|
|
160
|
+
"redirect_max",
|
|
161
|
+
"redirect_remove_headers",
|
|
162
|
+
"redirect_on_status_codes",
|
|
163
|
+
"retry_total",
|
|
164
|
+
"retry_connect",
|
|
165
|
+
"retry_read",
|
|
166
|
+
"retry_status",
|
|
167
|
+
"retry_backoff_factor",
|
|
168
|
+
"retry_backoff_max",
|
|
169
|
+
"retry_mode",
|
|
170
|
+
"retry_on_status_codes",
|
|
171
|
+
"retry_total",
|
|
172
|
+
"retry_connect",
|
|
173
|
+
"retry_read",
|
|
174
|
+
"retry_status",
|
|
175
|
+
"retry_backoff_factor",
|
|
176
|
+
"retry_backoff_max",
|
|
177
|
+
"retry_mode",
|
|
178
|
+
"retry_on_status_codes",
|
|
179
|
+
*_always_reserved,
|
|
180
|
+
],
|
|
181
|
+
PadType.MODEL: ["enum", *_always_reserved],
|
|
182
|
+
PadType.PROPERTY: ["self", *_always_reserved],
|
|
183
|
+
PadType.ENUM_CLASS: ["enum", *_always_reserved],
|
|
184
|
+
PadType.ENUM_VALUE: ["mro", *_always_reserved],
|
|
185
|
+
PadType.OPERATION_GROUP: [*_always_reserved],
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
CADL_RESERVED_WORDS = {
|
|
189
|
+
PadType.PARAMETER: ["stream"],
|
|
190
|
+
PadType.PROPERTY: RESERVED_MODEL_PROPERTIES,
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
REDEFINED_BUILTINS = [ # we don't pad, but we need to do lint ignores
|
|
194
|
+
"id",
|
|
195
|
+
"min",
|
|
196
|
+
"max",
|
|
197
|
+
"filter",
|
|
198
|
+
"property",
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
BUILTIN_PACKAGES = [
|
|
202
|
+
"array",
|
|
203
|
+
"atexit",
|
|
204
|
+
"binascii",
|
|
205
|
+
"builtins",
|
|
206
|
+
"cmath",
|
|
207
|
+
"errno",
|
|
208
|
+
"faulthandler",
|
|
209
|
+
"fcntl",
|
|
210
|
+
"gc",
|
|
211
|
+
"grp",
|
|
212
|
+
"itertools",
|
|
213
|
+
"marshal",
|
|
214
|
+
"math",
|
|
215
|
+
"posix",
|
|
216
|
+
"pwd",
|
|
217
|
+
"pyexpat",
|
|
218
|
+
"select",
|
|
219
|
+
"spwd",
|
|
220
|
+
"sys",
|
|
221
|
+
"syslog",
|
|
222
|
+
"time",
|
|
223
|
+
"unicodedata",
|
|
224
|
+
"xxsubtype",
|
|
225
|
+
"zlib",
|
|
226
|
+
]
|
|
@@ -0,0 +1,163 @@
|
|
|
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 typing import Any, Dict, Tuple, List
|
|
7
|
+
import re
|
|
8
|
+
import argparse
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def update_enum_value(name: str, value: Any, description: str, enum_type: Dict[str, Any]) -> Dict[str, Any]:
|
|
12
|
+
return {
|
|
13
|
+
"name": name,
|
|
14
|
+
"type": "enumvalue",
|
|
15
|
+
"value": value,
|
|
16
|
+
"description": description,
|
|
17
|
+
"enumType": enum_type,
|
|
18
|
+
"valueType": enum_type["valueType"],
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def to_snake_case(name: str) -> str:
|
|
23
|
+
def replace_upper_characters(m) -> str:
|
|
24
|
+
match_str = m.group().lower()
|
|
25
|
+
if m.start() > 0 and name[m.start() - 1] == "_":
|
|
26
|
+
# we are good if a '_' already exists
|
|
27
|
+
return match_str
|
|
28
|
+
# the first letter should not have _
|
|
29
|
+
prefix = "_" if m.start() > 0 else ""
|
|
30
|
+
|
|
31
|
+
# we will add an extra _ if there are multiple upper case chars together
|
|
32
|
+
next_non_upper_case_char_location = m.start() + len(match_str)
|
|
33
|
+
if (
|
|
34
|
+
len(match_str) > 2
|
|
35
|
+
and len(name) - next_non_upper_case_char_location > 1
|
|
36
|
+
and name[next_non_upper_case_char_location].isalpha()
|
|
37
|
+
):
|
|
38
|
+
return prefix + match_str[: len(match_str) - 1] + "_" + match_str[len(match_str) - 1]
|
|
39
|
+
|
|
40
|
+
return prefix + match_str
|
|
41
|
+
|
|
42
|
+
result = re.sub("[A-Z]+", replace_upper_characters, name)
|
|
43
|
+
return result.replace(" ", "_").replace("__", "_").replace("-", "")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def parse_args(
|
|
47
|
+
need_cadl_file: bool = True,
|
|
48
|
+
) -> Tuple[argparse.Namespace, Dict[str, Any]]:
|
|
49
|
+
parser = argparse.ArgumentParser(
|
|
50
|
+
description="Run mypy against target folder. Add a local custom plugin to the path prior to execution. "
|
|
51
|
+
)
|
|
52
|
+
parser.add_argument(
|
|
53
|
+
"--output-folder",
|
|
54
|
+
dest="output_folder",
|
|
55
|
+
help="Output folder for generated SDK",
|
|
56
|
+
required=True,
|
|
57
|
+
)
|
|
58
|
+
parser.add_argument(
|
|
59
|
+
"--cadl-file",
|
|
60
|
+
dest="cadl_file",
|
|
61
|
+
help="Serialized cadl file",
|
|
62
|
+
required=need_cadl_file,
|
|
63
|
+
)
|
|
64
|
+
parser.add_argument(
|
|
65
|
+
"--debug",
|
|
66
|
+
dest="debug",
|
|
67
|
+
help="Debug mode",
|
|
68
|
+
required=False,
|
|
69
|
+
action="store",
|
|
70
|
+
)
|
|
71
|
+
args, unknown_args = parser.parse_known_args()
|
|
72
|
+
|
|
73
|
+
def _get_value(value: Any) -> Any:
|
|
74
|
+
if value == "true":
|
|
75
|
+
return True
|
|
76
|
+
if value == "false":
|
|
77
|
+
return False
|
|
78
|
+
try:
|
|
79
|
+
return int(value)
|
|
80
|
+
except ValueError:
|
|
81
|
+
pass
|
|
82
|
+
return value
|
|
83
|
+
|
|
84
|
+
unknown_args_ret = {
|
|
85
|
+
ua.strip("--").split("=", maxsplit=1)[0]: _get_value(ua.strip("--").split("=", maxsplit=1)[1])
|
|
86
|
+
for ua in unknown_args
|
|
87
|
+
}
|
|
88
|
+
return args, unknown_args_ret
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def get_body_type_for_description(body_parameter: Dict[str, Any]) -> str:
|
|
92
|
+
if body_parameter["type"]["type"] == "binary":
|
|
93
|
+
return "binary"
|
|
94
|
+
if body_parameter["type"]["type"] == "string":
|
|
95
|
+
return "string"
|
|
96
|
+
return "JSON"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
# used if we want to get a string / binary type etc
|
|
100
|
+
KNOWN_TYPES: Dict[str, Dict[str, Any]] = {
|
|
101
|
+
"string": {"type": "string"},
|
|
102
|
+
"binary": {"type": "binary"},
|
|
103
|
+
"anydict": {"type": "dict", "elementType": {"type": "any"}},
|
|
104
|
+
"any-object": {"type": "any-object"},
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
JSON_REGEXP = re.compile(r"^(application|text)/(.+\+)?json$")
|
|
108
|
+
XML_REGEXP = re.compile(r"^(application|text)/(.+\+)?xml$")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def build_policies(
|
|
112
|
+
is_arm: bool,
|
|
113
|
+
async_mode: bool,
|
|
114
|
+
*,
|
|
115
|
+
is_azure_flavor: bool = False,
|
|
116
|
+
tracing: bool = True,
|
|
117
|
+
) -> List[str]:
|
|
118
|
+
if is_azure_flavor:
|
|
119
|
+
# for Azure
|
|
120
|
+
async_prefix = "Async" if async_mode else ""
|
|
121
|
+
policies = [
|
|
122
|
+
"policies.RequestIdPolicy(**kwargs)",
|
|
123
|
+
"self._config.headers_policy",
|
|
124
|
+
"self._config.user_agent_policy",
|
|
125
|
+
"self._config.proxy_policy",
|
|
126
|
+
"policies.ContentDecodePolicy(**kwargs)",
|
|
127
|
+
(f"{async_prefix}ARMAutoResourceProviderRegistrationPolicy()" if is_arm else None),
|
|
128
|
+
"self._config.redirect_policy",
|
|
129
|
+
"self._config.retry_policy",
|
|
130
|
+
"self._config.authentication_policy",
|
|
131
|
+
"self._config.custom_hook_policy",
|
|
132
|
+
"self._config.logging_policy",
|
|
133
|
+
"policies.DistributedTracingPolicy(**kwargs)" if tracing else None,
|
|
134
|
+
"policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None",
|
|
135
|
+
"self._config.http_logging_policy",
|
|
136
|
+
]
|
|
137
|
+
else:
|
|
138
|
+
# for non-Azure
|
|
139
|
+
policies = [
|
|
140
|
+
"self._config.headers_policy",
|
|
141
|
+
"self._config.user_agent_policy",
|
|
142
|
+
"self._config.proxy_policy",
|
|
143
|
+
"policies.ContentDecodePolicy(**kwargs)",
|
|
144
|
+
"self._config.retry_policy",
|
|
145
|
+
"self._config.authentication_policy",
|
|
146
|
+
"self._config.logging_policy",
|
|
147
|
+
]
|
|
148
|
+
return [p for p in policies if p]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def extract_original_name(name: str) -> str:
|
|
152
|
+
return name[1 : -len("_initial")]
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def json_serializable(content_type: str) -> bool:
|
|
156
|
+
return bool(JSON_REGEXP.match(content_type.split(";")[0].strip().lower()))
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def xml_serializable(content_type: str) -> bool:
|
|
160
|
+
return bool(XML_REGEXP.match(content_type.split(";")[0].strip().lower()))
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
NAME_LENGTH_LIMIT = 40
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1",
|
|
3
|
+
"pip_version": "24.3.1",
|
|
4
|
+
"install": [
|
|
5
|
+
{
|
|
6
|
+
"download_info": {
|
|
7
|
+
"url": "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl",
|
|
8
|
+
"archive_info": {
|
|
9
|
+
"hash": "sha256=f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd",
|
|
10
|
+
"hashes": {
|
|
11
|
+
"sha256": "f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"is_direct": false,
|
|
16
|
+
"is_yanked": false,
|
|
17
|
+
"requested": true,
|
|
18
|
+
"metadata": {
|
|
19
|
+
"metadata_version": "2.1",
|
|
20
|
+
"name": "setuptools",
|
|
21
|
+
"version": "75.3.0",
|
|
22
|
+
"summary": "Easily download, build, install, upgrade, and uninstall Python packages",
|
|
23
|
+
"description_content_type": "text/x-rst",
|
|
24
|
+
"keywords": [
|
|
25
|
+
"CPAN",
|
|
26
|
+
"PyPI",
|
|
27
|
+
"distutils",
|
|
28
|
+
"eggs",
|
|
29
|
+
"package",
|
|
30
|
+
"management"
|
|
31
|
+
],
|
|
32
|
+
"author_email": "Python Packaging Authority <distutils-sig@python.org>",
|
|
33
|
+
"classifier": [
|
|
34
|
+
"Development Status :: 5 - Production/Stable",
|
|
35
|
+
"Intended Audience :: Developers",
|
|
36
|
+
"License :: OSI Approved :: MIT License",
|
|
37
|
+
"Programming Language :: Python :: 3",
|
|
38
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
39
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
40
|
+
"Topic :: System :: Archiving :: Packaging",
|
|
41
|
+
"Topic :: System :: Systems Administration",
|
|
42
|
+
"Topic :: Utilities"
|
|
43
|
+
],
|
|
44
|
+
"requires_dist": [
|
|
45
|
+
"pytest-checkdocs >=2.4 ; extra == 'check'",
|
|
46
|
+
"pytest-ruff >=0.2.1 ; (sys_platform != \"cygwin\") and extra == 'check'",
|
|
47
|
+
"ruff >=0.5.2 ; (sys_platform != \"cygwin\") and extra == 'check'",
|
|
48
|
+
"packaging >=24 ; extra == 'core'",
|
|
49
|
+
"more-itertools >=8.8 ; extra == 'core'",
|
|
50
|
+
"jaraco.text >=3.7 ; extra == 'core'",
|
|
51
|
+
"wheel >=0.43.0 ; extra == 'core'",
|
|
52
|
+
"platformdirs >=4.2.2 ; extra == 'core'",
|
|
53
|
+
"jaraco.collections ; extra == 'core'",
|
|
54
|
+
"jaraco.functools ; extra == 'core'",
|
|
55
|
+
"packaging ; extra == 'core'",
|
|
56
|
+
"more-itertools ; extra == 'core'",
|
|
57
|
+
"importlib-metadata >=6 ; (python_version < \"3.10\") and extra == 'core'",
|
|
58
|
+
"tomli >=2.0.1 ; (python_version < \"3.11\") and extra == 'core'",
|
|
59
|
+
"importlib-resources >=5.10.2 ; (python_version < \"3.9\") and extra == 'core'",
|
|
60
|
+
"pytest-cov ; extra == 'cover'",
|
|
61
|
+
"sphinx >=3.5 ; extra == 'doc'",
|
|
62
|
+
"jaraco.packaging >=9.3 ; extra == 'doc'",
|
|
63
|
+
"rst.linker >=1.9 ; extra == 'doc'",
|
|
64
|
+
"furo ; extra == 'doc'",
|
|
65
|
+
"sphinx-lint ; extra == 'doc'",
|
|
66
|
+
"jaraco.tidelift >=1.4 ; extra == 'doc'",
|
|
67
|
+
"pygments-github-lexers ==0.0.5 ; extra == 'doc'",
|
|
68
|
+
"sphinx-favicon ; extra == 'doc'",
|
|
69
|
+
"sphinx-inline-tabs ; extra == 'doc'",
|
|
70
|
+
"sphinx-reredirects ; extra == 'doc'",
|
|
71
|
+
"sphinxcontrib-towncrier ; extra == 'doc'",
|
|
72
|
+
"sphinx-notfound-page <2,>=1 ; extra == 'doc'",
|
|
73
|
+
"pyproject-hooks !=1.1 ; extra == 'doc'",
|
|
74
|
+
"towncrier <24.7 ; extra == 'doc'",
|
|
75
|
+
"pytest-enabler >=2.2 ; extra == 'enabler'",
|
|
76
|
+
"pytest !=8.1.*,>=6 ; extra == 'test'",
|
|
77
|
+
"virtualenv >=13.0.0 ; extra == 'test'",
|
|
78
|
+
"wheel >=0.44.0 ; extra == 'test'",
|
|
79
|
+
"pip >=19.1 ; extra == 'test'",
|
|
80
|
+
"packaging >=23.2 ; extra == 'test'",
|
|
81
|
+
"jaraco.envs >=2.2 ; extra == 'test'",
|
|
82
|
+
"pytest-xdist >=3 ; extra == 'test'",
|
|
83
|
+
"jaraco.path >=3.2.0 ; extra == 'test'",
|
|
84
|
+
"build[virtualenv] >=1.0.3 ; extra == 'test'",
|
|
85
|
+
"filelock >=3.4.0 ; extra == 'test'",
|
|
86
|
+
"ini2toml[lite] >=0.14 ; extra == 'test'",
|
|
87
|
+
"tomli-w >=1.0.0 ; extra == 'test'",
|
|
88
|
+
"pytest-timeout ; extra == 'test'",
|
|
89
|
+
"pytest-home >=0.5 ; extra == 'test'",
|
|
90
|
+
"pytest-subprocess ; extra == 'test'",
|
|
91
|
+
"pyproject-hooks !=1.1 ; extra == 'test'",
|
|
92
|
+
"jaraco.test >=5.5 ; extra == 'test'",
|
|
93
|
+
"jaraco.develop >=7.21 ; (python_version >= \"3.9\" and sys_platform != \"cygwin\") and extra == 'test'",
|
|
94
|
+
"pytest-perf ; (sys_platform != \"cygwin\") and extra == 'test'",
|
|
95
|
+
"pytest-mypy ; extra == 'type'",
|
|
96
|
+
"mypy ==1.12.* ; extra == 'type'",
|
|
97
|
+
"importlib-metadata >=7.0.2 ; (python_version < \"3.10\") and extra == 'type'",
|
|
98
|
+
"jaraco.develop >=7.21 ; (sys_platform != \"cygwin\") and extra == 'type'"
|
|
99
|
+
],
|
|
100
|
+
"requires_python": ">=3.8",
|
|
101
|
+
"project_url": [
|
|
102
|
+
"Source, https://github.com/pypa/setuptools",
|
|
103
|
+
"Documentation, https://setuptools.pypa.io/",
|
|
104
|
+
"Changelog, https://setuptools.pypa.io/en/stable/history.html"
|
|
105
|
+
],
|
|
106
|
+
"provides_extra": [
|
|
107
|
+
"certs",
|
|
108
|
+
"check",
|
|
109
|
+
"core",
|
|
110
|
+
"cover",
|
|
111
|
+
"doc",
|
|
112
|
+
"enabler",
|
|
113
|
+
"ssl",
|
|
114
|
+
"test",
|
|
115
|
+
"type"
|
|
116
|
+
],
|
|
117
|
+
"description": ".. |pypi-version| image:: https://img.shields.io/pypi/v/setuptools.svg\n :target: https://pypi.org/project/setuptools\n\n.. |py-version| image:: https://img.shields.io/pypi/pyversions/setuptools.svg\n\n.. |test-badge| image:: https://github.com/pypa/setuptools/actions/workflows/main.yml/badge.svg\n :target: https://github.com/pypa/setuptools/actions?query=workflow%3A%22tests%22\n :alt: tests\n\n.. |ruff-badge| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json\n :target: https://github.com/astral-sh/ruff\n :alt: Ruff\n\n.. |docs-badge| image:: https://img.shields.io/readthedocs/setuptools/latest.svg\n :target: https://setuptools.pypa.io\n\n.. |skeleton-badge| image:: https://img.shields.io/badge/skeleton-2024-informational\n :target: https://blog.jaraco.com/skeleton\n\n.. |codecov-badge| image:: https://img.shields.io/codecov/c/github/pypa/setuptools/master.svg?logo=codecov&logoColor=white\n :target: https://codecov.io/gh/pypa/setuptools\n\n.. |tidelift-badge| image:: https://tidelift.com/badges/github/pypa/setuptools?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=readme\n\n.. |discord-badge| image:: https://img.shields.io/discord/803025117553754132\n :target: https://discord.com/channels/803025117553754132/815945031150993468\n :alt: Discord\n\n|pypi-version| |py-version| |test-badge| |ruff-badge| |docs-badge| |skeleton-badge| |codecov-badge| |discord-badge|\n\nSee the `Quickstart <https://setuptools.pypa.io/en/latest/userguide/quickstart.html>`_\nand the `User's Guide <https://setuptools.pypa.io/en/latest/userguide/>`_ for\ninstructions on how to use Setuptools.\n\nQuestions and comments should be directed to `GitHub Discussions\n<https://github.com/pypa/setuptools/discussions>`_.\nBug reports and especially tested patches may be\nsubmitted directly to the `bug tracker\n<https://github.com/pypa/setuptools/issues>`_.\n\n\nCode of Conduct\n===============\n\nEveryone interacting in the setuptools project's codebases, issue trackers,\nchat rooms, and fora is expected to follow the\n`PSF Code of Conduct <https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md>`_.\n\n\nFor Enterprise\n==============\n\nAvailable as part of the Tidelift Subscription.\n\nSetuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.\n\n`Learn more <https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=referral&utm_campaign=github>`_.\n"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"environment": {
|
|
122
|
+
"implementation_name": "cpython",
|
|
123
|
+
"implementation_version": "3.8.10",
|
|
124
|
+
"os_name": "posix",
|
|
125
|
+
"platform_machine": "x86_64",
|
|
126
|
+
"platform_release": "5.15.0-1075-azure",
|
|
127
|
+
"platform_system": "Linux",
|
|
128
|
+
"platform_version": "#84~20.04.1-Ubuntu SMP Mon Nov 4 18:58:41 UTC 2024",
|
|
129
|
+
"python_full_version": "3.8.10",
|
|
130
|
+
"platform_python_implementation": "CPython",
|
|
131
|
+
"python_version": "3.8",
|
|
132
|
+
"sys_platform": "linux"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
Binary file
|
|
@@ -244,8 +244,8 @@ class CodeGenerator(Plugin):
|
|
|
244
244
|
@staticmethod
|
|
245
245
|
def sort_exceptions(yaml_data: Dict[str, Any]) -> None:
|
|
246
246
|
for client in yaml_data["clients"]:
|
|
247
|
-
for group in client
|
|
248
|
-
for operation in group
|
|
247
|
+
for group in client.get("operationGroups", []):
|
|
248
|
+
for operation in group.get("operations", []):
|
|
249
249
|
if not operation.get("exceptions"):
|
|
250
250
|
continue
|
|
251
251
|
# sort exceptions by status code, first single status code, then range, then default
|
|
@@ -261,8 +261,8 @@ class CodeGenerator(Plugin):
|
|
|
261
261
|
@staticmethod
|
|
262
262
|
def remove_cloud_errors(yaml_data: Dict[str, Any]) -> None:
|
|
263
263
|
for client in yaml_data["clients"]:
|
|
264
|
-
for group in client
|
|
265
|
-
for operation in group
|
|
264
|
+
for group in client.get("operationGroups", []):
|
|
265
|
+
for operation in group.get("operations", []):
|
|
266
266
|
if not operation.get("exceptions"):
|
|
267
267
|
continue
|
|
268
268
|
i = 0
|
package/generator/pygen/m2r.py
CHANGED
|
@@ -17,9 +17,12 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
17
17
|
Classifier: License :: OSI Approved :: MIT License
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
20
|
+
Requires-Dist: black==24.8.0
|
|
21
|
+
Requires-Dist: docutils>=0.20.1
|
|
22
|
+
Requires-Dist: Jinja2==3.1.3
|
|
23
|
+
Requires-Dist: m2r2==0.3.3.post2
|
|
24
|
+
Requires-Dist: PyYAML==6.0.1
|
|
25
|
+
Requires-Dist: tomli==2.0.1
|
|
26
|
+
Requires-Dist: setuptools==69.5.1
|
|
24
27
|
|
|
25
28
|
# Core Library for Python Generation
|
package/generator/setup.py
CHANGED
|
@@ -48,9 +48,12 @@ setup(
|
|
|
48
48
|
]
|
|
49
49
|
),
|
|
50
50
|
install_requires=[
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
51
|
+
"black==24.8.0",
|
|
52
|
+
"docutils>=0.20.1",
|
|
53
|
+
"Jinja2==3.1.3",
|
|
54
|
+
"m2r2==0.3.3.post2",
|
|
55
|
+
"PyYAML==6.0.1",
|
|
56
|
+
"tomli==2.0.1",
|
|
57
|
+
"setuptools==69.5.1",
|
|
55
58
|
],
|
|
56
59
|
)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autorest/python",
|
|
3
|
-
"version": "6.27.
|
|
3
|
+
"version": "6.27.3",
|
|
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.
|
|
22
|
+
"@typespec/http-client-python": "~0.5.1",
|
|
23
23
|
"@autorest/system-requirements": "~1.0.2",
|
|
24
24
|
"fs-extra": "~11.2.0",
|
|
25
25
|
"tsx": "~4.19.1"
|
package/requirements.txt
CHANGED
|
Binary file
|
package/scripts/eng/pylintrc
CHANGED
|
@@ -9,7 +9,7 @@ ignore=_generated,samples,examples,test,tests,doc,.tox,generated_samples
|
|
|
9
9
|
[MESSAGES CONTROL]
|
|
10
10
|
|
|
11
11
|
# Add enable for useless disables
|
|
12
|
-
enable=useless-suppression
|
|
12
|
+
# enable=useless-suppression
|
|
13
13
|
|
|
14
14
|
# For all codes, run 'pylint --list-msgs' or go to 'https://pylint.readthedocs.io/en/latest/reference_guide/features.html'
|
|
15
15
|
# locally-disabled: Warning locally suppressed using disable-msg
|
|
@@ -17,7 +17,7 @@ enable=useless-suppression
|
|
|
17
17
|
# too-many-arguments: Due to the nature of the CLI many commands have large arguments set which reflect in large arguments set in corresponding methods.
|
|
18
18
|
# too-many-lines: Due to code generation many files end up with too many lines.
|
|
19
19
|
# Let's black deal with bad-continuation
|
|
20
|
-
disable=missing-docstring,locally-disabled,fixme,cyclic-import,too-many-arguments,invalid-name,duplicate-code,too-few-public-methods,consider-using-f-string,super-with-arguments,redefined-builtin,import-outside-toplevel,client-suffix-needed,unnecessary-dunder-call,unnecessary-ellipsis,disallowed-name,consider-using-max-builtin,unknown-option-value
|
|
20
|
+
disable=missing-docstring,locally-disabled,fixme,cyclic-import,too-many-arguments,invalid-name,duplicate-code,too-few-public-methods,consider-using-f-string,super-with-arguments,redefined-builtin,import-outside-toplevel,client-suffix-needed,unnecessary-dunder-call,unnecessary-ellipsis,disallowed-name,consider-using-max-builtin,unknown-option-value,useless-suppression,too-many-instance-attributes
|
|
21
21
|
|
|
22
22
|
[FORMAT]
|
|
23
23
|
max-line-length=120
|