@typespec/http-client-python 0.6.11 → 0.7.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/emitter/emitter.d.ts.map +1 -1
- package/dist/emitter/emitter.js +77 -49
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/lib.d.ts +28 -1
- package/dist/emitter/lib.d.ts.map +1 -1
- package/dist/emitter/lib.js +21 -1
- package/dist/emitter/lib.js.map +1 -1
- package/emitter/src/emitter.ts +78 -49
- package/emitter/src/lib.ts +22 -1
- package/emitter/temp/tsconfig.tsbuildinfo +1 -1
- package/eng/scripts/Build-Packages.ps1 +3 -2
- package/eng/scripts/ci/regenerate.ts +31 -4
- package/eng/scripts/ci/run_apiview.py +5 -0
- package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
- package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +0 -10
- package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +1 -1
- package/generator/component-detection-pip-report.json +2 -2
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +0 -10
- package/generator/pygen/codegen/templates/serialization.py.jinja2 +1 -1
- package/package.json +23 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../emitter/src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGX,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,WAAW,EAAY,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../emitter/src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAGX,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,WAAW,EAAY,MAAM,oBAAoB,CAAC;AAS3D,OAAO,EAAE,oBAAoB,EAAsC,MAAM,UAAU,CAAC;AAKpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAcjE;AAsDD,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,oBAAoB,CAAC,iBA+HvE"}
|
package/dist/emitter/emitter.js
CHANGED
|
@@ -3,12 +3,14 @@ import { NoTarget } from "@typespec/compiler";
|
|
|
3
3
|
import { execSync } from "child_process";
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import path, { dirname } from "path";
|
|
6
|
+
import process from "process";
|
|
6
7
|
import { loadPyodide } from "pyodide";
|
|
7
8
|
import { fileURLToPath } from "url";
|
|
8
9
|
import { emitCodeModel } from "./code-model.js";
|
|
9
10
|
import { saveCodeModelAsYaml } from "./external-process.js";
|
|
10
11
|
import { reportDiagnostic } from "./lib.js";
|
|
11
12
|
import { runPython3 } from "./run-python3.js";
|
|
13
|
+
import { disableGenerationMap, simpleTypesMap, typesMap } from "./types.js";
|
|
12
14
|
import { removeUnderscoresFromNamespace } from "./utils.js";
|
|
13
15
|
export function getModelsMode(context) {
|
|
14
16
|
const specifiedModelsMode = context.emitContext.options["models-mode"];
|
|
@@ -17,7 +19,11 @@ export function getModelsMode(context) {
|
|
|
17
19
|
if (modelModes.includes(specifiedModelsMode)) {
|
|
18
20
|
return specifiedModelsMode;
|
|
19
21
|
}
|
|
20
|
-
|
|
22
|
+
reportDiagnostic(context.program, {
|
|
23
|
+
code: "invalid-models-mode",
|
|
24
|
+
target: NoTarget,
|
|
25
|
+
format: { inValidValue: specifiedModelsMode },
|
|
26
|
+
});
|
|
21
27
|
}
|
|
22
28
|
return "dpg";
|
|
23
29
|
}
|
|
@@ -58,7 +64,14 @@ async function createPythonSdkContext(context) {
|
|
|
58
64
|
__endpointPathParameters: [],
|
|
59
65
|
};
|
|
60
66
|
}
|
|
67
|
+
function cleanAllCache() {
|
|
68
|
+
typesMap.clear();
|
|
69
|
+
simpleTypesMap.clear();
|
|
70
|
+
disableGenerationMap.clear();
|
|
71
|
+
}
|
|
61
72
|
export async function $onEmit(context) {
|
|
73
|
+
// clean all cache to make sure emitter could work in watch mode
|
|
74
|
+
cleanAllCache();
|
|
62
75
|
const program = context.program;
|
|
63
76
|
const sdkContext = await createPythonSdkContext(context);
|
|
64
77
|
const root = path.join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
@@ -110,57 +123,72 @@ export async function $onEmit(context) {
|
|
|
110
123
|
resolvedOptions["use-pyodide"] = true;
|
|
111
124
|
}
|
|
112
125
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
fs.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
warnings.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
else {
|
|
146
|
-
// here we run with native python
|
|
147
|
-
let venvPath = path.join(root, "venv");
|
|
148
|
-
if (fs.existsSync(path.join(venvPath, "bin"))) {
|
|
149
|
-
venvPath = path.join(venvPath, "bin", "python");
|
|
150
|
-
}
|
|
151
|
-
else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
|
|
152
|
-
venvPath = path.join(venvPath, "Scripts", "python.exe");
|
|
126
|
+
try {
|
|
127
|
+
if (resolvedOptions["use-pyodide"]) {
|
|
128
|
+
// here we run with pyodide
|
|
129
|
+
const pyodide = await setupPyodideCall(root);
|
|
130
|
+
// create the output folder if not exists
|
|
131
|
+
if (!fs.existsSync(outputDir)) {
|
|
132
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
// mount output folder to pyodide
|
|
135
|
+
pyodide.FS.mkdirTree("/output");
|
|
136
|
+
pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: outputDir }, "/output");
|
|
137
|
+
// mount yaml file to pyodide
|
|
138
|
+
pyodide.FS.mkdirTree("/yaml");
|
|
139
|
+
pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.dirname(yamlPath) }, "/yaml");
|
|
140
|
+
const globals = pyodide.toPy({
|
|
141
|
+
outputFolder: "/output",
|
|
142
|
+
yamlFile: `/yaml/${path.basename(yamlPath)}`,
|
|
143
|
+
commandArgs,
|
|
144
|
+
});
|
|
145
|
+
const pythonCode = `
|
|
146
|
+
async def main():
|
|
147
|
+
import warnings
|
|
148
|
+
with warnings.catch_warnings():
|
|
149
|
+
warnings.simplefilter("ignore", SyntaxWarning) # bc of m2r2 dep issues
|
|
150
|
+
from pygen import m2r, preprocess, codegen, black
|
|
151
|
+
m2r.M2R(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
|
|
152
|
+
preprocess.PreProcessPlugin(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
|
|
153
|
+
codegen.CodeGenerator(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
|
|
154
|
+
black.BlackScriptPlugin(output_folder=outputFolder, **commandArgs).process()
|
|
155
|
+
|
|
156
|
+
await main()`;
|
|
157
|
+
await pyodide.runPythonAsync(pythonCode, { globals });
|
|
153
158
|
}
|
|
154
159
|
else {
|
|
155
|
-
|
|
160
|
+
// here we run with native python
|
|
161
|
+
let venvPath = path.join(root, "venv");
|
|
162
|
+
if (fs.existsSync(path.join(venvPath, "bin"))) {
|
|
163
|
+
venvPath = path.join(venvPath, "bin", "python");
|
|
164
|
+
}
|
|
165
|
+
else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
|
|
166
|
+
venvPath = path.join(venvPath, "Scripts", "python.exe");
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
reportDiagnostic(program, {
|
|
170
|
+
code: "pyodide-flag-conflict",
|
|
171
|
+
target: NoTarget,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
commandArgs["output-folder"] = outputDir;
|
|
175
|
+
commandArgs["cadl-file"] = yamlPath;
|
|
176
|
+
const commandFlags = Object.entries(commandArgs)
|
|
177
|
+
.map(([key, value]) => `--${key}=${value}`)
|
|
178
|
+
.join(" ");
|
|
179
|
+
const command = `${venvPath} ${root}/eng/scripts/setup/run_tsp.py ${commandFlags}`;
|
|
180
|
+
execSync(command, { stdio: [process.stdin, process.stdout] });
|
|
156
181
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
const errStackStart = "========================================= error stack start ================================================";
|
|
185
|
+
const errStackEnd = "========================================= error stack end ================================================";
|
|
186
|
+
const errStack = error.stack ? `\n${errStackStart}\n${error.stack}\n${errStackEnd}` : "";
|
|
187
|
+
reportDiagnostic(program, {
|
|
188
|
+
code: "unknown-error",
|
|
189
|
+
target: NoTarget,
|
|
190
|
+
format: { stack: errStack },
|
|
191
|
+
});
|
|
164
192
|
}
|
|
165
193
|
}
|
|
166
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../emitter/src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAIjB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAe,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAA0C,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,UAAU,aAAa,CAAC,OAAmB;IAC/C,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvE,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC7C,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../emitter/src/emitter.ts"],"names":[],"mappings":"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"}
|
package/dist/emitter/lib.d.ts
CHANGED
|
@@ -22,15 +22,42 @@ export interface PythonSdkContext<TServiceOperation extends SdkServiceOperation>
|
|
|
22
22
|
__endpointPathParameters: Record<string, any>[];
|
|
23
23
|
}
|
|
24
24
|
export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
25
|
+
"unknown-error": {
|
|
26
|
+
readonly default: import("@typespec/compiler").CallableMessage<["stack"]>;
|
|
27
|
+
};
|
|
28
|
+
"invalid-models-mode": {
|
|
29
|
+
readonly default: import("@typespec/compiler").CallableMessage<["inValidValue"]>;
|
|
30
|
+
};
|
|
31
|
+
"pyodide-flag-conflict": {
|
|
32
|
+
readonly default: "Python is not installed. Please follow https://www.python.org/ to install Python or set 'use-pyodide' to true.";
|
|
33
|
+
};
|
|
25
34
|
"no-valid-client": {
|
|
26
35
|
readonly default: "Can't generate Python SDK since no client defined in typespec file.";
|
|
27
36
|
};
|
|
28
37
|
}, PythonEmitterOptions, never>;
|
|
29
|
-
export declare const reportDiagnostic: <C extends "no-valid-client", M extends keyof {
|
|
38
|
+
export declare const reportDiagnostic: <C extends "unknown-error" | "invalid-models-mode" | "pyodide-flag-conflict" | "no-valid-client", M extends keyof {
|
|
39
|
+
"unknown-error": {
|
|
40
|
+
readonly default: import("@typespec/compiler").CallableMessage<["stack"]>;
|
|
41
|
+
};
|
|
42
|
+
"invalid-models-mode": {
|
|
43
|
+
readonly default: import("@typespec/compiler").CallableMessage<["inValidValue"]>;
|
|
44
|
+
};
|
|
45
|
+
"pyodide-flag-conflict": {
|
|
46
|
+
readonly default: "Python is not installed. Please follow https://www.python.org/ to install Python or set 'use-pyodide' to true.";
|
|
47
|
+
};
|
|
30
48
|
"no-valid-client": {
|
|
31
49
|
readonly default: "Can't generate Python SDK since no client defined in typespec file.";
|
|
32
50
|
};
|
|
33
51
|
}[C]>(program: import("@typespec/compiler").Program, diag: import("@typespec/compiler").DiagnosticReport<{
|
|
52
|
+
"unknown-error": {
|
|
53
|
+
readonly default: import("@typespec/compiler").CallableMessage<["stack"]>;
|
|
54
|
+
};
|
|
55
|
+
"invalid-models-mode": {
|
|
56
|
+
readonly default: import("@typespec/compiler").CallableMessage<["inValidValue"]>;
|
|
57
|
+
};
|
|
58
|
+
"pyodide-flag-conflict": {
|
|
59
|
+
readonly default: "Python is not installed. Please follow https://www.python.org/ to install Python or set 'use-pyodide' to true.";
|
|
60
|
+
};
|
|
34
61
|
"no-valid-client": {
|
|
35
62
|
readonly default: "Can't generate Python SDK since no client defined in typespec file.";
|
|
36
63
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../emitter/src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAG9F,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB,CAAC,iBAAiB,SAAS,mBAAmB,CAC7E,SAAQ,UAAU,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;IAC3D,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CACjD;
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../emitter/src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAG9F,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB,CAAC,iBAAiB,SAAS,mBAAmB,CAC7E,SAAQ,UAAU,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;IAC3D,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CACjD;AA+DD,eAAO,MAAM,IAAI;;;;;;;;;;;;;+BAAgC,CAAC;AAClD,eAAO,MAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAE,iBAAiB,4BAAE,SAAS,wFAAS,CAAC"}
|
package/dist/emitter/lib.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createTypeSpecLibrary } from "@typespec/compiler";
|
|
1
|
+
import { createTypeSpecLibrary, paramMessage } from "@typespec/compiler";
|
|
2
2
|
const EmitterOptionsSchema = {
|
|
3
3
|
type: "object",
|
|
4
4
|
additionalProperties: true,
|
|
@@ -26,6 +26,26 @@ const EmitterOptionsSchema = {
|
|
|
26
26
|
const libDef = {
|
|
27
27
|
name: "@typespec/http-client-python",
|
|
28
28
|
diagnostics: {
|
|
29
|
+
// error
|
|
30
|
+
"unknown-error": {
|
|
31
|
+
severity: "error",
|
|
32
|
+
messages: {
|
|
33
|
+
default: paramMessage `Can't generate Python client code from this TypeSpec. Please open an issue on https://github.com/microsoft/typespec'.${"stack"}`,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
"invalid-models-mode": {
|
|
37
|
+
severity: "error",
|
|
38
|
+
messages: {
|
|
39
|
+
default: paramMessage `Invalid value '${"inValidValue"}' for 'models-mode' of tspconfig.yaml and expected values are 'dpg'/'none'.`,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
"pyodide-flag-conflict": {
|
|
43
|
+
severity: "error",
|
|
44
|
+
messages: {
|
|
45
|
+
default: "Python is not installed. Please follow https://www.python.org/ to install Python or set 'use-pyodide' to true.",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
// warning
|
|
29
49
|
"no-valid-client": {
|
|
30
50
|
severity: "warning",
|
|
31
51
|
messages: {
|
package/dist/emitter/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../emitter/src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../emitter/src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA6BzF,MAAM,oBAAoB,GAAyC;IACjE,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,IAAI;IAC1B,UAAU,EAAE;QACV,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACrD,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChD,0BAA0B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/D,qBAAqB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzD,wBAAwB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5D,qBAAqB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzD,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5C,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1C,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE;QAC3E,2BAA2B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChE,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;KACnD;IACD,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE;QACX,QAAQ;QACR,eAAe,EAAE;YACf,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,wHAAwH,OAAO,EAAE;aACvJ;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,kBAAkB,cAAc,6EAA6E;aACnI;SACF;QACD,uBAAuB,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EACL,gHAAgH;aACnH;SACF;QACD,UAAU;QACV,iBAAiB,EAAE;YACjB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE;gBACR,OAAO,EAAE,qEAAqE;aAC/E;SACF;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,oBAA4D;KACtE;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC"}
|
package/emitter/src/emitter.ts
CHANGED
|
@@ -8,12 +8,14 @@ import { EmitContext, NoTarget } from "@typespec/compiler";
|
|
|
8
8
|
import { execSync } from "child_process";
|
|
9
9
|
import fs from "fs";
|
|
10
10
|
import path, { dirname } from "path";
|
|
11
|
+
import process from "process";
|
|
11
12
|
import { loadPyodide } from "pyodide";
|
|
12
13
|
import { fileURLToPath } from "url";
|
|
13
14
|
import { emitCodeModel } from "./code-model.js";
|
|
14
15
|
import { saveCodeModelAsYaml } from "./external-process.js";
|
|
15
16
|
import { PythonEmitterOptions, PythonSdkContext, reportDiagnostic } from "./lib.js";
|
|
16
17
|
import { runPython3 } from "./run-python3.js";
|
|
18
|
+
import { disableGenerationMap, simpleTypesMap, typesMap } from "./types.js";
|
|
17
19
|
import { removeUnderscoresFromNamespace } from "./utils.js";
|
|
18
20
|
|
|
19
21
|
export function getModelsMode(context: SdkContext): "dpg" | "none" {
|
|
@@ -23,9 +25,11 @@ export function getModelsMode(context: SdkContext): "dpg" | "none" {
|
|
|
23
25
|
if (modelModes.includes(specifiedModelsMode)) {
|
|
24
26
|
return specifiedModelsMode;
|
|
25
27
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
reportDiagnostic(context.program, {
|
|
29
|
+
code: "invalid-models-mode",
|
|
30
|
+
target: NoTarget,
|
|
31
|
+
format: { inValidValue: specifiedModelsMode },
|
|
32
|
+
});
|
|
29
33
|
}
|
|
30
34
|
return "dpg";
|
|
31
35
|
}
|
|
@@ -76,7 +80,16 @@ async function createPythonSdkContext<TServiceOperation extends SdkServiceOperat
|
|
|
76
80
|
};
|
|
77
81
|
}
|
|
78
82
|
|
|
83
|
+
function cleanAllCache() {
|
|
84
|
+
typesMap.clear();
|
|
85
|
+
simpleTypesMap.clear();
|
|
86
|
+
disableGenerationMap.clear();
|
|
87
|
+
}
|
|
88
|
+
|
|
79
89
|
export async function $onEmit(context: EmitContext<PythonEmitterOptions>) {
|
|
90
|
+
// clean all cache to make sure emitter could work in watch mode
|
|
91
|
+
cleanAllCache();
|
|
92
|
+
|
|
80
93
|
const program = context.program;
|
|
81
94
|
const sdkContext = await createPythonSdkContext<SdkHttpOperation>(context);
|
|
82
95
|
const root = path.join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
@@ -134,54 +147,70 @@ export async function $onEmit(context: EmitContext<PythonEmitterOptions>) {
|
|
|
134
147
|
}
|
|
135
148
|
}
|
|
136
149
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
fs.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
warnings.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
// here we run with native python
|
|
170
|
-
let venvPath = path.join(root, "venv");
|
|
171
|
-
if (fs.existsSync(path.join(venvPath, "bin"))) {
|
|
172
|
-
venvPath = path.join(venvPath, "bin", "python");
|
|
173
|
-
} else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
|
|
174
|
-
venvPath = path.join(venvPath, "Scripts", "python.exe");
|
|
150
|
+
try {
|
|
151
|
+
if (resolvedOptions["use-pyodide"]) {
|
|
152
|
+
// here we run with pyodide
|
|
153
|
+
const pyodide = await setupPyodideCall(root);
|
|
154
|
+
// create the output folder if not exists
|
|
155
|
+
if (!fs.existsSync(outputDir)) {
|
|
156
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
157
|
+
}
|
|
158
|
+
// mount output folder to pyodide
|
|
159
|
+
pyodide.FS.mkdirTree("/output");
|
|
160
|
+
pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: outputDir }, "/output");
|
|
161
|
+
// mount yaml file to pyodide
|
|
162
|
+
pyodide.FS.mkdirTree("/yaml");
|
|
163
|
+
pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.dirname(yamlPath) }, "/yaml");
|
|
164
|
+
const globals = pyodide.toPy({
|
|
165
|
+
outputFolder: "/output",
|
|
166
|
+
yamlFile: `/yaml/${path.basename(yamlPath)}`,
|
|
167
|
+
commandArgs,
|
|
168
|
+
});
|
|
169
|
+
const pythonCode = `
|
|
170
|
+
async def main():
|
|
171
|
+
import warnings
|
|
172
|
+
with warnings.catch_warnings():
|
|
173
|
+
warnings.simplefilter("ignore", SyntaxWarning) # bc of m2r2 dep issues
|
|
174
|
+
from pygen import m2r, preprocess, codegen, black
|
|
175
|
+
m2r.M2R(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
|
|
176
|
+
preprocess.PreProcessPlugin(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
|
|
177
|
+
codegen.CodeGenerator(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
|
|
178
|
+
black.BlackScriptPlugin(output_folder=outputFolder, **commandArgs).process()
|
|
179
|
+
|
|
180
|
+
await main()`;
|
|
181
|
+
await pyodide.runPythonAsync(pythonCode, { globals });
|
|
175
182
|
} else {
|
|
176
|
-
|
|
183
|
+
// here we run with native python
|
|
184
|
+
let venvPath = path.join(root, "venv");
|
|
185
|
+
if (fs.existsSync(path.join(venvPath, "bin"))) {
|
|
186
|
+
venvPath = path.join(venvPath, "bin", "python");
|
|
187
|
+
} else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
|
|
188
|
+
venvPath = path.join(venvPath, "Scripts", "python.exe");
|
|
189
|
+
} else {
|
|
190
|
+
reportDiagnostic(program, {
|
|
191
|
+
code: "pyodide-flag-conflict",
|
|
192
|
+
target: NoTarget,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
commandArgs["output-folder"] = outputDir;
|
|
196
|
+
commandArgs["cadl-file"] = yamlPath;
|
|
197
|
+
const commandFlags = Object.entries(commandArgs)
|
|
198
|
+
.map(([key, value]) => `--${key}=${value}`)
|
|
199
|
+
.join(" ");
|
|
200
|
+
const command = `${venvPath} ${root}/eng/scripts/setup/run_tsp.py ${commandFlags}`;
|
|
201
|
+
execSync(command, { stdio: [process.stdin, process.stdout] });
|
|
177
202
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const
|
|
184
|
-
|
|
203
|
+
} catch (error: any) {
|
|
204
|
+
const errStackStart =
|
|
205
|
+
"========================================= error stack start ================================================";
|
|
206
|
+
const errStackEnd =
|
|
207
|
+
"========================================= error stack end ================================================";
|
|
208
|
+
const errStack = error.stack ? `\n${errStackStart}\n${error.stack}\n${errStackEnd}` : "";
|
|
209
|
+
reportDiagnostic(program, {
|
|
210
|
+
code: "unknown-error",
|
|
211
|
+
target: NoTarget,
|
|
212
|
+
format: { stack: errStack },
|
|
213
|
+
});
|
|
185
214
|
}
|
|
186
215
|
}
|
|
187
216
|
}
|
package/emitter/src/lib.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SdkContext, SdkServiceOperation } from "@azure-tools/typespec-client-generator-core";
|
|
2
|
-
import { createTypeSpecLibrary, JSONSchemaType } from "@typespec/compiler";
|
|
2
|
+
import { createTypeSpecLibrary, JSONSchemaType, paramMessage } from "@typespec/compiler";
|
|
3
3
|
|
|
4
4
|
export interface PythonEmitterOptions {
|
|
5
5
|
"package-version"?: string;
|
|
@@ -56,6 +56,27 @@ const EmitterOptionsSchema: JSONSchemaType<PythonEmitterOptions> = {
|
|
|
56
56
|
const libDef = {
|
|
57
57
|
name: "@typespec/http-client-python",
|
|
58
58
|
diagnostics: {
|
|
59
|
+
// error
|
|
60
|
+
"unknown-error": {
|
|
61
|
+
severity: "error",
|
|
62
|
+
messages: {
|
|
63
|
+
default: paramMessage`Can't generate Python client code from this TypeSpec. Please open an issue on https://github.com/microsoft/typespec'.${"stack"}`,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
"invalid-models-mode": {
|
|
67
|
+
severity: "error",
|
|
68
|
+
messages: {
|
|
69
|
+
default: paramMessage`Invalid value '${"inValidValue"}' for 'models-mode' of tspconfig.yaml and expected values are 'dpg'/'none'.`,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
"pyodide-flag-conflict": {
|
|
73
|
+
severity: "error",
|
|
74
|
+
messages: {
|
|
75
|
+
default:
|
|
76
|
+
"Python is not installed. Please follow https://www.python.org/ to install Python or set 'use-pyodide' to true.",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
// warning
|
|
59
80
|
"no-valid-client": {
|
|
60
81
|
severity: "warning",
|
|
61
82
|
messages: {
|