@typespec/http-client-python 0.28.1 → 0.28.3

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 (311) hide show
  1. package/dist/emitter/code-model.d.ts.map +1 -1
  2. package/dist/emitter/code-model.js +6 -6
  3. package/dist/emitter/code-model.js.map +1 -1
  4. package/dist/emitter/emitter.d.ts.map +1 -1
  5. package/dist/emitter/emitter.js +27 -28
  6. package/dist/emitter/emitter.js.map +1 -1
  7. package/dist/emitter/lib.d.ts +4 -1
  8. package/dist/emitter/lib.d.ts.map +1 -1
  9. package/dist/emitter/lib.js.map +1 -1
  10. package/dist/emitter/system-requirements.js +6 -4
  11. package/dist/emitter/system-requirements.js.map +1 -1
  12. package/dist/emitter/types.d.ts +2 -5
  13. package/dist/emitter/types.d.ts.map +1 -1
  14. package/dist/emitter/types.js +55 -58
  15. package/dist/emitter/types.js.map +1 -1
  16. package/dist/emitter/utils.d.ts.map +1 -1
  17. package/dist/emitter/utils.js +16 -17
  18. package/dist/emitter/utils.js.map +1 -1
  19. package/emitter/src/code-model.ts +6 -13
  20. package/emitter/src/emitter.ts +29 -31
  21. package/emitter/src/lib.ts +4 -0
  22. package/emitter/src/system-requirements.ts +4 -4
  23. package/emitter/src/types.ts +67 -57
  24. package/emitter/src/utils.ts +16 -18
  25. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  26. package/eng/scripts/Build-Packages.ps1 +62 -37
  27. package/eng/scripts/Check-GitChanges.ps1 +30 -3
  28. package/eng/scripts/Functions.ps1 +54 -15
  29. package/eng/scripts/Generate.ps1 +42 -8
  30. package/eng/scripts/Generation.psm1 +44 -15
  31. package/eng/scripts/Initialize-Repository.ps1 +29 -11
  32. package/eng/scripts/Test-Packages.ps1 +47 -31
  33. package/eng/scripts/ci/config/eslint-ci.config.mjs +54 -0
  34. package/eng/scripts/ci/dev_requirements.txt +1 -0
  35. package/eng/scripts/ci/format.ts +232 -2
  36. package/eng/scripts/ci/lint.ts +216 -20
  37. package/eng/scripts/ci/regenerate-common.ts +18 -14
  38. package/eng/scripts/ci/regenerate.ts +305 -68
  39. package/eng/scripts/ci/run-tests.ts +402 -0
  40. package/eng/scripts/ci/run_mypy.py +4 -3
  41. package/eng/scripts/ci/run_pylint.py +4 -3
  42. package/eng/scripts/ci/run_pyright.py +4 -3
  43. package/eng/scripts/ci/typecheck.ts +225 -0
  44. package/eng/scripts/ci/util.py +1 -1
  45. package/eng/scripts/ci/utils.ts +5 -5
  46. package/eng/scripts/setup/__pycache__/package_manager.cpython-311.pyc +0 -0
  47. package/eng/scripts/setup/__pycache__/venvtools.cpython-311.pyc +0 -0
  48. package/eng/scripts/setup/build.ts +1 -1
  49. package/eng/scripts/setup/build_pygen_wheel.py +1 -0
  50. package/eng/scripts/setup/install.py +1 -0
  51. package/eng/scripts/setup/prepare.py +1 -0
  52. package/eng/scripts/setup/prepare.ts +1 -1
  53. package/eng/scripts/setup/run_tsp.py +3 -3
  54. package/eng/scripts/setup/system-requirements.ts +8 -4
  55. package/eng/scripts/setup/venvtools.py +1 -0
  56. package/generator/build/lib/pygen/codegen/models/operation.py +9 -8
  57. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +157 -64
  58. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  59. package/generator/pygen/codegen/models/operation.py +9 -8
  60. package/generator/pygen/codegen/templates/model_base.py.jinja2 +157 -64
  61. package/package.json +48 -42
  62. package/eng/scripts/ci/run-ci.ts +0 -89
  63. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py +0 -94
  64. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py +0 -30
  65. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py +0 -36
  66. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_operationtemplates_async.py +0 -205
  67. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_resource_async.py +0 -478
  68. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_access_async.py +0 -101
  69. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_api_version_header_async.py +0 -18
  70. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_api_version_path_async.py +0 -18
  71. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_api_version_query_async.py +0 -18
  72. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_default_value_async.py +0 -46
  73. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py +0 -58
  74. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_location_async.py +0 -82
  75. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py +0 -20
  76. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_flatten_async.py +0 -115
  77. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_hierrarchy_building_async.py +0 -53
  78. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_next_link_verb_async.py +0 -28
  79. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_override_async.py +0 -106
  80. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +0 -38
  81. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_basic_async.py +0 -76
  82. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_lro_rpc_async.py +0 -22
  83. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_lro_standard_async.py +0 -39
  84. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py +0 -33
  85. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_page_async.py +0 -80
  86. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_scalar_async.py +0 -41
  87. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_traits_async.py +0 -87
  88. package/generator/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py +0 -19
  89. package/generator/test/azure/mock_api_tests/asynctests/test_azure_example_basic_async.py +0 -30
  90. package/generator/test/azure/mock_api_tests/asynctests/test_azure_payload_pageable_async.py +0 -19
  91. package/generator/test/azure/mock_api_tests/asynctests/test_azure_resource_manager_method_subscription_id_async.py +0 -248
  92. package/generator/test/azure/mock_api_tests/asynctests/test_azure_resource_manager_multi_service_async.py +0 -110
  93. package/generator/test/azure/mock_api_tests/asynctests/test_azure_resource_manager_multi_service_shared_models_async.py +0 -132
  94. package/generator/test/azure/mock_api_tests/asynctests/test_azure_special_headers_client_request_id_async.py +0 -30
  95. package/generator/test/azure/mock_api_tests/asynctests/test_azure_versioning_previewversion_async.py +0 -53
  96. package/generator/test/azure/mock_api_tests/asynctests/test_client_namespace_async.py +0 -34
  97. package/generator/test/azure/mock_api_tests/asynctests/test_client_naming_async.py +0 -69
  98. package/generator/test/azure/mock_api_tests/asynctests/test_client_naming_enum_conflict_async.py +0 -37
  99. package/generator/test/azure/mock_api_tests/asynctests/test_client_overload_async.py +0 -27
  100. package/generator/test/azure/mock_api_tests/asynctests/test_client_structure_async.py +0 -64
  101. package/generator/test/azure/mock_api_tests/asynctests/test_client_structure_clientoperationgroup_async.py +0 -31
  102. package/generator/test/azure/mock_api_tests/asynctests/test_encode_duration_async.py +0 -63
  103. package/generator/test/azure/mock_api_tests/asynctests/test_encode_numeric_async.py +0 -35
  104. package/generator/test/azure/mock_api_tests/asynctests/test_parameters_basic_async.py +0 -24
  105. package/generator/test/azure/mock_api_tests/asynctests/test_parameters_spread_async.py +0 -76
  106. package/generator/test/azure/mock_api_tests/asynctests/test_payload_content_negotiation_async.py +0 -37
  107. package/generator/test/azure/mock_api_tests/asynctests/test_payload_multipart_async.py +0 -216
  108. package/generator/test/azure/mock_api_tests/asynctests/test_resiliency_srv_driven_async.py +0 -130
  109. package/generator/test/azure/mock_api_tests/asynctests/test_serialization_encoded_name_json_async.py +0 -24
  110. package/generator/test/azure/mock_api_tests/asynctests/test_service_multi_service_async.py +0 -31
  111. package/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py +0 -71
  112. package/generator/test/azure/mock_api_tests/conftest.py +0 -207
  113. package/generator/test/azure/mock_api_tests/data/image.jpg +0 -0
  114. package/generator/test/azure/mock_api_tests/data/image.png +0 -0
  115. package/generator/test/azure/mock_api_tests/test_azure_arm_commonproperties.py +0 -89
  116. package/generator/test/azure/mock_api_tests/test_azure_arm_largeheader.py +0 -27
  117. package/generator/test/azure/mock_api_tests/test_azure_arm_nonresource.py +0 -34
  118. package/generator/test/azure/mock_api_tests/test_azure_arm_operationtemplates.py +0 -180
  119. package/generator/test/azure/mock_api_tests/test_azure_arm_resource.py +0 -436
  120. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_access.py +0 -92
  121. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_api_version_header.py +0 -17
  122. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_api_version_path.py +0 -17
  123. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_api_version_query.py +0 -17
  124. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_default_value.py +0 -42
  125. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py +0 -51
  126. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_location.py +0 -70
  127. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py +0 -19
  128. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_flatten.py +0 -104
  129. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_hierrarchy_building.py +0 -45
  130. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_next_link_verb.py +0 -27
  131. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_override.py +0 -102
  132. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +0 -32
  133. package/generator/test/azure/mock_api_tests/test_azure_core_basic.py +0 -70
  134. package/generator/test/azure/mock_api_tests/test_azure_core_lro_rpc.py +0 -20
  135. package/generator/test/azure/mock_api_tests/test_azure_core_lro_standard.py +0 -32
  136. package/generator/test/azure/mock_api_tests/test_azure_core_model.py +0 -30
  137. package/generator/test/azure/mock_api_tests/test_azure_core_page.py +0 -71
  138. package/generator/test/azure/mock_api_tests/test_azure_core_scalar.py +0 -35
  139. package/generator/test/azure/mock_api_tests/test_azure_core_traits.py +0 -85
  140. package/generator/test/azure/mock_api_tests/test_azure_encode_duration.py +0 -18
  141. package/generator/test/azure/mock_api_tests/test_azure_example_basic.py +0 -29
  142. package/generator/test/azure/mock_api_tests/test_azure_payload_pageable.py +0 -18
  143. package/generator/test/azure/mock_api_tests/test_azure_resource_manager_method_subscription_id.py +0 -235
  144. package/generator/test/azure/mock_api_tests/test_azure_resource_manager_multi_service.py +0 -104
  145. package/generator/test/azure/mock_api_tests/test_azure_resource_manager_multi_service_shared_models.py +0 -128
  146. package/generator/test/azure/mock_api_tests/test_azure_special_headers_client_request_id.py +0 -29
  147. package/generator/test/azure/mock_api_tests/test_azure_versioning_previewversion.py +0 -50
  148. package/generator/test/azure/mock_api_tests/test_clear_output_folder.py +0 -23
  149. package/generator/test/azure/mock_api_tests/test_client_namespace.py +0 -32
  150. package/generator/test/azure/mock_api_tests/test_client_naming.py +0 -57
  151. package/generator/test/azure/mock_api_tests/test_client_naming_enum_conflict.py +0 -35
  152. package/generator/test/azure/mock_api_tests/test_client_overload.py +0 -25
  153. package/generator/test/azure/mock_api_tests/test_client_structure.py +0 -60
  154. package/generator/test/azure/mock_api_tests/test_client_structure_clientoperationgroup.py +0 -29
  155. package/generator/test/azure/mock_api_tests/test_encode_duration.py +0 -60
  156. package/generator/test/azure/mock_api_tests/test_encode_numeric.py +0 -31
  157. package/generator/test/azure/mock_api_tests/test_model_base_flatten_compatibility.py +0 -251
  158. package/generator/test/azure/mock_api_tests/test_parameters_basic.py +0 -22
  159. package/generator/test/azure/mock_api_tests/test_parameters_spread.py +0 -66
  160. package/generator/test/azure/mock_api_tests/test_payload_content_negotiation.py +0 -33
  161. package/generator/test/azure/mock_api_tests/test_payload_multipart.py +0 -198
  162. package/generator/test/azure/mock_api_tests/test_resiliency_srv_driven.py +0 -124
  163. package/generator/test/azure/mock_api_tests/test_serialization_encoded_name_json.py +0 -21
  164. package/generator/test/azure/mock_api_tests/test_service_multi_service.py +0 -29
  165. package/generator/test/azure/mock_api_tests/test_special_words.py +0 -63
  166. package/generator/test/azure/requirements.txt +0 -125
  167. package/generator/test/azure/tox.ini +0 -64
  168. package/generator/test/data/image.jpg +0 -0
  169. package/generator/test/data/image.png +0 -0
  170. package/generator/test/dev_requirements.txt +0 -8
  171. package/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py +0 -140
  172. package/generator/test/generic_mock_api_tests/asynctests/test_encode_array_async.py +0 -139
  173. package/generator/test/generic_mock_api_tests/asynctests/test_encode_bytes_async.py +0 -132
  174. package/generator/test/generic_mock_api_tests/asynctests/test_encode_datetime_async.py +0 -127
  175. package/generator/test/generic_mock_api_tests/asynctests/test_headasboolean_async.py +0 -35
  176. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_body_optionality_async.py +0 -30
  177. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_collection_format_async.py +0 -38
  178. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_path_async.py +0 -24
  179. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_query_async.py +0 -18
  180. package/generator/test/generic_mock_api_tests/asynctests/test_payload_json_merge_patch_async.py +0 -98
  181. package/generator/test/generic_mock_api_tests/asynctests/test_payload_media_type_async.py +0 -27
  182. package/generator/test/generic_mock_api_tests/asynctests/test_payload_pageable_async.py +0 -134
  183. package/generator/test/generic_mock_api_tests/asynctests/test_payload_xml_async.py +0 -150
  184. package/generator/test/generic_mock_api_tests/asynctests/test_response_status_code_range_async.py +0 -38
  185. package/generator/test/generic_mock_api_tests/asynctests/test_routes_async.py +0 -331
  186. package/generator/test/generic_mock_api_tests/asynctests/test_server_endpoint_not_defined_async.py +0 -18
  187. package/generator/test/generic_mock_api_tests/asynctests/test_server_path_multiple_async.py +0 -25
  188. package/generator/test/generic_mock_api_tests/asynctests/test_server_path_single_async.py +0 -18
  189. package/generator/test/generic_mock_api_tests/asynctests/test_server_versions_not_versioned_async.py +0 -28
  190. package/generator/test/generic_mock_api_tests/asynctests/test_server_versions_versioned_async.py +0 -34
  191. package/generator/test/generic_mock_api_tests/asynctests/test_special_headers_conditional_request_async.py +0 -38
  192. package/generator/test/generic_mock_api_tests/asynctests/test_special_headers_repeatability_async.py +0 -19
  193. package/generator/test/generic_mock_api_tests/asynctests/test_specs_documentation_async.py +0 -59
  194. package/generator/test/generic_mock_api_tests/asynctests/test_streaming_jsonl_async.py +0 -27
  195. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_array_async.py +0 -127
  196. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_dictionary_async.py +0 -98
  197. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_enum_extensible_async.py +0 -25
  198. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_enum_fixed_async.py +0 -27
  199. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_file_async.py +0 -59
  200. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_empty_async.py +0 -32
  201. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_enum_discriminator_async.py +0 -70
  202. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_nested_discriminator_async.py +0 -85
  203. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_not_discriminated_async.py +0 -34
  204. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_recursive_async.py +0 -34
  205. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_single_discriminator_async.py +0 -67
  206. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_usage_async.py +0 -32
  207. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_visibility_async.py +0 -47
  208. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_additionalproperties_async.py +0 -353
  209. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_nullable_async.py +0 -110
  210. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_optional_async.py +0 -197
  211. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_valuetypes_async.py +0 -315
  212. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_scalar_async.py +0 -60
  213. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_union_async.py +0 -90
  214. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_added_async.py +0 -36
  215. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_made_optional_async.py +0 -21
  216. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_removed_async.py +0 -39
  217. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_renamed_from_async.py +0 -29
  218. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_return_type_changed_from_async.py +0 -18
  219. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_type_changed_from_async.py +0 -22
  220. package/generator/test/generic_mock_api_tests/conftest.py +0 -75
  221. package/generator/test/generic_mock_api_tests/data/image.jpg +0 -0
  222. package/generator/test/generic_mock_api_tests/data/image.png +0 -0
  223. package/generator/test/generic_mock_api_tests/test_authentication.py +0 -130
  224. package/generator/test/generic_mock_api_tests/test_encode_array.py +0 -126
  225. package/generator/test/generic_mock_api_tests/test_encode_bytes.py +0 -128
  226. package/generator/test/generic_mock_api_tests/test_encode_datetime.py +0 -123
  227. package/generator/test/generic_mock_api_tests/test_headasboolean.py +0 -33
  228. package/generator/test/generic_mock_api_tests/test_parameters_body_optionality.py +0 -27
  229. package/generator/test/generic_mock_api_tests/test_parameters_collection_format.py +0 -33
  230. package/generator/test/generic_mock_api_tests/test_parameters_path.py +0 -22
  231. package/generator/test/generic_mock_api_tests/test_parameters_query.py +0 -17
  232. package/generator/test/generic_mock_api_tests/test_payload_json_merge_patch.py +0 -93
  233. package/generator/test/generic_mock_api_tests/test_payload_media_type.py +0 -25
  234. package/generator/test/generic_mock_api_tests/test_payload_pageable.py +0 -99
  235. package/generator/test/generic_mock_api_tests/test_payload_xml.py +0 -135
  236. package/generator/test/generic_mock_api_tests/test_response_status_code_range.py +0 -36
  237. package/generator/test/generic_mock_api_tests/test_routes.py +0 -285
  238. package/generator/test/generic_mock_api_tests/test_server_endpoint_not_defined.py +0 -17
  239. package/generator/test/generic_mock_api_tests/test_server_path_multiple.py +0 -21
  240. package/generator/test/generic_mock_api_tests/test_server_path_single.py +0 -17
  241. package/generator/test/generic_mock_api_tests/test_server_versions_not_versioned.py +0 -25
  242. package/generator/test/generic_mock_api_tests/test_server_versions_versioned.py +0 -30
  243. package/generator/test/generic_mock_api_tests/test_special_headers_conditional_request.py +0 -34
  244. package/generator/test/generic_mock_api_tests/test_special_headers_repeatability.py +0 -18
  245. package/generator/test/generic_mock_api_tests/test_specs_documentation.py +0 -51
  246. package/generator/test/generic_mock_api_tests/test_streaming_jsonl.py +0 -25
  247. package/generator/test/generic_mock_api_tests/test_typetest_array.py +0 -111
  248. package/generator/test/generic_mock_api_tests/test_typetest_dictionary.py +0 -86
  249. package/generator/test/generic_mock_api_tests/test_typetest_enum_extensible.py +0 -23
  250. package/generator/test/generic_mock_api_tests/test_typetest_enum_fixed.py +0 -25
  251. package/generator/test/generic_mock_api_tests/test_typetest_file.py +0 -52
  252. package/generator/test/generic_mock_api_tests/test_typetest_model_empty.py +0 -29
  253. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_enum_discriminator.py +0 -58
  254. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_nested_discriminator.py +0 -79
  255. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_not_discriminated.py +0 -31
  256. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_recursive.py +0 -32
  257. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_single_discriminator.py +0 -60
  258. package/generator/test/generic_mock_api_tests/test_typetest_model_usage.py +0 -28
  259. package/generator/test/generic_mock_api_tests/test_typetest_model_visibility.py +0 -40
  260. package/generator/test/generic_mock_api_tests/test_typetest_property_additionalproperties.py +0 -314
  261. package/generator/test/generic_mock_api_tests/test_typetest_property_nullable.py +0 -102
  262. package/generator/test/generic_mock_api_tests/test_typetest_property_optional.py +0 -174
  263. package/generator/test/generic_mock_api_tests/test_typetest_property_valuetypes.py +0 -286
  264. package/generator/test/generic_mock_api_tests/test_typetest_scalar.py +0 -53
  265. package/generator/test/generic_mock_api_tests/test_typetest_union.py +0 -80
  266. package/generator/test/generic_mock_api_tests/test_typetest_union_discriminated.py +0 -290
  267. package/generator/test/generic_mock_api_tests/test_versioning_added.py +0 -33
  268. package/generator/test/generic_mock_api_tests/test_versioning_made_optional.py +0 -20
  269. package/generator/test/generic_mock_api_tests/test_versioning_removed.py +0 -37
  270. package/generator/test/generic_mock_api_tests/test_versioning_renamed_from.py +0 -27
  271. package/generator/test/generic_mock_api_tests/test_versioning_return_type_changed_from.py +0 -17
  272. package/generator/test/generic_mock_api_tests/test_versioning_type_changed_from.py +0 -21
  273. package/generator/test/unbranded/mock_api_tests/asynctests/test_auth_flow_async.py +0 -19
  274. package/generator/test/unbranded/mock_api_tests/asynctests/test_encode_duration_async.py +0 -63
  275. package/generator/test/unbranded/mock_api_tests/asynctests/test_encode_numeric_async.py +0 -35
  276. package/generator/test/unbranded/mock_api_tests/asynctests/test_parameters_basic_async.py +0 -24
  277. package/generator/test/unbranded/mock_api_tests/asynctests/test_parameters_spread_async.py +0 -76
  278. package/generator/test/unbranded/mock_api_tests/asynctests/test_payload_content_negotiation_async.py +0 -37
  279. package/generator/test/unbranded/mock_api_tests/asynctests/test_payload_multipart_async.py +0 -218
  280. package/generator/test/unbranded/mock_api_tests/asynctests/test_serialization_encoded_name_json_async.py +0 -24
  281. package/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py +0 -73
  282. package/generator/test/unbranded/mock_api_tests/asynctests/test_unbranded_async.py +0 -24
  283. package/generator/test/unbranded/mock_api_tests/conftest.py +0 -91
  284. package/generator/test/unbranded/mock_api_tests/data/image.jpg +0 -0
  285. package/generator/test/unbranded/mock_api_tests/data/image.png +0 -0
  286. package/generator/test/unbranded/mock_api_tests/test_auth_flow.py +0 -17
  287. package/generator/test/unbranded/mock_api_tests/test_encode_duration.py +0 -60
  288. package/generator/test/unbranded/mock_api_tests/test_encode_numeric.py +0 -32
  289. package/generator/test/unbranded/mock_api_tests/test_parameters_basic.py +0 -22
  290. package/generator/test/unbranded/mock_api_tests/test_parameters_spread.py +0 -66
  291. package/generator/test/unbranded/mock_api_tests/test_payload_content_negotiation.py +0 -33
  292. package/generator/test/unbranded/mock_api_tests/test_payload_multipart.py +0 -200
  293. package/generator/test/unbranded/mock_api_tests/test_serialization_encoded_name_json.py +0 -22
  294. package/generator/test/unbranded/mock_api_tests/test_special_words.py +0 -66
  295. package/generator/test/unbranded/mock_api_tests/test_unbranded.py +0 -65
  296. package/generator/test/unbranded/requirements.txt +0 -69
  297. package/generator/test/unbranded/tox.ini +0 -64
  298. package/generator/test/unittests/conftest.py +0 -15
  299. package/generator/test/unittests/requirements.txt +0 -3
  300. package/generator/test/unittests/test_enums.py +0 -89
  301. package/generator/test/unittests/test_model_base_serialization.py +0 -4906
  302. package/generator/test/unittests/test_model_base_xml_serialization.py +0 -1239
  303. package/generator/test/unittests/test_name_converter.py +0 -35
  304. package/generator/test/unittests/test_optional_return_type.py +0 -268
  305. package/generator/test/unittests/test_parameter_ordering.py +0 -104
  306. package/generator/test/unittests/test_sort_schema.py +0 -93
  307. package/generator/test/unittests/tox.ini +0 -5
  308. /package/eng/scripts/ci/{mypy.ini → config/mypy.ini} +0 -0
  309. /package/eng/scripts/ci/{pylintrc → config/pylintrc} +0 -0
  310. /package/eng/scripts/ci/{pyproject.toml → config/pyproject.toml} +0 -0
  311. /package/eng/scripts/ci/{pyrightconfig.json → config/pyrightconfig.json} +0 -0
@@ -622,57 +622,9 @@ class Model(_MyMutableMapping):
622
622
  for rest_field in self._attr_to_rest_field.values()
623
623
  if rest_field._default is not _UNSET
624
624
  }
625
- if args: # pylint: disable=too-many-nested-blocks
625
+ if args:
626
626
  if isinstance(args[0], ET.Element):
627
- existed_attr_keys = []
628
- model_meta = getattr(self, "_xml", {})
629
-
630
- for rf in self._attr_to_rest_field.values():
631
- prop_meta = getattr(rf, "_xml", {})
632
- xml_name = prop_meta.get("name", rf._rest_name)
633
- xml_ns = prop_meta.get("ns", model_meta.get("ns", None))
634
- if xml_ns:
635
- xml_name = "{" + xml_ns + "}" + xml_name
636
-
637
- # attribute
638
- if prop_meta.get("attribute", False) and args[0].get(xml_name) is not None:
639
- existed_attr_keys.append(xml_name)
640
- dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].get(xml_name))
641
- continue
642
-
643
- # unwrapped element is array
644
- if prop_meta.get("unwrapped", False):
645
- # unwrapped array could either use prop items meta/prop meta
646
- if prop_meta.get("itemsName"):
647
- xml_name = prop_meta.get("itemsName")
648
- xml_ns = prop_meta.get("itemNs")
649
- if xml_ns:
650
- xml_name = "{" + xml_ns + "}" + xml_name
651
- items = args[0].findall(xml_name) # pyright: ignore
652
- if len(items) > 0:
653
- existed_attr_keys.append(xml_name)
654
- dict_to_pass[rf._rest_name] = _deserialize(rf._type, items)
655
- elif not rf._is_optional:
656
- existed_attr_keys.append(xml_name)
657
- dict_to_pass[rf._rest_name] = []
658
- continue
659
-
660
- # text element is primitive type
661
- if prop_meta.get("text", False):
662
- if args[0].text is not None:
663
- dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].text)
664
- continue
665
-
666
- # wrapped element could be normal property or array, it should only have one element
667
- item = args[0].find(xml_name)
668
- if item is not None:
669
- existed_attr_keys.append(xml_name)
670
- dict_to_pass[rf._rest_name] = _deserialize(rf._type, item)
671
-
672
- # rest thing is additional properties
673
- for e in args[0]:
674
- if e.tag not in existed_attr_keys:
675
- dict_to_pass[e.tag] = _convert_element(e)
627
+ dict_to_pass.update(self._init_from_xml(args[0]))
676
628
  else:
677
629
  dict_to_pass.update(
678
630
  {k: _create_value(_get_rest_field(self._attr_to_rest_field, k), v) for k, v in args[0].items()}
@@ -691,6 +643,69 @@ class Model(_MyMutableMapping):
691
643
  )
692
644
  super().__init__(dict_to_pass)
693
645
 
646
+ def _init_from_xml(self, element: ET.Element) -> dict[str, typing.Any]:
647
+ """Deserialize an XML element into a dict mapping rest field names to values.
648
+
649
+ :param ET.Element element: The XML element to deserialize from.
650
+ :returns: A dictionary of rest_name to deserialized value pairs.
651
+ :rtype: dict
652
+ """
653
+ result: dict[str, typing.Any] = {}
654
+ model_meta = getattr(self, "_xml", {})
655
+ existed_attr_keys: list[str] = []
656
+
657
+ for rf in self._attr_to_rest_field.values():
658
+ prop_meta = getattr(rf, "_xml", {})
659
+ xml_name = prop_meta.get("name", rf._rest_name)
660
+ xml_ns = _resolve_xml_ns(prop_meta, model_meta)
661
+ if xml_ns:
662
+ xml_name = "{" + xml_ns + "}" + xml_name
663
+
664
+ # attribute
665
+ if prop_meta.get("attribute", False) and element.get(xml_name) is not None:
666
+ existed_attr_keys.append(xml_name)
667
+ result[rf._rest_name] = _deserialize(rf._type, element.get(xml_name))
668
+ continue
669
+
670
+ # unwrapped element is array
671
+ if prop_meta.get("unwrapped", False):
672
+ # unwrapped array could either use prop items meta/prop meta
673
+ _items_name = prop_meta.get("itemsName")
674
+ if _items_name:
675
+ xml_name = _items_name
676
+ _items_ns = prop_meta.get("itemsNs")
677
+ if _items_ns is not None:
678
+ xml_ns = _items_ns
679
+ if xml_ns:
680
+ xml_name = "{" + xml_ns + "}" + xml_name
681
+ items = element.findall(xml_name) # pyright: ignore
682
+ if len(items) > 0:
683
+ existed_attr_keys.append(xml_name)
684
+ result[rf._rest_name] = _deserialize(rf._type, items)
685
+ elif not rf._is_optional:
686
+ existed_attr_keys.append(xml_name)
687
+ result[rf._rest_name] = []
688
+ continue
689
+
690
+ # text element is primitive type
691
+ if prop_meta.get("text", False):
692
+ if element.text is not None:
693
+ result[rf._rest_name] = _deserialize(rf._type, element.text)
694
+ continue
695
+
696
+ # wrapped element could be normal property or array, it should only have one element
697
+ item = element.find(xml_name)
698
+ if item is not None:
699
+ existed_attr_keys.append(xml_name)
700
+ result[rf._rest_name] = _deserialize(rf._type, item)
701
+
702
+ # rest thing is additional properties
703
+ for e in element:
704
+ if e.tag not in existed_attr_keys:
705
+ result[e.tag] = _convert_element(e)
706
+
707
+ return result
708
+
694
709
  def copy(self) -> "Model":
695
710
  return Model(self.__dict__)
696
711
 
@@ -761,7 +776,7 @@ class Model(_MyMutableMapping):
761
776
  model_meta = getattr(cls, "_xml", {})
762
777
  prop_meta = getattr(discriminator, "_xml", {})
763
778
  xml_name = prop_meta.get("name", discriminator._rest_name)
764
- xml_ns = prop_meta.get("ns", model_meta.get("ns", None))
779
+ xml_ns = _resolve_xml_ns(prop_meta, model_meta)
765
780
  if xml_ns:
766
781
  xml_name = "{" + xml_ns + "}" + xml_name
767
782
 
@@ -1243,6 +1258,58 @@ def serialize_xml(model: Model, exclude_readonly: bool = False) -> str:
1243
1258
  return ET.tostring(_get_element(model, exclude_readonly), encoding="unicode") # type: ignore
1244
1259
 
1245
1260
 
1261
+ def _get_xml_ns(meta: dict[str, typing.Any]) -> typing.Optional[str]:
1262
+ """Return the XML namespace from a metadata dict, checking both 'ns' (old-style) and 'namespace' (DPG) keys.
1263
+
1264
+ :param dict meta: The metadata dictionary to extract namespace from.
1265
+ :returns: The namespace string if 'ns' or 'namespace' key is present, None otherwise.
1266
+ :rtype: str or None
1267
+ """
1268
+ ns = meta.get("ns")
1269
+ if ns is None:
1270
+ ns = meta.get("namespace")
1271
+ return ns
1272
+
1273
+
1274
+ def _resolve_xml_ns(
1275
+ prop_meta: dict[str, typing.Any], model_meta: typing.Optional[dict[str, typing.Any]] = None
1276
+ ) -> typing.Optional[str]:
1277
+ """Resolve XML namespace for a property, falling back to model namespace when appropriate.
1278
+
1279
+ Checks the property metadata first; if no namespace is found and the model does not declare
1280
+ an explicit prefix, falls back to the model-level namespace.
1281
+
1282
+ :param dict prop_meta: The property metadata dictionary.
1283
+ :param dict model_meta: The model metadata dictionary, used as fallback.
1284
+ :returns: The resolved namespace string, or None.
1285
+ :rtype: str or None
1286
+ """
1287
+ ns = _get_xml_ns(prop_meta)
1288
+ if ns is None and model_meta is not None and not model_meta.get("prefix"):
1289
+ ns = _get_xml_ns(model_meta)
1290
+ return ns
1291
+
1292
+
1293
+ def _set_xml_attribute(
1294
+ element: ET.Element, name: str, value: typing.Any, prop_meta: dict[str, typing.Any]
1295
+ ) -> None:
1296
+ """Set an XML attribute on an element, handling namespace prefix registration.
1297
+
1298
+ :param ET.Element element: The element to set the attribute on.
1299
+ :param str name: The default attribute name (wire name).
1300
+ :param any value: The attribute value.
1301
+ :param dict prop_meta: The property metadata dictionary.
1302
+ """
1303
+ xml_name = prop_meta.get("name", name)
1304
+ _attr_ns = _get_xml_ns(prop_meta)
1305
+ if _attr_ns:
1306
+ _attr_prefix = prop_meta.get("prefix")
1307
+ if _attr_prefix:
1308
+ _safe_register_namespace(_attr_prefix, _attr_ns)
1309
+ xml_name = "{" + _attr_ns + "}" + xml_name
1310
+ element.set(xml_name, _get_primitive_type_value(value))
1311
+
1312
+
1246
1313
  def _get_element(
1247
1314
  o: typing.Any,
1248
1315
  exclude_readonly: bool = False,
@@ -1254,10 +1321,16 @@ def _get_element(
1254
1321
 
1255
1322
  # if prop is a model, then use the prop element directly, else generate a wrapper of model
1256
1323
  if wrapped_element is None:
1324
+ # When serializing as an array item (parent_meta is set), check if the parent has an
1325
+ # explicit itemsName. This ensures correct element names for unwrapped arrays (where
1326
+ # the element tag is the property/items name, not the model type name).
1327
+ _items_name = parent_meta.get("itemsName") if parent_meta is not None else None
1328
+ element_name = _items_name if _items_name else (model_meta.get("name") or o.__class__.__name__)
1329
+ _model_ns = _get_xml_ns(model_meta)
1257
1330
  wrapped_element = _create_xml_element(
1258
- model_meta.get("name", o.__class__.__name__),
1331
+ element_name,
1259
1332
  model_meta.get("prefix"),
1260
- model_meta.get("ns"),
1333
+ _model_ns,
1261
1334
  )
1262
1335
 
1263
1336
  readonly_props = []
@@ -1279,7 +1352,9 @@ def _get_element(
1279
1352
  # additional properties will not have rest field, use the wire name as xml name
1280
1353
  prop_meta = {"name": k}
1281
1354
 
1282
- # if no ns for prop, use model's
1355
+ # Propagate model namespace to properties only for old-style "ns"-keyed models.
1356
+ # DPG-generated models use the "namespace" key and explicitly declare namespace on
1357
+ # each property that needs it, so propagation is intentionally skipped for them.
1283
1358
  if prop_meta.get("ns") is None and model_meta.get("ns"):
1284
1359
  prop_meta["ns"] = model_meta.get("ns")
1285
1360
  prop_meta["prefix"] = model_meta.get("prefix")
@@ -1291,12 +1366,7 @@ def _get_element(
1291
1366
  # text could only set on primitive type
1292
1367
  wrapped_element.text = _get_primitive_type_value(v)
1293
1368
  elif prop_meta.get("attribute", False):
1294
- xml_name = prop_meta.get("name", k)
1295
- if prop_meta.get("ns"):
1296
- ET.register_namespace(prop_meta.get("prefix"), prop_meta.get("ns")) # pyright: ignore
1297
- xml_name = "{" + prop_meta.get("ns") + "}" + xml_name # pyright: ignore
1298
- # attribute should be primitive type
1299
- wrapped_element.set(xml_name, _get_primitive_type_value(v))
1369
+ _set_xml_attribute(wrapped_element, k, v, prop_meta)
1300
1370
  else:
1301
1371
  # other wrapped prop element
1302
1372
  wrapped_element.append(_get_wrapped_element(v, exclude_readonly, prop_meta))
@@ -1305,6 +1375,7 @@ def _get_element(
1305
1375
  return [_get_element(x, exclude_readonly, parent_meta) for x in o] # type: ignore
1306
1376
  if isinstance(o, dict):
1307
1377
  result = []
1378
+ _dict_ns = _get_xml_ns(parent_meta) if parent_meta else None
1308
1379
  for k, v in o.items():
1309
1380
  result.append(
1310
1381
  _get_wrapped_element(
@@ -1312,7 +1383,7 @@ def _get_element(
1312
1383
  exclude_readonly,
1313
1384
  {
1314
1385
  "name": k,
1315
- "ns": parent_meta.get("ns") if parent_meta else None,
1386
+ "ns": _dict_ns,
1316
1387
  "prefix": parent_meta.get("prefix") if parent_meta else None,
1317
1388
  },
1318
1389
  )
@@ -1321,13 +1392,16 @@ def _get_element(
1321
1392
 
1322
1393
  # primitive case need to create element based on parent_meta
1323
1394
  if parent_meta:
1395
+ _items_ns = parent_meta.get("itemsNs")
1396
+ if _items_ns is None:
1397
+ _items_ns = _get_xml_ns(parent_meta)
1324
1398
  return _get_wrapped_element(
1325
1399
  o,
1326
1400
  exclude_readonly,
1327
1401
  {
1328
1402
  "name": parent_meta.get("itemsName", parent_meta.get("name")),
1329
1403
  "prefix": parent_meta.get("itemsPrefix", parent_meta.get("prefix")),
1330
- "ns": parent_meta.get("itemsNs", parent_meta.get("ns")),
1404
+ "ns": _items_ns,
1331
1405
  },
1332
1406
  )
1333
1407
 
@@ -1339,8 +1413,9 @@ def _get_wrapped_element(
1339
1413
  exclude_readonly: bool,
1340
1414
  meta: typing.Optional[dict[str, typing.Any]],
1341
1415
  ) -> ET.Element:
1416
+ _meta_ns = _get_xml_ns(meta) if meta else None
1342
1417
  wrapped_element = _create_xml_element(
1343
- meta.get("name") if meta else None, meta.get("prefix") if meta else None, meta.get("ns") if meta else None
1418
+ meta.get("name") if meta else None, meta.get("prefix") if meta else None, _meta_ns
1344
1419
  )
1345
1420
  if isinstance(v, (dict, list)):
1346
1421
  wrapped_element.extend(_get_element(v, exclude_readonly, meta))
@@ -1361,11 +1436,29 @@ def _get_primitive_type_value(v) -> str:
1361
1436
  return str(v)
1362
1437
 
1363
1438
 
1439
+ def _safe_register_namespace(prefix: str, ns: str) -> None:
1440
+ """Register an XML namespace prefix, handling reserved prefix patterns.
1441
+
1442
+ Some prefixes (e.g. 'ns2') match Python's reserved 'ns\\d+' pattern used for
1443
+ auto-generated prefixes, causing register_namespace to raise ValueError.
1444
+ Falls back to directly registering in the internal namespace map.
1445
+
1446
+ :param str prefix: The namespace prefix to register.
1447
+ :param str ns: The namespace URI.
1448
+ """
1449
+ try:
1450
+ ET.register_namespace(prefix, ns)
1451
+ except ValueError:
1452
+ _ns_map = getattr(ET, "_namespace_map", None)
1453
+ if _ns_map is not None:
1454
+ _ns_map[ns] = prefix
1455
+
1456
+
1364
1457
  def _create_xml_element(
1365
1458
  tag: typing.Any, prefix: typing.Optional[str] = None, ns: typing.Optional[str] = None
1366
1459
  ) -> ET.Element:
1367
1460
  if prefix and ns:
1368
- ET.register_namespace(prefix, ns)
1461
+ _safe_register_namespace(prefix, ns)
1369
1462
  if ns:
1370
1463
  return ET.Element("{" + ns + "}" + tag)
1371
1464
  return ET.Element(tag)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.28.1",
3
+ "version": "0.28.3",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",
@@ -29,19 +29,25 @@
29
29
  "node": ">=20.0.0"
30
30
  },
31
31
  "scripts": {
32
- "clean": "rimraf ./dist ./temp ./emitter/temp ./generator/test/azure/generated ./generator/test/unbranded/generated ./venv",
32
+ "clean": "rimraf ./dist ./temp ./venv ./tests/generated",
33
33
  "build": "tsc -p ./emitter/tsconfig.build.json && tsx ./eng/scripts/setup/build.ts",
34
34
  "watch": "tsc -p ./emitter/tsconfig.build.json --watch",
35
- "lint": "eslint emitter/ --max-warnings=0",
36
- "lint:py": "tsx ./eng/scripts/ci/lint.ts --folderName generator/pygen",
37
- "format": "pnpm -w format:dir packages/http-client-python && tsx ./eng/scripts/ci/format.ts",
38
35
  "install": "tsx ./eng/scripts/setup/install.ts",
39
36
  "prepare": "tsx ./eng/scripts/setup/prepare.ts",
37
+ "setup": "npm run build && npm run install",
38
+ "test": "tsx ./eng/scripts/ci/run-tests.ts",
39
+ "test:emitter": "tsx ./eng/scripts/ci/run-tests.ts --emitter",
40
+ "test:generator": "tsx ./eng/scripts/ci/run-tests.ts --generator",
41
+ "lint": "tsx ./eng/scripts/ci/lint.ts",
42
+ "lint:generated": "tsx ./eng/scripts/ci/lint.ts --generated",
43
+ "format": "tsx ./eng/scripts/ci/format.ts",
44
+ "format:check": "tsx ./eng/scripts/ci/format.ts --check",
45
+ "format:generated": "tsx ./eng/scripts/ci/format.ts --generated",
46
+ "typecheck": "tsx ./eng/scripts/ci/typecheck.ts",
47
+ "typecheck:generated": "tsx ./eng/scripts/ci/typecheck.ts --generated",
40
48
  "regenerate": "tsx ./eng/scripts/ci/regenerate.ts",
41
- "ci": "npm run test:emitter && npm run ci:generator --",
42
- "ci:generator": "tsx ./eng/scripts/ci/run-ci.ts",
43
- "test:generator": "tsx ./eng/scripts/ci/run-ci.ts --command=test",
44
- "test:emitter": "vitest run -c ./emitter/vitest.config.ts",
49
+ "ci": "npm run test && npm run lint && npm run typecheck",
50
+ "ci:generated": "tsx ./eng/scripts/ci/run-tests.ts --generator --env=ci",
45
51
  "change:version": "pnpm chronus version --ignore-policies --only @typespec/http-client-python",
46
52
  "change:add": "pnpm chronus add",
47
53
  "regen-docs": "node ../../packages/tspd/cmd/tspd.js doc . --enable-experimental --output-dir ../../website/src/content/docs/docs/emitters/clients/http-client-python/reference --skip-js"
@@ -54,20 +60,20 @@
54
60
  "emitter"
55
61
  ],
56
62
  "peerDependencies": {
57
- "@azure-tools/typespec-autorest": ">=0.66.0 <1.0.0",
58
- "@azure-tools/typespec-azure-core": ">=0.66.0 <1.0.0",
59
- "@azure-tools/typespec-azure-resource-manager": ">=0.66.0 <1.0.0",
60
- "@azure-tools/typespec-azure-rulesets": ">=0.66.0 <1.0.0",
61
- "@azure-tools/typespec-client-generator-core": ">=0.66.3 <1.0.0",
62
- "@typespec/compiler": "^1.10.0",
63
- "@typespec/http": "^1.10.0",
64
- "@typespec/openapi": "^1.10.0",
65
- "@typespec/rest": ">=0.80.0 <1.0.0",
66
- "@typespec/versioning": ">=0.80.0 <1.0.0",
67
- "@typespec/events": ">=0.80.0 <1.0.0",
68
- "@typespec/sse": ">=0.80.0 <1.0.0",
69
- "@typespec/streams": ">=0.80.0 <1.0.0",
70
- "@typespec/xml": ">=0.80.0 <1.0.0"
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",
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",
68
+ "@typespec/compiler": "^1.11.0",
69
+ "@typespec/http": "^1.11.0",
70
+ "@typespec/openapi": "^1.11.0",
71
+ "@typespec/rest": ">=0.81.0 <1.0.0",
72
+ "@typespec/versioning": ">=0.81.0 <1.0.0",
73
+ "@typespec/events": ">=0.81.0 <1.0.0",
74
+ "@typespec/sse": ">=0.81.0 <1.0.0",
75
+ "@typespec/streams": ">=0.81.0 <1.0.0",
76
+ "@typespec/xml": ">=0.81.0 <1.0.0"
71
77
  },
72
78
  "dependencies": {
73
79
  "js-yaml": "~4.1.0",
@@ -77,29 +83,29 @@
77
83
  "tsx": "^4.21.0"
78
84
  },
79
85
  "devDependencies": {
80
- "@azure-tools/typespec-autorest": "~0.66.0",
81
- "@azure-tools/typespec-azure-core": "~0.66.0",
82
- "@azure-tools/typespec-azure-resource-manager": "~0.66.0",
83
- "@azure-tools/typespec-azure-rulesets": "~0.66.0",
84
- "@azure-tools/typespec-client-generator-core": "~0.66.3",
85
- "@azure-tools/azure-http-specs": "0.1.0-alpha.39-dev.4",
86
- "@typespec/compiler": "^1.10.0",
87
- "@typespec/http": "^1.10.0",
88
- "@typespec/openapi": "^1.10.0",
89
- "@typespec/rest": "~0.80.0",
90
- "@typespec/versioning": "~0.80.0",
91
- "@typespec/events": "~0.80.0",
92
- "@typespec/spector": "0.1.0-alpha.24",
93
- "@typespec/spec-api": "0.1.0-alpha.14-dev.1",
94
- "@typespec/sse": "~0.80.0",
95
- "@typespec/streams": "~0.80.0",
96
- "@typespec/xml": "~0.80.0",
97
- "@typespec/http-specs": "0.1.0-alpha.35",
86
+ "@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",
89
+ "@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",
92
+ "@typespec/compiler": "^1.11.0",
93
+ "@typespec/http": "^1.11.0",
94
+ "@typespec/openapi": "^1.11.0",
95
+ "@typespec/rest": "~0.81.0",
96
+ "@typespec/versioning": "~0.81.0",
97
+ "@typespec/events": "~0.81.0",
98
+ "@typespec/spector": "0.1.0-alpha.25",
99
+ "@typespec/spec-api": "0.1.0-alpha.14",
100
+ "@typespec/sse": "~0.81.0",
101
+ "@typespec/streams": "~0.81.0",
102
+ "@typespec/xml": "~0.81.0",
103
+ "@typespec/http-specs": "0.1.0-alpha.36",
98
104
  "@types/js-yaml": "~4.0.5",
99
105
  "@types/node": "~25.0.2",
100
106
  "@types/semver": "7.5.8",
101
107
  "c8": "^10.1.3",
102
- "chalk": "5.3.0",
108
+ "picocolors": "~1.1.1",
103
109
  "rimraf": "~6.1.2",
104
110
  "typescript": "~5.9.2",
105
111
  "typescript-eslint": "^8.49.0",
@@ -1,89 +0,0 @@
1
- /* eslint-disable no-console */
2
- import { execSync } from "child_process";
3
- import fs, { readFileSync } from "fs";
4
- import { platform } from "os";
5
- import { dirname, join } from "path";
6
- import { fileURLToPath } from "url";
7
- import { parseArgs } from "util";
8
-
9
- const root = join(dirname(fileURLToPath(import.meta.url)), "../../../");
10
-
11
- const argv = parseArgs({
12
- args: process.argv.slice(2),
13
- options: {
14
- validFolders: { type: "string", required: true, multiple: true },
15
- flavor: { type: "string" },
16
- command: { type: "string" },
17
- name: { type: "string" },
18
- testFolder: { type: "string" },
19
- },
20
- });
21
-
22
- const foldersToProcess = argv.values.flavor
23
- ? [argv.values.flavor]
24
- : argv.values.validFolders || ["azure", "unbranded"];
25
-
26
- const commandToRun = argv.values.command || "ci";
27
- const TEST_FOLDER = argv.values.testFolder || "generator/test";
28
-
29
- function getCommand(command: string, flavor: string, name?: string): string {
30
- let retval: string;
31
- if (platform() === "win32") {
32
- retval = `set FOLDER=${flavor} && ${venvPath} -m tox -c ./${TEST_FOLDER}/${flavor}/tox.ini -e ${command}`;
33
- } else {
34
- // Linux and macOS
35
- retval = `FOLDER=${flavor} ${venvPath} -m tox -c ./${TEST_FOLDER}/${flavor}/tox.ini -e ${command}`;
36
- }
37
- if (name) {
38
- return `${retval} -- -f ${name}`;
39
- }
40
- return retval;
41
- }
42
-
43
- function sectionExistsInToxIni(command: string, flavor: string): boolean {
44
- const toxIniPath = join(root, `${TEST_FOLDER}/${flavor}/tox.ini`);
45
- const toxIniContent = readFileSync(toxIniPath, "utf-8");
46
- return command
47
- .split(",")
48
- .map((c) => `[testenv:${c}]`)
49
- .every((section) => toxIniContent.includes(section));
50
- }
51
-
52
- function myExecSync(command: string, flavor: string, name?: string): void {
53
- if (!sectionExistsInToxIni(command, flavor)) {
54
- console.log(`No section for ${command} in tox.ini for flavor ${flavor}. Skipping...`);
55
- return;
56
- }
57
- execSync(getCommand(command, flavor, name), { stdio: "inherit" });
58
- execSync(getCommand(command, "unittests", name), { stdio: "inherit" });
59
- }
60
-
61
- let venvPath = join(root, "venv");
62
- if (fs.existsSync(join(venvPath, "bin"))) {
63
- venvPath = join(venvPath, "bin", "python");
64
- } else if (fs.existsSync(join(venvPath, "Scripts"))) {
65
- venvPath = join(venvPath, "Scripts", "python.exe");
66
- } else {
67
- throw new Error("Virtual environment doesn't exist.");
68
- }
69
-
70
- foldersToProcess.forEach((flavor) => {
71
- try {
72
- if (getCommand(commandToRun, flavor, argv.values.name)) {
73
- console.log(`Running ${commandToRun} for flavor ${flavor}...`);
74
- myExecSync(commandToRun, flavor, argv.values.name);
75
- } else {
76
- console.error(`Error: Unknown command '${commandToRun}'.`);
77
- process.exit(1);
78
- }
79
- } catch (error) {
80
- const message = (error as Error).message;
81
- if (message.includes("pyright") || message.includes("mypy") || message.includes("lint")) {
82
- // fixing linting issues that come from upgrading python version in separate pr
83
- process.exit(0);
84
- }
85
- console.error(message);
86
- console.error(`Error executing command for flavor ${flavor}: ${message}`);
87
- process.exit(1);
88
- }
89
- });
@@ -1,94 +0,0 @@
1
- # -------------------------------------------------------------------------
2
- # Copyright (c) Microsoft Corporation. All rights reserved.
3
- # Licensed under the MIT License. See License.txt in the project root for
4
- # license information.
5
- # --------------------------------------------------------------------------
6
- import pytest
7
- from azure.resourcemanager.commonproperties.aio import CommonPropertiesClient
8
- from azure.resourcemanager.commonproperties import models
9
- from azure.core import exceptions
10
-
11
- SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
12
- RESOURCE_GROUP_NAME = "test-rg"
13
-
14
-
15
- @pytest.fixture
16
- async def client(credential, authentication_policy):
17
- async with CommonPropertiesClient(
18
- credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
19
- ) as client:
20
- yield client
21
-
22
-
23
- @pytest.mark.asyncio
24
- async def test_managed_identity_get(client):
25
- result = await client.managed_identity.get(
26
- resource_group_name=RESOURCE_GROUP_NAME, managed_identity_tracked_resource_name="identity"
27
- )
28
- assert result.location == "eastus"
29
- assert result.identity.type == "SystemAssigned"
30
- assert result.properties.provisioning_state == "Succeeded"
31
-
32
-
33
- @pytest.mark.asyncio
34
- async def test_managed_identity_create_with_system_assigned(client):
35
- result = await client.managed_identity.create_with_system_assigned(
36
- resource_group_name=RESOURCE_GROUP_NAME,
37
- managed_identity_tracked_resource_name="identity",
38
- resource=models.ManagedIdentityTrackedResource(
39
- location="eastus", identity=models.ManagedServiceIdentity(type="SystemAssigned")
40
- ),
41
- )
42
- assert result.location == "eastus"
43
- assert result.identity.type == "SystemAssigned"
44
- assert result.properties.provisioning_state == "Succeeded"
45
-
46
-
47
- @pytest.mark.asyncio
48
- async def test_managed_identity_update_with_user_assigned_and_system_assigned(client):
49
- result = await client.managed_identity.update_with_user_assigned_and_system_assigned(
50
- resource_group_name=RESOURCE_GROUP_NAME,
51
- managed_identity_tracked_resource_name="identity",
52
- properties=models.ManagedIdentityTrackedResource(
53
- location="eastus",
54
- identity=models.ManagedServiceIdentity(
55
- type="SystemAssigned,UserAssigned",
56
- user_assigned_identities={
57
- "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id1": models.UserAssignedIdentity()
58
- },
59
- ),
60
- ),
61
- )
62
- assert result.location == "eastus"
63
- assert result.identity.type == "SystemAssigned,UserAssigned"
64
- assert result.properties.provisioning_state == "Succeeded"
65
-
66
-
67
- @pytest.mark.asyncio
68
- async def test_error_get_for_predefined_error(client):
69
- try:
70
- await client.error.get_for_predefined_error(
71
- resource_group_name=RESOURCE_GROUP_NAME,
72
- confidential_resource_name="confidential",
73
- )
74
- except exceptions.ResourceNotFoundError as e:
75
- assert e.status_code == 404
76
- assert (
77
- e.error.message
78
- == "The Resource 'Azure.ResourceManager.CommonProperties/confidentialResources/confidential' under resource group 'test-rg' was not found."
79
- )
80
-
81
-
82
- @pytest.mark.asyncio
83
- async def test_error_create_for_user_defined_error(client):
84
- try:
85
- await client.error.create_for_user_defined_error(
86
- resource_group_name=RESOURCE_GROUP_NAME,
87
- confidential_resource_name="confidential",
88
- resource=models.ConfidentialResource(
89
- location="eastus", properties=models.ConfidentialResourceProperties(username="00")
90
- ),
91
- )
92
- except exceptions.HttpResponseError as e:
93
- assert e.status_code == 400
94
- assert e.error.message == "Username should not contain only numbers."
@@ -1,30 +0,0 @@
1
- # -------------------------------------------------------------------------
2
- # Copyright (c) Microsoft Corporation. All rights reserved.
3
- # Licensed under the MIT License. See License.txt in the project root for
4
- # license information.
5
- # --------------------------------------------------------------------------
6
- import pytest
7
- from azure.resourcemanager.largeheader.aio import LargeHeaderClient
8
- from azure.resourcemanager.largeheader import models
9
-
10
- SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
- RESOURCE_GROUP_NAME = "test-rg"
12
-
13
-
14
- @pytest.fixture
15
- async def client(credential, authentication_policy):
16
- async with LargeHeaderClient(
17
- credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
18
- ) as client:
19
- yield client
20
-
21
-
22
- @pytest.mark.asyncio
23
- async def test_large_headers_begin_two6_k(client: LargeHeaderClient):
24
- result = await (
25
- await client.large_headers.begin_two6_k(
26
- resource_group_name=RESOURCE_GROUP_NAME,
27
- large_header_name="header1",
28
- )
29
- ).result()
30
- assert result == models.CancelResult(succeeded=True)