@typespec/http-client-python 0.6.10 → 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.
Files changed (40) hide show
  1. package/dist/emitter/emitter.d.ts.map +1 -1
  2. package/dist/emitter/emitter.js +80 -50
  3. package/dist/emitter/emitter.js.map +1 -1
  4. package/dist/emitter/lib.d.ts +28 -1
  5. package/dist/emitter/lib.d.ts.map +1 -1
  6. package/dist/emitter/lib.js +21 -1
  7. package/dist/emitter/lib.js.map +1 -1
  8. package/emitter/src/emitter.ts +84 -53
  9. package/emitter/src/lib.ts +22 -1
  10. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  11. package/eng/scripts/Build-Packages.ps1 +3 -2
  12. package/eng/scripts/ci/regenerate.ts +34 -4
  13. package/eng/scripts/ci/run_apiview.py +5 -0
  14. package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
  15. package/generator/build/lib/pygen/black.py +13 -2
  16. package/generator/build/lib/pygen/codegen/models/client.py +0 -8
  17. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +18 -33
  18. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +1 -7
  19. package/generator/build/lib/pygen/codegen/templates/client.py.jinja2 +1 -1
  20. package/generator/build/lib/pygen/codegen/templates/macros.jinja2 +0 -4
  21. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +0 -10
  22. package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +0 -3
  23. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +2 -2
  24. package/generator/component-detection-pip-report.json +3 -3
  25. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  26. package/generator/pygen/black.py +13 -2
  27. package/generator/pygen/codegen/models/client.py +0 -8
  28. package/generator/pygen/codegen/serializers/builder_serializer.py +18 -33
  29. package/generator/pygen/codegen/serializers/model_serializer.py +1 -7
  30. package/generator/pygen/codegen/templates/client.py.jinja2 +1 -1
  31. package/generator/pygen/codegen/templates/macros.jinja2 +0 -4
  32. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +0 -10
  33. package/generator/pygen/codegen/templates/operation_tools.jinja2 +0 -3
  34. package/generator/pygen/codegen/templates/serialization.py.jinja2 +2 -2
  35. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_operationtemplates_async.py +92 -0
  36. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_resource_async.py +199 -3
  37. package/generator/test/azure/mock_api_tests/test_azure_arm_operationtemplates.py +80 -0
  38. package/generator/test/azure/mock_api_tests/test_azure_arm_resource.py +187 -3
  39. package/generator/test/azure/requirements.txt +1 -0
  40. package/package.json +30 -28
@@ -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;AAQ3D,OAAO,EAAE,oBAAoB,EAAsC,MAAM,UAAU,CAAC;AAIpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAYjE;AA8CD,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,oBAAoB,CAAC,iBA4GvE"}
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"}
@@ -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
- throw new Error(`Need to specify models mode with the following values: ${modelModes.join(", ")}`);
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
  }
@@ -51,12 +57,21 @@ function addDefaultOptions(sdkContext) {
51
57
  }
52
58
  }
53
59
  async function createPythonSdkContext(context) {
60
+ const sdkContext = await createSdkContext(context, "@azure-tools/typespec-python");
61
+ context.program.reportDiagnostics(sdkContext.diagnostics);
54
62
  return {
55
- ...(await createSdkContext(context, "@azure-tools/typespec-python")),
63
+ ...sdkContext,
56
64
  __endpointPathParameters: [],
57
65
  };
58
66
  }
67
+ function cleanAllCache() {
68
+ typesMap.clear();
69
+ simpleTypesMap.clear();
70
+ disableGenerationMap.clear();
71
+ }
59
72
  export async function $onEmit(context) {
73
+ // clean all cache to make sure emitter could work in watch mode
74
+ cleanAllCache();
60
75
  const program = context.program;
61
76
  const sdkContext = await createPythonSdkContext(context);
62
77
  const root = path.join(dirname(fileURLToPath(import.meta.url)), "..", "..");
@@ -108,57 +123,72 @@ export async function $onEmit(context) {
108
123
  resolvedOptions["use-pyodide"] = true;
109
124
  }
110
125
  }
111
- if (resolvedOptions["use-pyodide"]) {
112
- // here we run with pyodide
113
- const pyodide = await setupPyodideCall(root);
114
- // create the output folder if not exists
115
- if (!fs.existsSync(outputDir)) {
116
- fs.mkdirSync(outputDir, { recursive: true });
117
- }
118
- // mount output folder to pyodide
119
- pyodide.FS.mkdirTree("/output");
120
- pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: outputDir }, "/output");
121
- // mount yaml file to pyodide
122
- pyodide.FS.mkdirTree("/yaml");
123
- pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.dirname(yamlPath) }, "/yaml");
124
- const globals = pyodide.toPy({
125
- outputFolder: "/output",
126
- yamlFile: `/yaml/${path.basename(yamlPath)}`,
127
- commandArgs,
128
- });
129
- const pythonCode = `
130
- async def main():
131
- import warnings
132
- with warnings.catch_warnings():
133
- warnings.simplefilter("ignore", SyntaxWarning) # bc of m2r2 dep issues
134
- from pygen import m2r, preprocess, codegen, black
135
- m2r.M2R(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
136
- preprocess.PreProcessPlugin(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
137
- codegen.CodeGenerator(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
138
- black.BlackScriptPlugin(output_folder=outputFolder, **commandArgs).process()
139
-
140
- await main()`;
141
- await pyodide.runPythonAsync(pythonCode, { globals });
142
- }
143
- else {
144
- // here we run with native python
145
- let venvPath = path.join(root, "venv");
146
- if (fs.existsSync(path.join(venvPath, "bin"))) {
147
- venvPath = path.join(venvPath, "bin", "python");
148
- }
149
- else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
150
- 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 });
151
158
  }
152
159
  else {
153
- throw new Error("Virtual environment doesn't exist.");
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] });
154
181
  }
155
- commandArgs["output-folder"] = outputDir;
156
- commandArgs["cadl-file"] = yamlPath;
157
- const commandFlags = Object.entries(commandArgs)
158
- .map(([key, value]) => `--${key}=${value}`)
159
- .join(" ");
160
- const command = `${venvPath} ${root}/eng/scripts/setup/run_tsp.py ${commandFlags}`;
161
- execSync(command);
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
+ });
162
192
  }
163
193
  }
164
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../emitter/src/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../emitter/src/emitter.ts"],"names":[],"mappings":"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"}
@@ -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;AA0CD,eAAO,MAAM,IAAI;;;;+BAAgC,CAAC;AAClD,eAAO,MAAQ,gBAAgB;;;;;;;;mBAAE,iBAAiB,4BAAE,SAAS,wFAAS,CAAC"}
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"}
@@ -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: {
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../emitter/src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;AA6B3E,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,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"}
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"}
@@ -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
- throw new Error(
27
- `Need to specify models mode with the following values: ${modelModes.join(", ")}`,
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
  }
@@ -65,16 +69,27 @@ function addDefaultOptions(sdkContext: SdkContext) {
65
69
  async function createPythonSdkContext<TServiceOperation extends SdkServiceOperation>(
66
70
  context: EmitContext<PythonEmitterOptions>,
67
71
  ): Promise<PythonSdkContext<TServiceOperation>> {
72
+ const sdkContext = await createSdkContext<PythonEmitterOptions, TServiceOperation>(
73
+ context,
74
+ "@azure-tools/typespec-python",
75
+ );
76
+ context.program.reportDiagnostics(sdkContext.diagnostics);
68
77
  return {
69
- ...(await createSdkContext<PythonEmitterOptions, TServiceOperation>(
70
- context,
71
- "@azure-tools/typespec-python",
72
- )),
78
+ ...sdkContext,
73
79
  __endpointPathParameters: [],
74
80
  };
75
81
  }
76
82
 
83
+ function cleanAllCache() {
84
+ typesMap.clear();
85
+ simpleTypesMap.clear();
86
+ disableGenerationMap.clear();
87
+ }
88
+
77
89
  export async function $onEmit(context: EmitContext<PythonEmitterOptions>) {
90
+ // clean all cache to make sure emitter could work in watch mode
91
+ cleanAllCache();
92
+
78
93
  const program = context.program;
79
94
  const sdkContext = await createPythonSdkContext<SdkHttpOperation>(context);
80
95
  const root = path.join(dirname(fileURLToPath(import.meta.url)), "..", "..");
@@ -132,54 +147,70 @@ export async function $onEmit(context: EmitContext<PythonEmitterOptions>) {
132
147
  }
133
148
  }
134
149
 
135
- if (resolvedOptions["use-pyodide"]) {
136
- // here we run with pyodide
137
- const pyodide = await setupPyodideCall(root);
138
- // create the output folder if not exists
139
- if (!fs.existsSync(outputDir)) {
140
- fs.mkdirSync(outputDir, { recursive: true });
141
- }
142
- // mount output folder to pyodide
143
- pyodide.FS.mkdirTree("/output");
144
- pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: outputDir }, "/output");
145
- // mount yaml file to pyodide
146
- pyodide.FS.mkdirTree("/yaml");
147
- pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.dirname(yamlPath) }, "/yaml");
148
- const globals = pyodide.toPy({
149
- outputFolder: "/output",
150
- yamlFile: `/yaml/${path.basename(yamlPath)}`,
151
- commandArgs,
152
- });
153
- const pythonCode = `
154
- async def main():
155
- import warnings
156
- with warnings.catch_warnings():
157
- warnings.simplefilter("ignore", SyntaxWarning) # bc of m2r2 dep issues
158
- from pygen import m2r, preprocess, codegen, black
159
- m2r.M2R(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
160
- preprocess.PreProcessPlugin(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
161
- codegen.CodeGenerator(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
162
- black.BlackScriptPlugin(output_folder=outputFolder, **commandArgs).process()
163
-
164
- await main()`;
165
- await pyodide.runPythonAsync(pythonCode, { globals });
166
- } else {
167
- // here we run with native python
168
- let venvPath = path.join(root, "venv");
169
- if (fs.existsSync(path.join(venvPath, "bin"))) {
170
- venvPath = path.join(venvPath, "bin", "python");
171
- } else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
172
- 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 });
173
182
  } else {
174
- throw new Error("Virtual environment doesn't exist.");
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] });
175
202
  }
176
- commandArgs["output-folder"] = outputDir;
177
- commandArgs["cadl-file"] = yamlPath;
178
- const commandFlags = Object.entries(commandArgs)
179
- .map(([key, value]) => `--${key}=${value}`)
180
- .join(" ");
181
- const command = `${venvPath} ${root}/eng/scripts/setup/run_tsp.py ${commandFlags}`;
182
- execSync(command);
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
+ });
183
214
  }
184
215
  }
185
216
  }
@@ -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: {