@typespec/http-client-python 0.33.0 → 0.34.1

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 (86) hide show
  1. package/README.md +25 -3
  2. package/dist/emitter/emitter.d.ts.map +1 -1
  3. package/dist/emitter/emitter.js +2 -11
  4. package/dist/emitter/emitter.js.map +1 -1
  5. package/dist/emitter/external-process.d.ts +14 -0
  6. package/dist/emitter/external-process.d.ts.map +1 -1
  7. package/dist/emitter/external-process.js +17 -1
  8. package/dist/emitter/external-process.js.map +1 -1
  9. package/dist/emitter/lib.js +1 -1
  10. package/dist/emitter/lib.js.map +1 -1
  11. package/dist/emitter/node-runner.d.ts.map +1 -1
  12. package/dist/emitter/node-runner.js +2 -1
  13. package/dist/emitter/node-runner.js.map +1 -1
  14. package/dist/emitter/types.d.ts.map +1 -1
  15. package/dist/emitter/types.js +2 -0
  16. package/dist/emitter/types.js.map +1 -1
  17. package/dist/emitter/utils.d.ts +10 -0
  18. package/dist/emitter/utils.d.ts.map +1 -1
  19. package/dist/emitter/utils.js +12 -0
  20. package/dist/emitter/utils.js.map +1 -1
  21. package/emitter/src/emitter.ts +2 -14
  22. package/emitter/src/external-process.ts +18 -1
  23. package/emitter/src/lib.ts +1 -1
  24. package/emitter/src/node-runner.ts +2 -1
  25. package/emitter/src/types.ts +2 -0
  26. package/emitter/src/utils.ts +13 -0
  27. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  28. package/emitter/test/external-process.test.ts +28 -0
  29. package/emitter/test/utils.test.ts +12 -1
  30. package/eng/scripts/ci/regenerate-common.ts +40 -15
  31. package/eng/scripts/setup/__pycache__/package_manager.cpython-311.pyc +0 -0
  32. package/eng/scripts/setup/__pycache__/venvtools.cpython-311.pyc +0 -0
  33. package/generator/build/lib/pygen/__init__.py +3 -3
  34. package/generator/build/lib/pygen/codegen/models/__init__.py +4 -2
  35. package/generator/build/lib/pygen/codegen/models/code_model.py +27 -5
  36. package/generator/build/lib/pygen/codegen/models/combined_type.py +3 -3
  37. package/generator/build/lib/pygen/codegen/models/enum_type.py +75 -25
  38. package/generator/build/lib/pygen/codegen/models/list_type.py +10 -4
  39. package/generator/build/lib/pygen/codegen/models/model_type.py +149 -4
  40. package/generator/build/lib/pygen/codegen/models/operation.py +1 -0
  41. package/generator/build/lib/pygen/codegen/models/paging_operation.py +5 -1
  42. package/generator/build/lib/pygen/codegen/models/parameter.py +2 -2
  43. package/generator/build/lib/pygen/codegen/models/primitive_types.py +30 -6
  44. package/generator/build/lib/pygen/codegen/models/property.py +21 -8
  45. package/generator/build/lib/pygen/codegen/models/response.py +16 -3
  46. package/generator/build/lib/pygen/codegen/models/utils.py +3 -6
  47. package/generator/build/lib/pygen/codegen/serializers/__init__.py +46 -11
  48. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +48 -15
  49. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -1
  50. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +127 -3
  51. package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +356 -12
  52. package/generator/build/lib/pygen/codegen/serializers/unions_serializer.py +44 -0
  53. package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +1 -1
  54. package/generator/build/lib/pygen/codegen/templates/types.py.jinja2 +51 -2
  55. package/generator/build/lib/pygen/codegen/templates/unions.py.jinja2 +9 -0
  56. package/generator/build/lib/pygen/preprocess/__init__.py +175 -162
  57. package/generator/build/lib/pygen/utils.py +6 -24
  58. package/generator/component-detection-pip-report.json +9 -9
  59. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  60. package/generator/pygen/__init__.py +3 -3
  61. package/generator/pygen/codegen/models/__init__.py +4 -2
  62. package/generator/pygen/codegen/models/code_model.py +27 -5
  63. package/generator/pygen/codegen/models/combined_type.py +3 -3
  64. package/generator/pygen/codegen/models/enum_type.py +75 -25
  65. package/generator/pygen/codegen/models/list_type.py +10 -4
  66. package/generator/pygen/codegen/models/model_type.py +149 -4
  67. package/generator/pygen/codegen/models/operation.py +1 -0
  68. package/generator/pygen/codegen/models/paging_operation.py +5 -1
  69. package/generator/pygen/codegen/models/parameter.py +2 -2
  70. package/generator/pygen/codegen/models/primitive_types.py +30 -6
  71. package/generator/pygen/codegen/models/property.py +21 -8
  72. package/generator/pygen/codegen/models/response.py +16 -3
  73. package/generator/pygen/codegen/models/utils.py +3 -6
  74. package/generator/pygen/codegen/serializers/__init__.py +46 -11
  75. package/generator/pygen/codegen/serializers/builder_serializer.py +48 -15
  76. package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -1
  77. package/generator/pygen/codegen/serializers/model_serializer.py +127 -3
  78. package/generator/pygen/codegen/serializers/types_serializer.py +356 -12
  79. package/generator/pygen/codegen/serializers/unions_serializer.py +44 -0
  80. package/generator/pygen/codegen/templates/model_container.py.jinja2 +1 -1
  81. package/generator/pygen/codegen/templates/types.py.jinja2 +51 -2
  82. package/generator/pygen/codegen/templates/unions.py.jinja2 +9 -0
  83. package/generator/pygen/preprocess/__init__.py +175 -162
  84. package/generator/pygen/utils.py +6 -24
  85. package/generator/pygen.egg-info/SOURCES.txt +2 -0
  86. package/package.json +5 -5
@@ -16,6 +16,7 @@ import { blackExcludeDirs, PYGEN_WHEEL_FILENAME } from "./constants.js";
16
16
  import { saveCodeModelAsYaml } from "./external-process.js";
17
17
  import { PythonEmitterOptions, reportDiagnostic } from "./lib.js";
18
18
  import { runPython3 } from "./run-python3.js";
19
+ import { quoteShellArg } from "./utils.js";
19
20
 
20
21
  export interface RunNodeEmitArgs {
21
22
  context: EmitContext<PythonEmitterOptions>;
@@ -106,7 +107,7 @@ export async function runNodeEmit({
106
107
  commandArgs["output-folder"] = outputDir;
107
108
  commandArgs["tsp-file"] = yamlPath;
108
109
  const commandFlags = Object.entries(commandArgs)
109
- .map(([key, value]) => `--${key}=${value}`)
110
+ .map(([key, value]) => `--${key}=${quoteShellArg(String(value))}`)
110
111
  .join(" ");
111
112
  const command = `${venvPath} ${root}/eng/scripts/setup/run_tsp.py ${commandFlags}`;
112
113
  execSync(command);
@@ -233,6 +233,7 @@ function emitProperty(
233
233
  // Python convert all the type of file part to FileType so clear these models' usage so that they won't be generated
234
234
  addDisableGenerationMap(context, property.type);
235
235
  }
236
+ const isNullable = !isMultipartFileInput && sourceType.kind === "nullable";
236
237
  return {
237
238
  clientName: getClientName(property),
238
239
  isExactName: property.isExactName,
@@ -242,6 +243,7 @@ function emitProperty(
242
243
  : property.serializationOptions?.json?.name) ?? property.name,
243
244
  type: getType(context, sourceType),
244
245
  optional: property.optional,
246
+ nullable: isNullable,
245
247
  description: property.summary ? property.summary : property.doc,
246
248
  addedOn: getAddedOn(context, property),
247
249
  apiVersions: property.apiVersions,
@@ -268,6 +268,19 @@ export function capitalize(name: string): string {
268
268
  return name[0].toUpperCase() + name.slice(1);
269
269
  }
270
270
 
271
+ /**
272
+ * Quotes a value so it can be safely embedded in a shell command line.
273
+ *
274
+ * The value is wrapped in double quotes (handling spaces and other separators)
275
+ * and any embedded double quotes are escaped. This quoting must only be applied
276
+ * when the value is passed through a shell (e.g. `execSync`); it must never be
277
+ * baked into the option value itself, otherwise the quotes leak into non-shell
278
+ * consumers such as the Pyodide runtime and end up in generated files.
279
+ */
280
+ export function quoteShellArg(value: string): string {
281
+ return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
282
+ }
283
+
271
284
  // Library namespaces that should not be used as client namespaces
272
285
  const LIB_NAMESPACE = [
273
286
  "azure.core",