@typespec/http-client-python 0.4.3 → 0.5.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 (139) hide show
  1. package/dist/emitter/emitter.d.ts.map +1 -1
  2. package/dist/emitter/emitter.js +85 -24
  3. package/dist/emitter/emitter.js.map +1 -1
  4. package/dist/emitter/lib.d.ts +1 -0
  5. package/dist/emitter/lib.d.ts.map +1 -1
  6. package/dist/emitter/lib.js +1 -0
  7. package/dist/emitter/lib.js.map +1 -1
  8. package/dist/emitter/run-python3.d.ts +2 -0
  9. package/dist/emitter/run-python3.d.ts.map +1 -0
  10. package/dist/emitter/run-python3.js +19 -0
  11. package/dist/emitter/run-python3.js.map +1 -0
  12. package/dist/emitter/system-requirements.d.ts +17 -0
  13. package/dist/emitter/system-requirements.d.ts.map +1 -0
  14. package/dist/emitter/system-requirements.js +167 -0
  15. package/dist/emitter/system-requirements.js.map +1 -0
  16. package/emitter/src/emitter.ts +88 -23
  17. package/emitter/src/lib.ts +2 -0
  18. package/emitter/src/run-python3.ts +20 -0
  19. package/emitter/src/system-requirements.ts +261 -0
  20. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  21. package/eng/scripts/ci/regenerate.ts +16 -4
  22. package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
  23. package/eng/scripts/setup/build.ts +16 -0
  24. package/eng/scripts/setup/build_pygen_wheel.py +40 -0
  25. package/eng/scripts/setup/install.py +9 -3
  26. package/eng/scripts/setup/install.ts +32 -0
  27. package/eng/scripts/setup/prepare.py +3 -1
  28. package/eng/scripts/setup/prepare.ts +11 -0
  29. package/eng/scripts/setup/run-python3.ts +1 -6
  30. package/generator/build/lib/pygen/__init__.py +107 -0
  31. package/generator/build/lib/pygen/_version.py +7 -0
  32. package/generator/build/lib/pygen/black.py +71 -0
  33. package/generator/build/lib/pygen/codegen/__init__.py +357 -0
  34. package/generator/build/lib/pygen/codegen/_utils.py +17 -0
  35. package/generator/build/lib/pygen/codegen/models/__init__.py +204 -0
  36. package/generator/build/lib/pygen/codegen/models/base.py +186 -0
  37. package/generator/build/lib/pygen/codegen/models/base_builder.py +118 -0
  38. package/generator/build/lib/pygen/codegen/models/client.py +435 -0
  39. package/generator/build/lib/pygen/codegen/models/code_model.py +237 -0
  40. package/generator/build/lib/pygen/codegen/models/combined_type.py +149 -0
  41. package/generator/build/lib/pygen/codegen/models/constant_type.py +129 -0
  42. package/generator/build/lib/pygen/codegen/models/credential_types.py +214 -0
  43. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +127 -0
  44. package/generator/build/lib/pygen/codegen/models/enum_type.py +238 -0
  45. package/generator/build/lib/pygen/codegen/models/imports.py +291 -0
  46. package/generator/build/lib/pygen/codegen/models/list_type.py +143 -0
  47. package/generator/build/lib/pygen/codegen/models/lro_operation.py +142 -0
  48. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +32 -0
  49. package/generator/build/lib/pygen/codegen/models/model_type.py +357 -0
  50. package/generator/build/lib/pygen/codegen/models/operation.py +509 -0
  51. package/generator/build/lib/pygen/codegen/models/operation_group.py +184 -0
  52. package/generator/build/lib/pygen/codegen/models/paging_operation.py +155 -0
  53. package/generator/build/lib/pygen/codegen/models/parameter.py +412 -0
  54. package/generator/build/lib/pygen/codegen/models/parameter_list.py +387 -0
  55. package/generator/build/lib/pygen/codegen/models/primitive_types.py +659 -0
  56. package/generator/build/lib/pygen/codegen/models/property.py +170 -0
  57. package/generator/build/lib/pygen/codegen/models/request_builder.py +189 -0
  58. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +115 -0
  59. package/generator/build/lib/pygen/codegen/models/response.py +348 -0
  60. package/generator/build/lib/pygen/codegen/models/utils.py +21 -0
  61. package/generator/build/lib/pygen/codegen/serializers/__init__.py +574 -0
  62. package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +21 -0
  63. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +1533 -0
  64. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +294 -0
  65. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +15 -0
  66. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +213 -0
  67. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +126 -0
  68. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +198 -0
  69. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +33 -0
  70. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +335 -0
  71. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +89 -0
  72. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +44 -0
  73. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +221 -0
  74. package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +19 -0
  75. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +52 -0
  76. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +168 -0
  77. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +292 -0
  78. package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +31 -0
  79. package/generator/build/lib/pygen/codegen/serializers/utils.py +68 -0
  80. package/generator/build/lib/pygen/codegen/templates/client.py.jinja2 +37 -0
  81. package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +12 -0
  82. package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +73 -0
  83. package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +16 -0
  84. package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +28 -0
  85. package/generator/build/lib/pygen/codegen/templates/enum.py.jinja2 +13 -0
  86. package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +10 -0
  87. package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +24 -0
  88. package/generator/build/lib/pygen/codegen/templates/keywords.jinja2 +27 -0
  89. package/generator/build/lib/pygen/codegen/templates/lro_operation.py.jinja2 +16 -0
  90. package/generator/build/lib/pygen/codegen/templates/lro_paging_operation.py.jinja2 +18 -0
  91. package/generator/build/lib/pygen/codegen/templates/macros.jinja2 +12 -0
  92. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +167 -0
  93. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +1174 -0
  94. package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +15 -0
  95. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +97 -0
  96. package/generator/build/lib/pygen/codegen/templates/model_init.py.jinja2 +33 -0
  97. package/generator/build/lib/pygen/codegen/templates/model_msrest.py.jinja2 +92 -0
  98. package/generator/build/lib/pygen/codegen/templates/operation.py.jinja2 +21 -0
  99. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +75 -0
  100. package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +19 -0
  101. package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +81 -0
  102. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +17 -0
  103. package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +6 -0
  104. package/generator/build/lib/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +21 -0
  105. package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +8 -0
  106. package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +107 -0
  107. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +9 -0
  108. package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +108 -0
  109. package/generator/build/lib/pygen/codegen/templates/paging_operation.py.jinja2 +21 -0
  110. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +19 -0
  111. package/generator/build/lib/pygen/codegen/templates/pkgutil_init.py.jinja2 +1 -0
  112. package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +28 -0
  113. package/generator/build/lib/pygen/codegen/templates/request_builders.py.jinja2 +10 -0
  114. package/generator/build/lib/pygen/codegen/templates/rest_init.py.jinja2 +12 -0
  115. package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +44 -0
  116. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +2117 -0
  117. package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +50 -0
  118. package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +26 -0
  119. package/generator/build/lib/pygen/codegen/templates/types.py.jinja2 +7 -0
  120. package/generator/build/lib/pygen/codegen/templates/validation.py.jinja2 +38 -0
  121. package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +96 -0
  122. package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +4 -0
  123. package/generator/build/lib/pygen/m2r.py +65 -0
  124. package/generator/build/lib/pygen/preprocess/__init__.py +515 -0
  125. package/generator/build/lib/pygen/preprocess/helpers.py +27 -0
  126. package/generator/build/lib/pygen/preprocess/python_mappings.py +226 -0
  127. package/generator/build/lib/pygen/utils.py +163 -0
  128. package/generator/component-detection-pip-report.json +134 -0
  129. package/generator/dev_requirements.txt +0 -1
  130. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  131. package/generator/pygen/m2r.py +1 -1
  132. package/generator/pygen.egg-info/PKG-INFO +7 -4
  133. package/generator/pygen.egg-info/requires.txt +7 -4
  134. package/generator/requirements.txt +5 -10
  135. package/generator/setup.py +7 -4
  136. package/generator/test/azure/requirements.txt +2 -0
  137. package/generator/test/generic_mock_api_tests/unittests/test_m2r.py +10 -0
  138. package/generator/test/unbranded/requirements.txt +2 -0
  139. package/package.json +6 -5
@@ -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;AAO3D,OAAO,EAAE,oBAAoB,EAAsC,MAAM,UAAU,CAAC;AAGpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAYjE;AA8CD,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,oBAAoB,CAAC,iBA4DvE"}
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,iBA0GvE"}
@@ -3,10 +3,12 @@ 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 { loadPyodide } from "pyodide";
6
7
  import { fileURLToPath } from "url";
7
8
  import { emitCodeModel } from "./code-model.js";
8
9
  import { saveCodeModelAsYaml } from "./external-process.js";
9
10
  import { reportDiagnostic } from "./lib.js";
11
+ import { runPython3 } from "./run-python3.js";
10
12
  import { removeUnderscoresFromNamespace } from "./utils.js";
11
13
  export function getModelsMode(context) {
12
14
  const specifiedModelsMode = context.emitContext.options["models-mode"];
@@ -66,48 +68,107 @@ export async function $onEmit(context) {
66
68
  });
67
69
  return;
68
70
  }
69
- addDefaultOptions(sdkContext);
70
71
  const yamlPath = await saveCodeModelAsYaml("python-yaml-path", yamlMap);
71
- let venvPath = path.join(root, "venv");
72
- if (fs.existsSync(path.join(venvPath, "bin"))) {
73
- venvPath = path.join(venvPath, "bin", "python");
74
- }
75
- else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
76
- venvPath = path.join(venvPath, "Scripts", "python.exe");
77
- }
78
- else {
79
- throw new Error("Virtual environment doesn't exist.");
80
- }
81
- const commandArgs = [
82
- venvPath,
83
- `${root}/eng/scripts/setup/run_tsp.py`,
84
- `--output-folder=${outputDir}`,
85
- `--cadl-file=${yamlPath}`,
86
- ];
72
+ addDefaultOptions(sdkContext);
87
73
  const resolvedOptions = sdkContext.emitContext.options;
74
+ const commandArgs = {};
88
75
  if (resolvedOptions["packaging-files-config"]) {
89
76
  const keyValuePairs = Object.entries(resolvedOptions["packaging-files-config"]).map(([key, value]) => {
90
77
  return `${key}:${value}`;
91
78
  });
92
- commandArgs.push(`--packaging-files-config='${keyValuePairs.join("|")}'`);
79
+ commandArgs["packaging-files-config"] = keyValuePairs.join("|");
93
80
  resolvedOptions["packaging-files-config"] = undefined;
94
81
  }
95
82
  if (resolvedOptions["package-pprint-name"] !== undefined &&
96
83
  !resolvedOptions["package-pprint-name"].startsWith('"')) {
97
- resolvedOptions["package-pprint-name"] = `"${resolvedOptions["package-pprint-name"]}"`;
84
+ resolvedOptions["package-pprint-name"] = `${resolvedOptions["package-pprint-name"]}`;
98
85
  }
99
86
  for (const [key, value] of Object.entries(resolvedOptions)) {
100
- commandArgs.push(`--${key}=${value}`);
87
+ commandArgs[key] = value;
101
88
  }
102
89
  if (sdkContext.arm === true) {
103
- commandArgs.push("--azure-arm=true");
90
+ commandArgs["azure-arm"] = "true";
104
91
  }
105
92
  if (resolvedOptions.flavor === "azure") {
106
- commandArgs.push("--emit-cross-language-definition-file=true");
93
+ commandArgs["emit-cross-language-definition-file"] = "true";
107
94
  }
108
- commandArgs.push("--from-typespec=true");
95
+ commandArgs["from-typespec"] = "true";
109
96
  if (!program.compilerOptions.noEmit && !program.hasError()) {
110
- execSync(commandArgs.join(" "));
97
+ // if not using pyodide and there's no venv, we try to create venv
98
+ if (!resolvedOptions["use-pyodide"] && !fs.existsSync(path.join(root, "venv"))) {
99
+ try {
100
+ await runPython3(path.join(root, "/eng/scripts/setup/install.py"));
101
+ await runPython3(path.join(root, "/eng/scripts/setup/prepare.py"));
102
+ }
103
+ catch (error) {
104
+ // if the python env is not ready, we use pyodide instead
105
+ resolvedOptions["use-pyodide"] = true;
106
+ }
107
+ }
108
+ if (resolvedOptions["use-pyodide"]) {
109
+ // here we run with pyodide
110
+ const pyodide = await setupPyodideCall(root);
111
+ // create the output folder if not exists
112
+ if (!fs.existsSync(outputDir)) {
113
+ fs.mkdirSync(outputDir, { recursive: true });
114
+ }
115
+ // mount output folder to pyodide
116
+ pyodide.FS.mkdirTree("/output");
117
+ pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: outputDir }, "/output");
118
+ // mount yaml file to pyodide
119
+ pyodide.FS.mkdirTree("/yaml");
120
+ pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.dirname(yamlPath) }, "/yaml");
121
+ const globals = pyodide.toPy({
122
+ outputFolder: "/output",
123
+ yamlFile: `/yaml/${path.basename(yamlPath)}`,
124
+ commandArgs,
125
+ });
126
+ const pythonCode = `
127
+ async def main():
128
+ import warnings
129
+ with warnings.catch_warnings():
130
+ warnings.simplefilter("ignore", SyntaxWarning) # bc of m2r2 dep issues
131
+ from pygen import m2r, preprocess, codegen, black
132
+ m2r.M2R(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
133
+ preprocess.PreProcessPlugin(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
134
+ codegen.CodeGenerator(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
135
+ black.BlackScriptPlugin(output_folder=outputFolder, **commandArgs).process()
136
+
137
+ await main()`;
138
+ await pyodide.runPythonAsync(pythonCode, { globals });
139
+ }
140
+ else {
141
+ // here we run with native python
142
+ let venvPath = path.join(root, "venv");
143
+ if (fs.existsSync(path.join(venvPath, "bin"))) {
144
+ venvPath = path.join(venvPath, "bin", "python");
145
+ }
146
+ else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
147
+ venvPath = path.join(venvPath, "Scripts", "python.exe");
148
+ }
149
+ else {
150
+ throw new Error("Virtual environment doesn't exist.");
151
+ }
152
+ commandArgs["output-folder"] = outputDir;
153
+ commandArgs["cadl-file"] = yamlPath;
154
+ const commandFlags = Object.entries(commandArgs)
155
+ .map(([key, value]) => `--${key}=${value}`)
156
+ .join(" ");
157
+ const command = `${venvPath} ${root}/eng/scripts/setup/run_tsp.py ${commandFlags}`;
158
+ execSync(command);
159
+ }
111
160
  }
112
161
  }
162
+ async function setupPyodideCall(root) {
163
+ const pyodide = await loadPyodide({
164
+ indexURL: path.dirname(fileURLToPath(import.meta.resolve("pyodide"))),
165
+ });
166
+ // mount generator to pyodide
167
+ pyodide.FS.mkdirTree("/generator");
168
+ pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.join(root, "generator") }, "/generator");
169
+ await pyodide.loadPackage("micropip");
170
+ const micropip = pyodide.pyimport("micropip");
171
+ await micropip.install("emfs:/generator/dist/pygen-0.1.0-py3-none-any.whl");
172
+ return pyodide;
173
+ }
113
174
  //# sourceMappingURL=emitter.js.map
@@ -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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"}
@@ -15,6 +15,7 @@ export interface PythonEmitterOptions {
15
15
  debug?: boolean;
16
16
  flavor?: "azure";
17
17
  "examples-dir"?: string;
18
+ "use-pyodide"?: boolean;
18
19
  }
19
20
  export interface PythonSdkContext<TServiceOperation extends SdkServiceOperation> extends SdkContext<PythonEmitterOptions, TServiceOperation> {
20
21
  __endpointPathParameters: Record<string, any>[];
@@ -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;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;AAwCD,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;IACxB,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;AAyCD,eAAO,MAAM,IAAI;;;;+BAAgC,CAAC;AAClD,eAAO,MAAQ,gBAAgB;;;;;;;;mBAAE,iBAAiB,4BAAE,SAAS,wFAAS,CAAC"}
@@ -18,6 +18,7 @@ const EmitterOptionsSchema = {
18
18
  debug: { type: "boolean", nullable: true },
19
19
  flavor: { type: "string", nullable: true },
20
20
  "examples-dir": { type: "string", nullable: true, format: "absolute-path" },
21
+ "use-pyodide": { type: "boolean", nullable: true },
21
22
  },
22
23
  required: [],
23
24
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../emitter/src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;AAyB3E,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;KAC5E;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,MAAM,oBAAoB,CAAC;AA0B3E,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,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"}
@@ -0,0 +1,2 @@
1
+ export declare function runPython3(...args: string[]): Promise<void>;
2
+ //# sourceMappingURL=run-python3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-python3.d.ts","sourceRoot":"","sources":["../../emitter/src/run-python3.ts"],"names":[],"mappings":"AAWA,wBAAsB,UAAU,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,iBAQjD"}
@@ -0,0 +1,19 @@
1
+ // This script wraps logic in @azure-tools/extension to resolve
2
+ // the path to Python 3 so that a Python script file can be run
3
+ // from an npm script in package.json. It uses the same Python 3
4
+ // path resolution algorithm as AutoRest so that the behavior
5
+ // is fully consistent (and also supports AUTOREST_PYTHON_EXE).
6
+ //
7
+ // Invoke it like so: "tsx run-python3.ts script.py"
8
+ import cp from "child_process";
9
+ import { patchPythonPath } from "./system-requirements.js";
10
+ export async function runPython3(...args) {
11
+ const command = await patchPythonPath(["python", ...args], {
12
+ version: ">=3.8",
13
+ environmentVariable: "AUTOREST_PYTHON_EXE",
14
+ });
15
+ cp.execSync(command.join(" "), {
16
+ stdio: [0, 1, 2],
17
+ });
18
+ }
19
+ //# sourceMappingURL=run-python3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-python3.js","sourceRoot":"","sources":["../../emitter/src/run-python3.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,iEAAiE;AACjE,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,oDAAoD;AAEpD,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAG,IAAc;IAChD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE;QACzD,OAAO,EAAE,OAAO;QAChB,mBAAmB,EAAE,qBAAqB;KAC3C,CAAC,CAAC;IACH,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC7B,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACjB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @param command list of the command and arguments. First item in array must be a python exe @see KnownPythonExe. (e.g. ["python", "my_python_file.py"]
3
+ * @param requirement
4
+ */
5
+ export declare const patchPythonPath: (command: PythonCommandLine, requirement: SystemRequirement) => Promise<string[]>;
6
+ type KnownPythonExe = "python.exe" | "python3.exe" | "python" | "python3";
7
+ type PythonCommandLine = [KnownPythonExe, ...string[]];
8
+ interface SystemRequirement {
9
+ version?: string;
10
+ /**
11
+ * Name of an environment variable where the user could provide the path to the exe.
12
+ * @example "AUTOREST_PYTHON_PATH"
13
+ */
14
+ environmentVariable?: string;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=system-requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-requirements.d.ts","sourceRoot":"","sources":["../../emitter/src/system-requirements.ts"],"names":[],"mappings":"AAwLA;;;GAGG;AACH,eAAO,MAAM,eAAe,YACjB,iBAAiB,eACb,iBAAiB,KAC7B,OAAO,CAAC,MAAM,EAAE,CAOlB,CAAC;AAOF,KAAK,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC1E,KAAK,iBAAiB,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAQvD,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,167 @@
1
+ import { spawn } from "child_process";
2
+ import { coerce, satisfies } from "semver";
3
+ /*
4
+ * Copied from @autorest/system-requirements
5
+ */
6
+ const execute = (command, cmdlineargs, options = {}) => {
7
+ return new Promise((resolve, reject) => {
8
+ const cp = spawn(command, cmdlineargs, { ...options, stdio: "pipe", shell: true });
9
+ if (options.onCreate) {
10
+ options.onCreate(cp);
11
+ }
12
+ options.onStdOutData && cp.stdout.on("data", options.onStdOutData);
13
+ options.onStdErrData && cp.stderr.on("data", options.onStdErrData);
14
+ let err = "";
15
+ let out = "";
16
+ let all = "";
17
+ cp.stderr.on("data", (chunk) => {
18
+ err += chunk;
19
+ all += chunk;
20
+ });
21
+ cp.stdout.on("data", (chunk) => {
22
+ out += chunk;
23
+ all += chunk;
24
+ });
25
+ cp.on("error", (err) => {
26
+ reject(err);
27
+ });
28
+ cp.on("close", (code, signal) => resolve({
29
+ stdout: out,
30
+ stderr: err,
31
+ log: all,
32
+ error: code ? new Error("Process Failed.") : null,
33
+ code,
34
+ }));
35
+ });
36
+ };
37
+ const versionIsSatisfied = (version, requirement) => {
38
+ const cleanedVersion = coerce(version);
39
+ if (!cleanedVersion) {
40
+ throw new Error(`Invalid version ${version}.`);
41
+ }
42
+ return satisfies(cleanedVersion, requirement, true);
43
+ };
44
+ /**
45
+ * Validate the provided system requirement resolution is satisfying the version requirement if applicable.
46
+ * @param resolution Command resolution.
47
+ * @param actualVersion Version for that resolution.
48
+ * @param requirement Requirement.
49
+ * @returns the resolution if it is valid or an @see SystemRequirementError if not.
50
+ */
51
+ const validateVersionRequirement = (resolution, actualVersion, requirement) => {
52
+ if (!requirement.version) {
53
+ return resolution; // No version requirement.
54
+ }
55
+ try {
56
+ if (versionIsSatisfied(actualVersion, requirement.version)) {
57
+ return resolution;
58
+ }
59
+ return {
60
+ ...resolution,
61
+ error: true,
62
+ message: `'${resolution.command}' version is '${actualVersion}' but doesn't satisfy requirement '${requirement.version}'. Please update.`,
63
+ actualVersion: actualVersion,
64
+ neededVersion: requirement.version,
65
+ };
66
+ }
67
+ catch {
68
+ return {
69
+ ...resolution,
70
+ error: true,
71
+ message: `Couldn't parse the version ${actualVersion}. This is not a valid semver version.`,
72
+ actualVersion: actualVersion,
73
+ neededVersion: requirement.version,
74
+ };
75
+ }
76
+ };
77
+ const tryPython = async (requirement, command, additionalArgs = []) => {
78
+ const resolution = {
79
+ name: PythonRequirement,
80
+ command,
81
+ additionalArgs: additionalArgs.length > 0 ? additionalArgs : undefined,
82
+ };
83
+ try {
84
+ const result = await execute(command, [
85
+ ...additionalArgs,
86
+ "-c",
87
+ `"${PRINT_PYTHON_VERSION_SCRIPT}"`,
88
+ ]);
89
+ return validateVersionRequirement(resolution, result.stdout.trim(), requirement);
90
+ }
91
+ catch (e) {
92
+ return {
93
+ error: true,
94
+ ...resolution,
95
+ message: `'${command}' command line is not found in the path. Make sure to have it installed.`,
96
+ };
97
+ }
98
+ };
99
+ /**
100
+ * Returns the path to the executable as asked in the requirement.
101
+ * @param requirement System requirement definition.
102
+ * @returns If the requirement provide an environment variable for the path returns the value of that environment variable. undefined otherwise.
103
+ */
104
+ const getExecutablePath = (requirement) => requirement.environmentVariable && process.env[requirement.environmentVariable];
105
+ const createPythonErrorMessage = (requirement, errors) => {
106
+ const versionReq = requirement.version ?? "*";
107
+ const lines = [
108
+ `Couldn't find a valid python interpreter satisfying the requirement (version: ${versionReq}). Tried:`,
109
+ ...errors.map((x) => ` - ${x.command} (${x.message})`),
110
+ ];
111
+ return {
112
+ error: true,
113
+ name: "python",
114
+ command: "python",
115
+ message: lines.join("\n"),
116
+ };
117
+ };
118
+ const resolvePythonRequirement = async (requirement) => {
119
+ // Hardcoding AUTOREST_PYTHON_EXE is for backward compatibility
120
+ const path = getExecutablePath(requirement) ?? process.env["AUTOREST_PYTHON_EXE"];
121
+ if (path) {
122
+ return await tryPython(requirement, path);
123
+ }
124
+ const errors = [];
125
+ // On windows try `py` executable with `-3` flag.
126
+ if (process.platform === "win32") {
127
+ const pyResult = await tryPython(requirement, "py", ["-3"]);
128
+ if ("error" in pyResult) {
129
+ errors.push(pyResult);
130
+ }
131
+ else {
132
+ return pyResult;
133
+ }
134
+ }
135
+ const python3Result = await tryPython(requirement, "python3");
136
+ if ("error" in python3Result) {
137
+ errors.push(python3Result);
138
+ }
139
+ else {
140
+ return python3Result;
141
+ }
142
+ const pythonResult = await tryPython(requirement, "python");
143
+ if ("error" in pythonResult) {
144
+ errors.push(pythonResult);
145
+ }
146
+ else {
147
+ return pythonResult;
148
+ }
149
+ return createPythonErrorMessage(requirement, errors);
150
+ };
151
+ /**
152
+ * @param command list of the command and arguments. First item in array must be a python exe @see KnownPythonExe. (e.g. ["python", "my_python_file.py"]
153
+ * @param requirement
154
+ */
155
+ export const patchPythonPath = async (command, requirement) => {
156
+ const [_, ...args] = command;
157
+ const resolution = await resolvePythonRequirement(requirement);
158
+ if ("error" in resolution) {
159
+ throw new Error(`Failed to find compatible python version. ${resolution.message}`);
160
+ }
161
+ return [resolution.command, ...(resolution.additionalArgs ?? []), ...args];
162
+ };
163
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
164
+ // TYPES
165
+ const PythonRequirement = "python";
166
+ const PRINT_PYTHON_VERSION_SCRIPT = "import sys; print('.'.join(map(str, sys.version_info[:3])))";
167
+ //# sourceMappingURL=system-requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-requirements.js","sourceRoot":"","sources":["../../emitter/src/system-requirements.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,12 @@ 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 { loadPyodide } from "pyodide";
11
12
  import { fileURLToPath } from "url";
12
13
  import { emitCodeModel } from "./code-model.js";
13
14
  import { saveCodeModelAsYaml } from "./external-process.js";
14
15
  import { PythonEmitterOptions, PythonSdkContext, reportDiagnostic } from "./lib.js";
16
+ import { runPython3 } from "./run-python3.js";
15
17
  import { removeUnderscoresFromNamespace } from "./utils.js";
16
18
 
17
19
  export function getModelsMode(context: SdkContext): "dpg" | "none" {
@@ -85,51 +87,114 @@ export async function $onEmit(context: EmitContext<PythonEmitterOptions>) {
85
87
  });
86
88
  return;
87
89
  }
88
-
89
- addDefaultOptions(sdkContext);
90
90
  const yamlPath = await saveCodeModelAsYaml("python-yaml-path", yamlMap);
91
- let venvPath = path.join(root, "venv");
92
- if (fs.existsSync(path.join(venvPath, "bin"))) {
93
- venvPath = path.join(venvPath, "bin", "python");
94
- } else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
95
- venvPath = path.join(venvPath, "Scripts", "python.exe");
96
- } else {
97
- throw new Error("Virtual environment doesn't exist.");
98
- }
99
- const commandArgs = [
100
- venvPath,
101
- `${root}/eng/scripts/setup/run_tsp.py`,
102
- `--output-folder=${outputDir}`,
103
- `--cadl-file=${yamlPath}`,
104
- ];
91
+ addDefaultOptions(sdkContext);
105
92
  const resolvedOptions = sdkContext.emitContext.options;
93
+ const commandArgs: Record<string, string> = {};
106
94
  if (resolvedOptions["packaging-files-config"]) {
107
95
  const keyValuePairs = Object.entries(resolvedOptions["packaging-files-config"]).map(
108
96
  ([key, value]) => {
109
97
  return `${key}:${value}`;
110
98
  },
111
99
  );
112
- commandArgs.push(`--packaging-files-config='${keyValuePairs.join("|")}'`);
100
+ commandArgs["packaging-files-config"] = keyValuePairs.join("|");
113
101
  resolvedOptions["packaging-files-config"] = undefined;
114
102
  }
115
103
  if (
116
104
  resolvedOptions["package-pprint-name"] !== undefined &&
117
105
  !resolvedOptions["package-pprint-name"].startsWith('"')
118
106
  ) {
119
- resolvedOptions["package-pprint-name"] = `"${resolvedOptions["package-pprint-name"]}"`;
107
+ resolvedOptions["package-pprint-name"] = `${resolvedOptions["package-pprint-name"]}`;
120
108
  }
121
109
 
122
110
  for (const [key, value] of Object.entries(resolvedOptions)) {
123
- commandArgs.push(`--${key}=${value}`);
111
+ commandArgs[key] = value;
124
112
  }
125
113
  if (sdkContext.arm === true) {
126
- commandArgs.push("--azure-arm=true");
114
+ commandArgs["azure-arm"] = "true";
127
115
  }
128
116
  if (resolvedOptions.flavor === "azure") {
129
- commandArgs.push("--emit-cross-language-definition-file=true");
117
+ commandArgs["emit-cross-language-definition-file"] = "true";
130
118
  }
131
- commandArgs.push("--from-typespec=true");
119
+ commandArgs["from-typespec"] = "true";
120
+
132
121
  if (!program.compilerOptions.noEmit && !program.hasError()) {
133
- execSync(commandArgs.join(" "));
122
+ // if not using pyodide and there's no venv, we try to create venv
123
+ if (!resolvedOptions["use-pyodide"] && !fs.existsSync(path.join(root, "venv"))) {
124
+ try {
125
+ await runPython3(path.join(root, "/eng/scripts/setup/install.py"));
126
+ await runPython3(path.join(root, "/eng/scripts/setup/prepare.py"));
127
+ } catch (error) {
128
+ // if the python env is not ready, we use pyodide instead
129
+ resolvedOptions["use-pyodide"] = true;
130
+ }
131
+ }
132
+
133
+ if (resolvedOptions["use-pyodide"]) {
134
+ // here we run with pyodide
135
+ const pyodide = await setupPyodideCall(root);
136
+ // create the output folder if not exists
137
+ if (!fs.existsSync(outputDir)) {
138
+ fs.mkdirSync(outputDir, { recursive: true });
139
+ }
140
+ // mount output folder to pyodide
141
+ pyodide.FS.mkdirTree("/output");
142
+ pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: outputDir }, "/output");
143
+ // mount yaml file to pyodide
144
+ pyodide.FS.mkdirTree("/yaml");
145
+ pyodide.FS.mount(pyodide.FS.filesystems.NODEFS, { root: path.dirname(yamlPath) }, "/yaml");
146
+ const globals = pyodide.toPy({
147
+ outputFolder: "/output",
148
+ yamlFile: `/yaml/${path.basename(yamlPath)}`,
149
+ commandArgs,
150
+ });
151
+ const pythonCode = `
152
+ async def main():
153
+ import warnings
154
+ with warnings.catch_warnings():
155
+ warnings.simplefilter("ignore", SyntaxWarning) # bc of m2r2 dep issues
156
+ from pygen import m2r, preprocess, codegen, black
157
+ m2r.M2R(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
158
+ preprocess.PreProcessPlugin(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
159
+ codegen.CodeGenerator(output_folder=outputFolder, cadl_file=yamlFile, **commandArgs).process()
160
+ black.BlackScriptPlugin(output_folder=outputFolder, **commandArgs).process()
161
+
162
+ await main()`;
163
+ await pyodide.runPythonAsync(pythonCode, { globals });
164
+ } else {
165
+ // here we run with native python
166
+ let venvPath = path.join(root, "venv");
167
+ if (fs.existsSync(path.join(venvPath, "bin"))) {
168
+ venvPath = path.join(venvPath, "bin", "python");
169
+ } else if (fs.existsSync(path.join(venvPath, "Scripts"))) {
170
+ venvPath = path.join(venvPath, "Scripts", "python.exe");
171
+ } else {
172
+ throw new Error("Virtual environment doesn't exist.");
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);
181
+ }
134
182
  }
135
183
  }
184
+
185
+ async function setupPyodideCall(root: string) {
186
+ const pyodide = await loadPyodide({
187
+ indexURL: path.dirname(fileURLToPath(import.meta.resolve("pyodide"))),
188
+ });
189
+ // mount generator to pyodide
190
+ pyodide.FS.mkdirTree("/generator");
191
+ pyodide.FS.mount(
192
+ pyodide.FS.filesystems.NODEFS,
193
+ { root: path.join(root, "generator") },
194
+ "/generator",
195
+ );
196
+ await pyodide.loadPackage("micropip");
197
+ const micropip = pyodide.pyimport("micropip");
198
+ await micropip.install("emfs:/generator/dist/pygen-0.1.0-py3-none-any.whl");
199
+ return pyodide;
200
+ }
@@ -17,6 +17,7 @@ export interface PythonEmitterOptions {
17
17
  debug?: boolean;
18
18
  flavor?: "azure";
19
19
  "examples-dir"?: string;
20
+ "use-pyodide"?: boolean;
20
21
  }
21
22
 
22
23
  export interface PythonSdkContext<TServiceOperation extends SdkServiceOperation>
@@ -43,6 +44,7 @@ const EmitterOptionsSchema: JSONSchemaType<PythonEmitterOptions> = {
43
44
  debug: { type: "boolean", nullable: true },
44
45
  flavor: { type: "string", nullable: true },
45
46
  "examples-dir": { type: "string", nullable: true, format: "absolute-path" },
47
+ "use-pyodide": { type: "boolean", nullable: true },
46
48
  },
47
49
  required: [],
48
50
  };
@@ -0,0 +1,20 @@
1
+ // This script wraps logic in @azure-tools/extension to resolve
2
+ // the path to Python 3 so that a Python script file can be run
3
+ // from an npm script in package.json. It uses the same Python 3
4
+ // path resolution algorithm as AutoRest so that the behavior
5
+ // is fully consistent (and also supports AUTOREST_PYTHON_EXE).
6
+ //
7
+ // Invoke it like so: "tsx run-python3.ts script.py"
8
+
9
+ import cp from "child_process";
10
+ import { patchPythonPath } from "./system-requirements.js";
11
+
12
+ export async function runPython3(...args: string[]) {
13
+ const command = await patchPythonPath(["python", ...args], {
14
+ version: ">=3.8",
15
+ environmentVariable: "AUTOREST_PYTHON_EXE",
16
+ });
17
+ cp.execSync(command.join(" "), {
18
+ stdio: [0, 1, 2],
19
+ });
20
+ }