@azure-tools/typespec-python 0.24.3 → 0.25.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.
- package/dist/src/code-model.d.ts.map +1 -1
- package/dist/src/code-model.js +1 -4
- package/dist/src/code-model.js.map +1 -1
- package/dist/src/emitter.d.ts.map +1 -1
- package/dist/src/emitter.js +5 -4
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/external-process.d.ts +0 -9
- package/dist/src/external-process.d.ts.map +1 -1
- package/dist/src/external-process.js +1 -25
- package/dist/src/external-process.js.map +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -1
- package/generator/LICENSE +21 -0
- package/generator/README.md +1 -0
- package/generator/dev_requirements.txt +5 -0
- package/generator/pygen/__init__.py +107 -0
- package/generator/pygen/_version.py +7 -0
- package/generator/pygen/black.py +71 -0
- package/generator/pygen/codegen/__init__.py +334 -0
- package/generator/pygen/codegen/_utils.py +16 -0
- package/generator/pygen/codegen/models/__init__.py +202 -0
- package/generator/pygen/codegen/models/base.py +186 -0
- package/generator/pygen/codegen/models/base_builder.py +119 -0
- package/generator/pygen/codegen/models/client.py +429 -0
- package/generator/pygen/codegen/models/code_model.py +239 -0
- package/generator/pygen/codegen/models/combined_type.py +149 -0
- package/generator/pygen/codegen/models/constant_type.py +129 -0
- package/generator/pygen/codegen/models/credential_types.py +221 -0
- package/generator/pygen/codegen/models/dictionary_type.py +127 -0
- package/generator/pygen/codegen/models/enum_type.py +238 -0
- package/generator/pygen/codegen/models/imports.py +291 -0
- package/generator/pygen/codegen/models/list_type.py +143 -0
- package/generator/pygen/codegen/models/lro_operation.py +143 -0
- package/generator/pygen/codegen/models/lro_paging_operation.py +32 -0
- package/generator/pygen/codegen/models/model_type.py +361 -0
- package/generator/pygen/codegen/models/operation.py +518 -0
- package/generator/pygen/codegen/models/operation_group.py +184 -0
- package/generator/pygen/codegen/models/paging_operation.py +156 -0
- package/generator/pygen/codegen/models/parameter.py +402 -0
- package/generator/pygen/codegen/models/parameter_list.py +390 -0
- package/generator/pygen/codegen/models/primitive_types.py +626 -0
- package/generator/pygen/codegen/models/property.py +175 -0
- package/generator/pygen/codegen/models/request_builder.py +189 -0
- package/generator/pygen/codegen/models/request_builder_parameter.py +115 -0
- package/generator/pygen/codegen/models/response.py +348 -0
- package/generator/pygen/codegen/models/utils.py +23 -0
- package/generator/pygen/codegen/serializers/__init__.py +570 -0
- package/generator/pygen/codegen/serializers/base_serializer.py +21 -0
- package/generator/pygen/codegen/serializers/builder_serializer.py +1454 -0
- package/generator/pygen/codegen/serializers/client_serializer.py +295 -0
- package/generator/pygen/codegen/serializers/enum_serializer.py +15 -0
- package/generator/pygen/codegen/serializers/general_serializer.py +212 -0
- package/generator/pygen/codegen/serializers/import_serializer.py +127 -0
- package/generator/pygen/codegen/serializers/metadata_serializer.py +198 -0
- package/generator/pygen/codegen/serializers/model_init_serializer.py +33 -0
- package/generator/pygen/codegen/serializers/model_serializer.py +287 -0
- package/generator/pygen/codegen/serializers/operation_groups_serializer.py +89 -0
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +44 -0
- package/generator/pygen/codegen/serializers/parameter_serializer.py +221 -0
- package/generator/pygen/codegen/serializers/patch_serializer.py +19 -0
- package/generator/pygen/codegen/serializers/request_builders_serializer.py +52 -0
- package/generator/pygen/codegen/serializers/sample_serializer.py +163 -0
- package/generator/pygen/codegen/serializers/test_serializer.py +287 -0
- package/generator/pygen/codegen/serializers/types_serializer.py +31 -0
- package/generator/pygen/codegen/serializers/utils.py +68 -0
- package/generator/pygen/codegen/templates/client.py.jinja2 +37 -0
- package/generator/pygen/codegen/templates/client_container.py.jinja2 +12 -0
- package/generator/pygen/codegen/templates/config.py.jinja2 +73 -0
- package/generator/pygen/codegen/templates/config_container.py.jinja2 +16 -0
- package/generator/pygen/codegen/templates/conftest.py.jinja2 +28 -0
- package/generator/pygen/codegen/templates/enum.py.jinja2 +13 -0
- package/generator/pygen/codegen/templates/enum_container.py.jinja2 +10 -0
- package/generator/pygen/codegen/templates/init.py.jinja2 +24 -0
- package/generator/pygen/codegen/templates/keywords.jinja2 +19 -0
- package/generator/pygen/codegen/templates/lro_operation.py.jinja2 +16 -0
- package/generator/pygen/codegen/templates/lro_paging_operation.py.jinja2 +18 -0
- package/generator/pygen/codegen/templates/macros.jinja2 +12 -0
- package/generator/pygen/codegen/templates/metadata.json.jinja2 +167 -0
- package/generator/pygen/codegen/templates/model_base.py.jinja2 +899 -0
- package/generator/pygen/codegen/templates/model_container.py.jinja2 +13 -0
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +92 -0
- package/generator/pygen/codegen/templates/model_init.py.jinja2 +28 -0
- package/generator/pygen/codegen/templates/model_msrest.py.jinja2 +92 -0
- package/generator/pygen/codegen/templates/operation.py.jinja2 +21 -0
- package/generator/pygen/codegen/templates/operation_group.py.jinja2 +75 -0
- package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +20 -0
- package/generator/pygen/codegen/templates/operation_tools.jinja2 +74 -0
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +17 -0
- package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +6 -0
- package/generator/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +21 -0
- package/generator/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +8 -0
- package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +107 -0
- package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +9 -0
- package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +108 -0
- package/generator/pygen/codegen/templates/paging_operation.py.jinja2 +21 -0
- package/generator/pygen/codegen/templates/patch.py.jinja2 +19 -0
- package/generator/pygen/codegen/templates/pkgutil_init.py.jinja2 +1 -0
- package/generator/pygen/codegen/templates/request_builder.py.jinja2 +28 -0
- package/generator/pygen/codegen/templates/request_builders.py.jinja2 +10 -0
- package/generator/pygen/codegen/templates/rest_init.py.jinja2 +12 -0
- package/generator/pygen/codegen/templates/sample.py.jinja2 +44 -0
- package/generator/pygen/codegen/templates/serialization.py.jinja2 +2006 -0
- package/generator/pygen/codegen/templates/test.py.jinja2 +50 -0
- package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +26 -0
- package/generator/pygen/codegen/templates/types.py.jinja2 +8 -0
- package/generator/pygen/codegen/templates/validation.py.jinja2 +38 -0
- package/generator/pygen/codegen/templates/vendor.py.jinja2 +98 -0
- package/generator/pygen/codegen/templates/version.py.jinja2 +4 -0
- package/generator/pygen/m2r.py +65 -0
- package/generator/pygen/postprocess/__init__.py +183 -0
- package/generator/pygen/postprocess/get_all.py +19 -0
- package/generator/pygen/postprocess/venvtools.py +77 -0
- package/generator/pygen/preprocess/__init__.py +503 -0
- package/generator/pygen/preprocess/helpers.py +27 -0
- package/generator/pygen/preprocess/python_mappings.py +222 -0
- package/generator/pygen/utils.py +149 -0
- package/generator/pygen.egg-info/PKG-INFO +25 -0
- package/generator/pygen.egg-info/SOURCES.txt +66 -0
- package/generator/pygen.egg-info/dependency_links.txt +1 -0
- package/generator/pygen.egg-info/requires.txt +4 -0
- package/generator/pygen.egg-info/top_level.txt +1 -0
- package/generator/requirements.txt +12 -0
- package/generator/setup.py +55 -0
- package/package.json +10 -7
- package/scripts/__pycache__/venvtools.cpython-38.pyc +0 -0
- package/scripts/install.py +49 -0
- package/scripts/prepare.py +38 -0
- package/scripts/run-python3.cjs +22 -0
- package/scripts/run_tsp.py +40 -0
- package/scripts/system-requirements.cjs +180 -0
- package/scripts/venvtools.py +81 -0
|
@@ -0,0 +1,222 @@
|
|
|
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
|
+
METHOD = "_method"
|
|
57
|
+
PARAMETER = "_parameter"
|
|
58
|
+
ENUM = "_enum"
|
|
59
|
+
PROPERTY = "_property"
|
|
60
|
+
OPERATION_GROUP = "Operations"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
_always_reserved = [
|
|
64
|
+
"and",
|
|
65
|
+
"as",
|
|
66
|
+
"assert",
|
|
67
|
+
"break",
|
|
68
|
+
"class",
|
|
69
|
+
"continue",
|
|
70
|
+
"def",
|
|
71
|
+
"del",
|
|
72
|
+
"elif",
|
|
73
|
+
"else",
|
|
74
|
+
"except",
|
|
75
|
+
"exec",
|
|
76
|
+
"finally",
|
|
77
|
+
"for",
|
|
78
|
+
"from",
|
|
79
|
+
"global",
|
|
80
|
+
"if",
|
|
81
|
+
"import",
|
|
82
|
+
"in",
|
|
83
|
+
"is",
|
|
84
|
+
"lambda",
|
|
85
|
+
"not",
|
|
86
|
+
"or",
|
|
87
|
+
"pass",
|
|
88
|
+
"raise",
|
|
89
|
+
"return",
|
|
90
|
+
"try",
|
|
91
|
+
"while",
|
|
92
|
+
"with",
|
|
93
|
+
"yield",
|
|
94
|
+
"async",
|
|
95
|
+
"await",
|
|
96
|
+
"int",
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
RESERVED_MODEL_PROPERTIES = [
|
|
100
|
+
"keys",
|
|
101
|
+
"items",
|
|
102
|
+
"values",
|
|
103
|
+
"popitem",
|
|
104
|
+
"clear",
|
|
105
|
+
"update",
|
|
106
|
+
"setdefault",
|
|
107
|
+
"pop",
|
|
108
|
+
"get",
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
RESERVED_WORDS = {
|
|
112
|
+
PadType.METHOD: [*_always_reserved],
|
|
113
|
+
PadType.PARAMETER: [
|
|
114
|
+
"self",
|
|
115
|
+
# these are kwargs we've reserved for our generated operations
|
|
116
|
+
"content_type",
|
|
117
|
+
"accept",
|
|
118
|
+
"cls",
|
|
119
|
+
"polling",
|
|
120
|
+
"continuation_token", # for LRO calls
|
|
121
|
+
# these are transport kwargs
|
|
122
|
+
# https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#transport
|
|
123
|
+
"connection_timeout",
|
|
124
|
+
"connection_verify",
|
|
125
|
+
"connection_cert",
|
|
126
|
+
"connection_data_block_size",
|
|
127
|
+
"use_env_settings",
|
|
128
|
+
# the following aren't in the readme, but Xiang said these are also transport kwargs
|
|
129
|
+
"read_timeout",
|
|
130
|
+
"proxies",
|
|
131
|
+
"cookies",
|
|
132
|
+
# these are policy kwargs
|
|
133
|
+
# https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#available-policies
|
|
134
|
+
"base_headers",
|
|
135
|
+
"headers",
|
|
136
|
+
"request_id",
|
|
137
|
+
"auto_request_id",
|
|
138
|
+
"base_user_agent",
|
|
139
|
+
"user_agent",
|
|
140
|
+
"user_agent_overwrite",
|
|
141
|
+
"user_agent_use_env",
|
|
142
|
+
"user_agent",
|
|
143
|
+
"sdk_moniker",
|
|
144
|
+
"logging_enable",
|
|
145
|
+
"logger",
|
|
146
|
+
"response_encoding",
|
|
147
|
+
"proxies",
|
|
148
|
+
"raw_request_hook",
|
|
149
|
+
"raw_response_hook",
|
|
150
|
+
"network_span_namer",
|
|
151
|
+
"tracing_attributes",
|
|
152
|
+
"permit_redirects",
|
|
153
|
+
"redirect_max",
|
|
154
|
+
"redirect_remove_headers",
|
|
155
|
+
"redirect_on_status_codes",
|
|
156
|
+
"permit_redirects",
|
|
157
|
+
"redirect_max",
|
|
158
|
+
"redirect_remove_headers",
|
|
159
|
+
"redirect_on_status_codes",
|
|
160
|
+
"retry_total",
|
|
161
|
+
"retry_connect",
|
|
162
|
+
"retry_read",
|
|
163
|
+
"retry_status",
|
|
164
|
+
"retry_backoff_factor",
|
|
165
|
+
"retry_backoff_max",
|
|
166
|
+
"retry_mode",
|
|
167
|
+
"retry_on_status_codes",
|
|
168
|
+
"retry_total",
|
|
169
|
+
"retry_connect",
|
|
170
|
+
"retry_read",
|
|
171
|
+
"retry_status",
|
|
172
|
+
"retry_backoff_factor",
|
|
173
|
+
"retry_backoff_max",
|
|
174
|
+
"retry_mode",
|
|
175
|
+
"retry_on_status_codes",
|
|
176
|
+
*_always_reserved,
|
|
177
|
+
],
|
|
178
|
+
PadType.MODEL: [*_always_reserved],
|
|
179
|
+
PadType.PROPERTY: ["self", *_always_reserved],
|
|
180
|
+
PadType.ENUM: ["mro", *_always_reserved],
|
|
181
|
+
PadType.OPERATION_GROUP: [*_always_reserved],
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
CADL_RESERVED_WORDS = {
|
|
185
|
+
PadType.PARAMETER: ["stream"],
|
|
186
|
+
PadType.PROPERTY: RESERVED_MODEL_PROPERTIES,
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
REDEFINED_BUILTINS = [ # we don't pad, but we need to do lint ignores
|
|
190
|
+
"id",
|
|
191
|
+
"min",
|
|
192
|
+
"max",
|
|
193
|
+
"filter",
|
|
194
|
+
"property",
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
BUILTIN_PACKAGES = [
|
|
198
|
+
"array",
|
|
199
|
+
"atexit",
|
|
200
|
+
"binascii",
|
|
201
|
+
"builtins",
|
|
202
|
+
"cmath",
|
|
203
|
+
"errno",
|
|
204
|
+
"faulthandler",
|
|
205
|
+
"fcntl",
|
|
206
|
+
"gc",
|
|
207
|
+
"grp",
|
|
208
|
+
"itertools",
|
|
209
|
+
"marshal",
|
|
210
|
+
"math",
|
|
211
|
+
"posix",
|
|
212
|
+
"pwd",
|
|
213
|
+
"pyexpat",
|
|
214
|
+
"select",
|
|
215
|
+
"spwd",
|
|
216
|
+
"sys",
|
|
217
|
+
"syslog",
|
|
218
|
+
"time",
|
|
219
|
+
"unicodedata",
|
|
220
|
+
"xxsubtype",
|
|
221
|
+
"zlib",
|
|
222
|
+
]
|
|
@@ -0,0 +1,149 @@
|
|
|
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( # pylint: disable=bad-str-strip-call
|
|
86
|
+
ua.strip("--").split("=", maxsplit=1)[1] # pylint: disable=bad-str-strip-call
|
|
87
|
+
)
|
|
88
|
+
for ua in unknown_args
|
|
89
|
+
}
|
|
90
|
+
return args, unknown_args_ret
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def get_body_type_for_description(body_parameter: Dict[str, Any]) -> str:
|
|
94
|
+
if body_parameter["type"]["type"] == "binary":
|
|
95
|
+
return "binary"
|
|
96
|
+
if body_parameter["type"]["type"] == "string":
|
|
97
|
+
return "string"
|
|
98
|
+
return "JSON"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# used if we want to get a string / binary type etc
|
|
102
|
+
KNOWN_TYPES: Dict[str, Dict[str, Any]] = {
|
|
103
|
+
"string": {"type": "string"},
|
|
104
|
+
"binary": {"type": "binary"},
|
|
105
|
+
"anydict": {"type": "dict", "elementType": {"type": "any"}},
|
|
106
|
+
"any-object": {"type": "any-object"},
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
JSON_REGEXP = re.compile(r"^(application|text)/(.+\+)?json$")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def build_policies(
|
|
113
|
+
is_arm: bool,
|
|
114
|
+
async_mode: bool,
|
|
115
|
+
*,
|
|
116
|
+
is_azure_flavor: bool = False,
|
|
117
|
+
tracing: bool = True,
|
|
118
|
+
) -> List[str]:
|
|
119
|
+
if is_azure_flavor:
|
|
120
|
+
# for Azure
|
|
121
|
+
async_prefix = "Async" if async_mode else ""
|
|
122
|
+
policies = [
|
|
123
|
+
"policies.RequestIdPolicy(**kwargs)",
|
|
124
|
+
"self._config.headers_policy",
|
|
125
|
+
"self._config.user_agent_policy",
|
|
126
|
+
"self._config.proxy_policy",
|
|
127
|
+
"policies.ContentDecodePolicy(**kwargs)",
|
|
128
|
+
(f"{async_prefix}ARMAutoResourceProviderRegistrationPolicy()" if is_arm else None),
|
|
129
|
+
"self._config.redirect_policy",
|
|
130
|
+
"self._config.retry_policy",
|
|
131
|
+
"self._config.authentication_policy",
|
|
132
|
+
"self._config.custom_hook_policy",
|
|
133
|
+
"self._config.logging_policy",
|
|
134
|
+
"policies.DistributedTracingPolicy(**kwargs)" if tracing else None,
|
|
135
|
+
"policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None",
|
|
136
|
+
"self._config.http_logging_policy",
|
|
137
|
+
]
|
|
138
|
+
else:
|
|
139
|
+
# for non-Azure
|
|
140
|
+
policies = [
|
|
141
|
+
"self._config.headers_policy",
|
|
142
|
+
"self._config.user_agent_policy",
|
|
143
|
+
"self._config.proxy_policy",
|
|
144
|
+
"policies.ContentDecodePolicy(**kwargs)",
|
|
145
|
+
"self._config.retry_policy",
|
|
146
|
+
"self._config.authentication_policy",
|
|
147
|
+
"self._config.logging_policy",
|
|
148
|
+
]
|
|
149
|
+
return [p for p in policies if p]
|
|
@@ -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 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pygen
|
|
@@ -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": "@azure-tools/typespec-python",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"author": "Microsoft Corporation",
|
|
5
5
|
"description": "TypeSpec emitter for Python SDKs",
|
|
6
6
|
"homepage": "https://github.com/Azure/autorest.python",
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
"node": ">=14.0.0"
|
|
28
28
|
},
|
|
29
29
|
"files": [
|
|
30
|
-
"lib/*.cadl",
|
|
31
30
|
"dist/**",
|
|
32
31
|
"!dist/test/**",
|
|
33
|
-
"
|
|
32
|
+
"generator/**",
|
|
33
|
+
"scripts/**"
|
|
34
34
|
],
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"@azure-tools/typespec-azure-core": ">=0.43.0 <1.0.0",
|
|
37
37
|
"@azure-tools/typespec-azure-resource-manager": ">=0.43.0 <1.0.0",
|
|
38
38
|
"@azure-tools/typespec-autorest": ">=0.43.0 <1.0.0",
|
|
39
|
-
"@azure-tools/typespec-client-generator-core": ">=0.43.
|
|
39
|
+
"@azure-tools/typespec-client-generator-core": ">=0.43.1 <1.0.0",
|
|
40
40
|
"@typespec/compiler": ">=0.57.0 <1.0.0",
|
|
41
41
|
"@typespec/http": ">=0.57.0 <1.0.0",
|
|
42
42
|
"@typespec/rest": ">=0.57.0 <1.0.0",
|
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"js-yaml": "~4.1.0",
|
|
53
53
|
"@typespec/openapi3": "~0.57.0",
|
|
54
|
-
"@autorest/
|
|
54
|
+
"@autorest/system-requirements": "~1.0.2",
|
|
55
|
+
"fs-extra": "~11.2.0",
|
|
56
|
+
"semver": "~7.6.2"
|
|
55
57
|
},
|
|
56
58
|
"devDependencies": {
|
|
57
59
|
"@azure-tools/typespec-azure-resource-manager": "~0.43.0",
|
|
@@ -69,7 +71,7 @@
|
|
|
69
71
|
"rimraf": "~5.0.0",
|
|
70
72
|
"typescript": "~5.1.3",
|
|
71
73
|
"@azure-tools/typespec-azure-core": "~0.43.0",
|
|
72
|
-
"@azure-tools/typespec-client-generator-core": "~0.43.
|
|
74
|
+
"@azure-tools/typespec-client-generator-core": "~0.43.1",
|
|
73
75
|
"@typespec/compiler": "~0.57.0",
|
|
74
76
|
"@typespec/http": "~0.57.0",
|
|
75
77
|
"@typespec/rest": "~0.57.0",
|
|
@@ -82,6 +84,7 @@
|
|
|
82
84
|
"test": "mocha",
|
|
83
85
|
"test-official": "c8 mocha --forbid-only",
|
|
84
86
|
"lint": "eslint . --ext .ts --max-warnings=0",
|
|
85
|
-
"lint:fix": "eslint . --fix --ext .ts"
|
|
87
|
+
"lint:fix": "eslint . --fix --ext .ts",
|
|
88
|
+
"install": "node ./scripts/run-python3.cjs ./scripts/install.py"
|
|
86
89
|
}
|
|
87
90
|
}
|
|
Binary file
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
import sys
|
|
9
|
+
|
|
10
|
+
if not sys.version_info >= (3, 8, 0):
|
|
11
|
+
raise Exception("Autorest for Python extension requires Python 3.8 at least")
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
import pip
|
|
15
|
+
except ImportError:
|
|
16
|
+
raise Exception("Your Python installation doesn't have pip available")
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
import venv
|
|
20
|
+
except ImportError:
|
|
21
|
+
raise Exception("Your Python installation doesn't have venv available")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Now we have pip and Py >= 3.8, go to work
|
|
25
|
+
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
from venvtools import ExtendedEnvBuilder, python_run
|
|
29
|
+
|
|
30
|
+
_ROOT_DIR = Path(__file__).parent.parent
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def main():
|
|
34
|
+
venv_path = _ROOT_DIR / "venv"
|
|
35
|
+
if venv_path.exists():
|
|
36
|
+
env_builder = venv.EnvBuilder(with_pip=True)
|
|
37
|
+
venv_context = env_builder.ensure_directories(venv_path)
|
|
38
|
+
else:
|
|
39
|
+
env_builder = ExtendedEnvBuilder(with_pip=True, upgrade_deps=True)
|
|
40
|
+
env_builder.create(venv_path)
|
|
41
|
+
venv_context = env_builder.context
|
|
42
|
+
|
|
43
|
+
python_run(venv_context, "pip", ["install", "-U", "pip"])
|
|
44
|
+
python_run(venv_context, "pip", ["install", "-r", f"{_ROOT_DIR}/generator/requirements.txt"])
|
|
45
|
+
python_run(venv_context, "pip", ["install", "-e", f"{_ROOT_DIR}/generator"])
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if __name__ == "__main__":
|
|
49
|
+
main()
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
import argparse
|
|
11
|
+
|
|
12
|
+
if not sys.version_info >= (3, 8, 0):
|
|
13
|
+
raise Exception("Autorest for Python extension requires Python 3.8 at least")
|
|
14
|
+
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
import venv
|
|
17
|
+
|
|
18
|
+
from venvtools import python_run
|
|
19
|
+
|
|
20
|
+
_ROOT_DIR = Path(__file__).parent.parent
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main():
|
|
24
|
+
venv_path = _ROOT_DIR / "venv"
|
|
25
|
+
venv_prexists = venv_path.exists()
|
|
26
|
+
|
|
27
|
+
assert venv_prexists # Otherwise install was not done
|
|
28
|
+
|
|
29
|
+
env_builder = venv.EnvBuilder(with_pip=True)
|
|
30
|
+
venv_context = env_builder.ensure_directories(venv_path)
|
|
31
|
+
try:
|
|
32
|
+
python_run(venv_context, "pip", ["install", "-r", f"{_ROOT_DIR}/generator/dev_requirements.txt"])
|
|
33
|
+
except FileNotFoundError as e:
|
|
34
|
+
raise ValueError(e.filename)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
main()
|