@typespec/http-client-python 0.28.3 → 0.29.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 (99) hide show
  1. package/dist/emitter/code-model.d.ts.map +1 -1
  2. package/dist/emitter/code-model.js +1 -0
  3. package/dist/emitter/code-model.js.map +1 -1
  4. package/dist/emitter/constants.d.ts +6 -0
  5. package/dist/emitter/constants.d.ts.map +1 -0
  6. package/dist/emitter/constants.js +27 -0
  7. package/dist/emitter/constants.js.map +1 -0
  8. package/dist/emitter/emitter.d.ts.map +1 -1
  9. package/dist/emitter/emitter.js +169 -94
  10. package/dist/emitter/emitter.js.map +1 -1
  11. package/dist/emitter/http.d.ts.map +1 -1
  12. package/dist/emitter/http.js +33 -1
  13. package/dist/emitter/http.js.map +1 -1
  14. package/dist/emitter/lib.d.ts +33 -2
  15. package/dist/emitter/lib.d.ts.map +1 -1
  16. package/dist/emitter/lib.js +17 -0
  17. package/dist/emitter/lib.js.map +1 -1
  18. package/dist/emitter/run-python3.js +1 -1
  19. package/dist/emitter/run-python3.js.map +1 -1
  20. package/dist/emitter/types.d.ts.map +1 -1
  21. package/dist/emitter/types.js +31 -5
  22. package/dist/emitter/types.js.map +1 -1
  23. package/emitter/src/code-model.ts +1 -0
  24. package/emitter/src/constants.ts +27 -0
  25. package/emitter/src/emitter.ts +216 -96
  26. package/emitter/src/http.ts +29 -1
  27. package/emitter/src/lib.ts +20 -0
  28. package/emitter/src/run-python3.ts +1 -1
  29. package/emitter/src/types.ts +35 -5
  30. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  31. package/emitter/test/utils.test.ts +3 -0
  32. package/emitter/tsconfig.build.json +2 -1
  33. package/emitter/tsconfig.json +2 -1
  34. package/eng/scripts/ci/config/eslint-ci.config.mjs +10 -0
  35. package/eng/scripts/ci/config/mypy.ini +1 -1
  36. package/eng/scripts/ci/config/pylintrc +1 -1
  37. package/eng/scripts/ci/config/pyrightconfig.json +1 -1
  38. package/eng/scripts/ci/dev_requirements.txt +1 -1
  39. package/eng/scripts/ci/lint.ts +11 -4
  40. package/eng/scripts/ci/regenerate-common.ts +407 -136
  41. package/eng/scripts/ci/regenerate.ts +103 -194
  42. package/eng/scripts/ci/run-tests.ts +153 -48
  43. package/eng/scripts/ci/run_apiview.py +22 -16
  44. package/eng/scripts/ci/run_mypy.py +28 -18
  45. package/eng/scripts/ci/run_pylint.py +23 -16
  46. package/eng/scripts/ci/run_pyright.py +5 -2
  47. package/eng/scripts/ci/run_sphinx_build.py +24 -9
  48. package/eng/scripts/ci/util.py +61 -25
  49. package/eng/scripts/setup/__pycache__/package_manager.cpython-311.pyc +0 -0
  50. package/eng/scripts/setup/__pycache__/venvtools.cpython-311.pyc +0 -0
  51. package/eng/scripts/setup/build_pygen_wheel.py +3 -3
  52. package/eng/scripts/setup/install.py +3 -3
  53. package/eng/scripts/setup/install.ts +1 -1
  54. package/eng/scripts/setup/prepare.py +2 -2
  55. package/eng/scripts/setup/run-python3.ts +1 -1
  56. package/eng/scripts/setup/run_batch.py +197 -0
  57. package/eng/scripts/setup/venvtools.py +0 -1
  58. package/generator/build/lib/pygen/__init__.py +1 -3
  59. package/generator/build/lib/pygen/codegen/__init__.py +0 -1
  60. package/generator/build/lib/pygen/codegen/models/base.py +0 -1
  61. package/generator/build/lib/pygen/codegen/models/client.py +2 -1
  62. package/generator/build/lib/pygen/codegen/models/code_model.py +1 -0
  63. package/generator/build/lib/pygen/codegen/models/enum_type.py +0 -1
  64. package/generator/build/lib/pygen/codegen/models/model_type.py +1 -7
  65. package/generator/build/lib/pygen/codegen/models/parameter.py +16 -14
  66. package/generator/build/lib/pygen/codegen/serializers/__init__.py +27 -12
  67. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +12 -3
  68. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +6 -2
  69. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +17 -4
  70. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +17 -11
  71. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +19 -7
  72. package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +11 -3
  73. package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +1 -1
  74. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +5 -1
  75. package/generator/build/lib/pygen/preprocess/__init__.py +37 -30
  76. package/generator/component-detection-pip-report.json +7 -7
  77. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  78. package/generator/pygen/__init__.py +1 -3
  79. package/generator/pygen/codegen/__init__.py +0 -1
  80. package/generator/pygen/codegen/models/base.py +0 -1
  81. package/generator/pygen/codegen/models/client.py +2 -1
  82. package/generator/pygen/codegen/models/code_model.py +1 -0
  83. package/generator/pygen/codegen/models/enum_type.py +0 -1
  84. package/generator/pygen/codegen/models/model_type.py +1 -7
  85. package/generator/pygen/codegen/models/parameter.py +16 -14
  86. package/generator/pygen/codegen/serializers/__init__.py +27 -12
  87. package/generator/pygen/codegen/serializers/builder_serializer.py +12 -3
  88. package/generator/pygen/codegen/serializers/general_serializer.py +6 -2
  89. package/generator/pygen/codegen/serializers/import_serializer.py +17 -4
  90. package/generator/pygen/codegen/serializers/parameter_serializer.py +17 -11
  91. package/generator/pygen/codegen/templates/model_base.py.jinja2 +19 -7
  92. package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +11 -3
  93. package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +1 -1
  94. package/generator/pygen/codegen/templates/serialization.py.jinja2 +5 -1
  95. package/generator/pygen/preprocess/__init__.py +37 -30
  96. package/generator/pygen.egg-info/PKG-INFO +1 -2
  97. package/generator/pygen.egg-info/requires.txt +1 -1
  98. package/generator/setup.py +1 -2
  99. package/package.json +24 -9
@@ -19,17 +19,22 @@ from datetime import datetime, date, time, timedelta, timezone
19
19
  from json import JSONEncoder
20
20
  import xml.etree.ElementTree as ET
21
21
  from collections.abc import MutableMapping
22
- from typing_extensions import Self
23
22
  import isodate
24
23
  from {{ code_model.core_library }}.exceptions import DeserializationError
25
24
  from {{ code_model.core_library }}{{ "" if code_model.is_azure_flavor else ".utils" }} import CaseInsensitiveEnumMeta
26
25
  from {{ code_model.core_library }}.{{ "" if code_model.is_azure_flavor else "runtime." }}pipeline import PipelineResponse
27
26
  from {{ code_model.core_library }}.serialization import _Null
27
+
28
28
  {% if code_model.has_external_type %}
29
29
  from {{ code_model.core_library }}.serialization import TypeHandlerRegistry
30
30
  {% endif %}
31
31
  from {{ code_model.core_library }}.rest import HttpResponse
32
32
 
33
+ if sys.version_info >= (3, 11):
34
+ from typing import Self
35
+ else:
36
+ from typing_extensions import Self
37
+
33
38
  _LOGGER = logging.getLogger(__name__)
34
39
 
35
40
  __all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"]
@@ -617,11 +622,7 @@ class Model(_MyMutableMapping):
617
622
  class_name = self.__class__.__name__
618
623
  if len(args) > 1:
619
624
  raise TypeError(f"{class_name}.__init__() takes 2 positional arguments but {len(args) + 1} were given")
620
- dict_to_pass = {
621
- rest_field._rest_name: rest_field._default
622
- for rest_field in self._attr_to_rest_field.values()
623
- if rest_field._default is not _UNSET
624
- }
625
+ dict_to_pass: dict[str, typing.Any] = {}
625
626
  if args:
626
627
  if isinstance(args[0], ET.Element):
627
628
  dict_to_pass.update(self._init_from_xml(args[0]))
@@ -641,6 +642,14 @@ class Model(_MyMutableMapping):
641
642
  if v is not None
642
643
  }
643
644
  )
645
+ # Apply client default values for fields the caller didn't set so that
646
+ # defaults are part of `_data` and therefore included during serialization.
647
+ for rf in self._attr_to_rest_field.values():
648
+ if rf._default is _UNSET:
649
+ continue
650
+ if rf._rest_name in dict_to_pass:
651
+ continue
652
+ dict_to_pass[rf._rest_name] = _create_value(rf, rf._default)
644
653
  super().__init__(dict_to_pass)
645
654
 
646
655
  def _init_from_xml(self, element: ET.Element) -> dict[str, typing.Any]:
@@ -1160,7 +1169,10 @@ class _RestField:
1160
1169
  # by this point, type and rest_name will have a value bc we default
1161
1170
  # them in __new__ of the Model class
1162
1171
  # Use _data.get() directly to avoid triggering __getitem__ which clears the cache
1163
- item = obj._data.get(self._rest_name)
1172
+ item = obj._data.get(self._rest_name, _UNSET)
1173
+ if item is _UNSET:
1174
+ # Field not set by user; return the client default if one exists, otherwise None
1175
+ return self._default if self._default is not _UNSET else None
1164
1176
  if item is None:
1165
1177
  return item
1166
1178
  if self._is_model:
@@ -3,7 +3,7 @@
3
3
  # Microsoft Azure SDK for Python
4
4
 
5
5
  This is the Microsoft {{options["package-pprint-name"]}} Client Library.
6
- This package has been tested with Python 3.9+.
6
+ This package has been tested with Python 3.10+.
7
7
  For a more complete view of Azure libraries, see the [azure sdk python release](https://aka.ms/azsdk/python/all).
8
8
 
9
9
  # Usage
@@ -14,6 +14,10 @@ For docs and references, see [Python SDK References](https://docs.microsoft.com/
14
14
  Code samples for this package can be found at [{{options["package-pprint-name"]}}](https://docs.microsoft.com/samples/browse/?languages=python&term=Getting%20started%20-%20Managing&terms=Getting%20started%20-%20Managing) on docs.microsoft.com.
15
15
  Additional code samples for different Azure services are available at [Samples Repo](https://aka.ms/azsdk/python/mgmt/samples)
16
16
 
17
+ # Use with AI tools
18
+
19
+ AI coding tools such as VS Code and GitHub Copilot can help you write and debug code that uses this library. See [Using the Azure SDK for Python with AI tools](https://aka.ms/azsdk/python/ai) for available integrations.
20
+
17
21
  # Provide Feedback
18
22
 
19
23
  If you encounter any bugs or have suggestions, please file an issue in the
@@ -36,10 +40,14 @@ python -m pip install {{ options["package-name"] }}
36
40
 
37
41
  #### Prequisites
38
42
 
39
- - Python 3.9 or later is required to use this package.
43
+ - Python 3.10 or later is required to use this package.
40
44
  - You need an [Azure subscription][azure_sub] to use this package.
41
45
  - An existing {{ options["package-pprint-name"] }} instance.
42
46
 
47
+ ### Use with AI tools
48
+
49
+ AI coding tools such as VS Code and GitHub Copilot can help you write and debug code that uses this library. See [Using the Azure SDK for Python with AI tools](https://aka.ms/azsdk/python/ai) for available integrations.
50
+
43
51
  {% if token_credential and client_name %}
44
52
  #### Create with an Azure Active Directory Credential
45
53
  To use an [Azure Active Directory (AAD) token credential][authenticate_with_token],
@@ -113,7 +121,7 @@ This package is generated by `@typespec/http-client-python` with Typespec.
113
121
 
114
122
  ### Prequisites
115
123
 
116
- - Python 3.9 or later is required to use this package.
124
+ - Python 3.10 or later is required to use this package.
117
125
 
118
126
  ### Install the package
119
127
 
@@ -57,7 +57,7 @@ dependencies = [
57
57
  {% endfor %}
58
58
  {% endif %}
59
59
  {% for dep in ADDITIONAL_DEPENDENCIES %}
60
- "{{ dep }}",
60
+ {{ dep }},
61
61
  {% endfor %}
62
62
  ]
63
63
  dynamic = [
@@ -35,11 +35,15 @@ except ImportError:
35
35
  import xml.etree.ElementTree as ET
36
36
 
37
37
  import isodate # type: ignore
38
- from typing_extensions import Self
39
38
 
40
39
  from {{ code_model.core_library }}.exceptions import DeserializationError, SerializationError
41
40
  from {{ code_model.core_library }}.serialization import NULL as CoreNull
42
41
 
42
+ if sys.version_info >= (3, 11):
43
+ from typing import Self
44
+ else:
45
+ from typing_extensions import Self
46
+
43
47
  _BOM = codecs.BOM_UTF8.decode(encoding="utf-8")
44
48
 
45
49
  JSON = MutableMapping[str, Any]
@@ -132,20 +132,18 @@ HEADERS_HIDE_IN_METHOD = (
132
132
  "client-request-id",
133
133
  "return-client-request-id",
134
134
  )
135
- HEADERS_CONVERT_IN_METHOD = {
136
- "if-match": {
137
- "clientName": "etag",
138
- "wireName": "etag",
139
- "description": "check if resource is changed. Set None to skip checking etag.",
140
- },
141
- "if-none-match": {
142
- "clientName": "match_condition",
143
- "wireName": "match-condition",
144
- "description": "The match condition to use upon the etag.",
145
- "type": {
146
- "type": "sdkcore",
147
- "name": "MatchConditions",
148
- },
135
+ ETAG_MATCH_DATA = {
136
+ "clientName": "etag",
137
+ "etagRole": "ifMatch",
138
+ "description": "check if resource is changed. Set None to skip checking etag.",
139
+ }
140
+ ETAG_NONE_MATCH_DATA = {
141
+ "clientName": "match_condition",
142
+ "etagRole": "ifNoneMatch",
143
+ "description": "The match condition to use upon the etag.",
144
+ "type": {
145
+ "type": "sdkcore",
146
+ "name": "MatchConditions",
149
147
  },
150
148
  }
151
149
  CLOUD_SETTING = {
@@ -166,6 +164,11 @@ def get_wire_name_lower(parameter: dict[str, Any]) -> str:
166
164
  return (parameter.get("wireName") or "").lower()
167
165
 
168
166
 
167
+ def _get_etag_role(parameter: dict[str, Any]) -> Optional[str]:
168
+ """Return 'ifMatch', 'ifNoneMatch', or None for this header parameter."""
169
+ return parameter.get("etagRole")
170
+
171
+
169
172
  def headers_convert(yaml_data: dict[str, Any], replace_data: Any) -> None:
170
173
  if isinstance(replace_data, dict):
171
174
  for k, v in replace_data.items():
@@ -281,9 +284,8 @@ class PreProcessPlugin(YamlUpdatePlugin):
281
284
  value["name"] = upper_name
282
285
 
283
286
  # add type for reference
284
- for v in HEADERS_CONVERT_IN_METHOD.values():
285
- if isinstance(v, dict) and "type" in v:
286
- yaml_data.append(v["type"])
287
+ if "type" in ETAG_NONE_MATCH_DATA:
288
+ yaml_data.append(ETAG_NONE_MATCH_DATA["type"])
287
289
  yaml_data.append(CLOUD_SETTING["type"]) # type: ignore
288
290
 
289
291
  def update_client(self, yaml_data: dict[str, Any]) -> None:
@@ -317,9 +319,10 @@ class PreProcessPlugin(YamlUpdatePlugin):
317
319
  if p["location"] == "header" and wire_name_lower == "client-request-id":
318
320
  yaml_data["requestIdHeaderName"] = wire_name_lower
319
321
  if self.version_tolerant and p["location"] == "header":
320
- if wire_name_lower == "if-match":
322
+ role = _get_etag_role(p)
323
+ if role == "ifMatch" and not property_if_match:
321
324
  property_if_match = p
322
- elif wire_name_lower == "if-none-match":
325
+ elif role == "ifNoneMatch" and not property_if_none_match:
323
326
  property_if_none_match = p
324
327
  # pylint: disable=line-too-long
325
328
  # some service(e.g. https://github.com/Azure/azure-rest-api-specs/blob/main/specification/cosmos-db/data-plane/Microsoft.Tables/preview/2019-02-02/table.json)
@@ -327,17 +330,19 @@ class PreProcessPlugin(YamlUpdatePlugin):
327
330
  if not property_if_match and property_if_none_match:
328
331
  property_if_match = property_if_none_match.copy()
329
332
  property_if_match["wireName"] = "if-match"
333
+ property_if_match["etagRole"] = "ifMatch"
330
334
  if not property_if_none_match and property_if_match:
331
335
  property_if_none_match = property_if_match.copy()
332
336
  property_if_none_match["wireName"] = "if-none-match"
337
+ property_if_none_match["etagRole"] = "ifNoneMatch"
333
338
 
334
339
  if property_if_match and property_if_none_match:
335
340
  # arrange if-match and if-none-match to the end of parameters
336
- o["parameters"] = [
337
- item
338
- for item in o["parameters"]
339
- if get_wire_name_lower(item) not in ("if-match", "if-none-match")
340
- ] + [property_if_match, property_if_none_match]
341
+ etag_params = {id(property_if_match), id(property_if_none_match)}
342
+ o["parameters"] = [item for item in o["parameters"] if id(item) not in etag_params] + [
343
+ property_if_match,
344
+ property_if_none_match,
345
+ ]
341
346
 
342
347
  o["hasEtag"] = True
343
348
  yaml_data["hasEtag"] = True
@@ -362,11 +367,9 @@ class PreProcessPlugin(YamlUpdatePlugin):
362
367
  yaml_data["clientName"].lower(), PadType.PARAMETER, yaml_data
363
368
  )
364
369
  if yaml_data.get("propertyToParameterName"):
365
- # need to create a new one with padded keys and values
370
+ # need to create a new one with padded values (but NOT keys, since keys are wire names)
366
371
  yaml_data["propertyToParameterName"] = {
367
- self.pad_reserved_words(prop, PadType.PROPERTY, yaml_data): self.pad_reserved_words(
368
- param_name, PadType.PARAMETER, yaml_data
369
- ).lower()
372
+ prop: self.pad_reserved_words(param_name, PadType.PARAMETER, yaml_data).lower()
370
373
  for prop, param_name in yaml_data["propertyToParameterName"].items()
371
374
  }
372
375
  wire_name_lower = (yaml_data.get("wireName") or "").lower()
@@ -374,8 +377,12 @@ class PreProcessPlugin(YamlUpdatePlugin):
374
377
  wire_name_lower in HEADERS_HIDE_IN_METHOD or yaml_data.get("clientDefaultValue") == "multipart/form-data"
375
378
  ):
376
379
  yaml_data["hideInMethod"] = True
377
- if self.version_tolerant and yaml_data["location"] == "header" and wire_name_lower in HEADERS_CONVERT_IN_METHOD:
378
- headers_convert(yaml_data, HEADERS_CONVERT_IN_METHOD[wire_name_lower])
380
+ if self.version_tolerant and yaml_data["location"] == "header":
381
+ role = _get_etag_role(yaml_data)
382
+ if role == "ifMatch":
383
+ headers_convert(yaml_data, ETAG_MATCH_DATA)
384
+ elif role == "ifNoneMatch":
385
+ headers_convert(yaml_data, ETAG_NONE_MATCH_DATA)
379
386
  if wire_name_lower in ["$host", "content-type", "accept"] and yaml_data["type"]["type"] == "constant":
380
387
  yaml_data["clientDefaultValue"] = yaml_data["type"]["value"]
381
388
 
@@ -9,14 +9,13 @@ License: MIT License
9
9
  Classifier: Development Status :: 4 - Beta
10
10
  Classifier: Programming Language :: Python
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.9
13
12
  Classifier: Programming Language :: Python :: 3.10
14
13
  Classifier: Programming Language :: Python :: 3.11
15
14
  Classifier: Programming Language :: Python :: 3.12
16
15
  Classifier: License :: OSI Approved :: MIT License
17
16
  Description-Content-Type: text/markdown
18
17
  License-File: LICENSE
19
- Requires-Dist: black==24.8.0
18
+ Requires-Dist: black==26.3.1
20
19
  Requires-Dist: docutils>=0.20.1
21
20
  Requires-Dist: Jinja2==3.1.6
22
21
  Requires-Dist: PyYAML==6.0.1
@@ -1,4 +1,4 @@
1
- black==24.8.0
1
+ black==26.3.1
2
2
  docutils>=0.20.1
3
3
  Jinja2==3.1.6
4
4
  PyYAML==6.0.1
@@ -35,7 +35,6 @@ setup(
35
35
  "Development Status :: 4 - Beta",
36
36
  "Programming Language :: Python",
37
37
  "Programming Language :: Python :: 3",
38
- "Programming Language :: Python :: 3.9",
39
38
  "Programming Language :: Python :: 3.10",
40
39
  "Programming Language :: Python :: 3.11",
41
40
  "Programming Language :: Python :: 3.12",
@@ -47,7 +46,7 @@ setup(
47
46
  ]
48
47
  ),
49
48
  install_requires=[
50
- "black==24.8.0",
49
+ "black==26.3.1",
51
50
  "docutils>=0.20.1",
52
51
  "Jinja2==3.1.6",
53
52
  "PyYAML==6.0.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.28.3",
3
+ "version": "0.29.0",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",
@@ -46,7 +46,7 @@
46
46
  "typecheck": "tsx ./eng/scripts/ci/typecheck.ts",
47
47
  "typecheck:generated": "tsx ./eng/scripts/ci/typecheck.ts --generated",
48
48
  "regenerate": "tsx ./eng/scripts/ci/regenerate.ts",
49
- "ci": "npm run test && npm run lint && npm run typecheck",
49
+ "ci": "npm run test:emitter && npm run ci:generated",
50
50
  "ci:generated": "tsx ./eng/scripts/ci/run-tests.ts --generator --env=ci",
51
51
  "change:version": "pnpm chronus version --ignore-policies --only @typespec/http-client-python",
52
52
  "change:add": "pnpm chronus add",
@@ -61,10 +61,10 @@
61
61
  ],
62
62
  "peerDependencies": {
63
63
  "@azure-tools/typespec-autorest": ">=0.67.0 <1.0.0",
64
- "@azure-tools/typespec-azure-core": ">=0.67.0 <1.0.0",
65
- "@azure-tools/typespec-azure-resource-manager": ">=0.67.0 <1.0.0",
64
+ "@azure-tools/typespec-azure-core": ">=0.67.1 <1.0.0",
65
+ "@azure-tools/typespec-azure-resource-manager": ">=0.67.1 <1.0.0",
66
66
  "@azure-tools/typespec-azure-rulesets": ">=0.67.0 <1.0.0",
67
- "@azure-tools/typespec-client-generator-core": ">=0.67.0 <1.0.0",
67
+ "@azure-tools/typespec-client-generator-core": ">=0.67.4 <1.0.0",
68
68
  "@typespec/compiler": "^1.11.0",
69
69
  "@typespec/http": "^1.11.0",
70
70
  "@typespec/openapi": "^1.11.0",
@@ -75,6 +75,21 @@
75
75
  "@typespec/streams": ">=0.81.0 <1.0.0",
76
76
  "@typespec/xml": ">=0.81.0 <1.0.0"
77
77
  },
78
+ "playgroundConfig": {
79
+ "assets": [
80
+ {
81
+ "path": "generator/dist/pygen-*.whl",
82
+ "contentType": "application/zip"
83
+ }
84
+ ],
85
+ "bundlePeerDependencies": [
86
+ "@azure-tools/typespec-client-generator-core",
87
+ "@azure-tools/typespec-azure-core",
88
+ "@azure-tools/typespec-autorest",
89
+ "@azure-tools/typespec-azure-resource-manager",
90
+ "@azure-tools/typespec-azure-rulesets"
91
+ ]
92
+ },
78
93
  "dependencies": {
79
94
  "js-yaml": "~4.1.0",
80
95
  "marked": "^15.0.6",
@@ -84,11 +99,11 @@
84
99
  },
85
100
  "devDependencies": {
86
101
  "@azure-tools/typespec-autorest": "~0.67.0",
87
- "@azure-tools/typespec-azure-core": "~0.67.0",
88
- "@azure-tools/typespec-azure-resource-manager": "~0.67.0",
102
+ "@azure-tools/typespec-azure-core": "~0.67.1",
103
+ "@azure-tools/typespec-azure-resource-manager": "~0.67.1",
89
104
  "@azure-tools/typespec-azure-rulesets": "~0.67.0",
90
- "@azure-tools/typespec-client-generator-core": "~0.67.0",
91
- "@azure-tools/azure-http-specs": "0.1.0-alpha.39",
105
+ "@azure-tools/typespec-client-generator-core": "~0.67.4",
106
+ "@azure-tools/azure-http-specs": "0.1.0-alpha.40-dev.12",
92
107
  "@typespec/compiler": "^1.11.0",
93
108
  "@typespec/http": "^1.11.0",
94
109
  "@typespec/openapi": "^1.11.0",