@typespec/http-client-python 0.1.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 (334) hide show
  1. package/README.md +118 -0
  2. package/dist/emitter/code-model.d.ts +4 -0
  3. package/dist/emitter/code-model.d.ts.map +1 -0
  4. package/dist/emitter/code-model.js +195 -0
  5. package/dist/emitter/code-model.js.map +1 -0
  6. package/dist/emitter/emitter.d.ts +6 -0
  7. package/dist/emitter/emitter.d.ts.map +1 -0
  8. package/dist/emitter/emitter.js +104 -0
  9. package/dist/emitter/emitter.js.map +1 -0
  10. package/dist/emitter/external-process.d.ts +20 -0
  11. package/dist/emitter/external-process.d.ts.map +1 -0
  12. package/dist/emitter/external-process.js +44 -0
  13. package/dist/emitter/external-process.js.map +1 -0
  14. package/dist/emitter/http.d.ts +7 -0
  15. package/dist/emitter/http.d.ts.map +1 -0
  16. package/dist/emitter/http.js +268 -0
  17. package/dist/emitter/http.js.map +1 -0
  18. package/dist/emitter/index.d.ts +3 -0
  19. package/dist/emitter/index.d.ts.map +1 -0
  20. package/dist/emitter/index.js +3 -0
  21. package/dist/emitter/index.js.map +1 -0
  22. package/dist/emitter/lib.d.ts +30 -0
  23. package/dist/emitter/lib.d.ts.map +1 -0
  24. package/dist/emitter/lib.js +33 -0
  25. package/dist/emitter/lib.js.map +1 -0
  26. package/dist/emitter/types.d.ts +36 -0
  27. package/dist/emitter/types.d.ts.map +1 -0
  28. package/dist/emitter/types.js +491 -0
  29. package/dist/emitter/types.js.map +1 -0
  30. package/dist/emitter/utils.d.ts +26 -0
  31. package/dist/emitter/utils.d.ts.map +1 -0
  32. package/dist/emitter/utils.js +155 -0
  33. package/dist/emitter/utils.js.map +1 -0
  34. package/emitter/src/code-model.ts +272 -0
  35. package/emitter/src/emitter.ts +127 -0
  36. package/emitter/src/external-process.ts +52 -0
  37. package/emitter/src/http.ts +382 -0
  38. package/emitter/src/index.ts +2 -0
  39. package/emitter/src/lib.ts +59 -0
  40. package/emitter/src/types.ts +573 -0
  41. package/emitter/src/utils.ts +215 -0
  42. package/emitter/temp/tsconfig.tsbuildinfo +1 -0
  43. package/emitter/test/utils.test.ts +22 -0
  44. package/emitter/tsconfig.build.json +11 -0
  45. package/emitter/tsconfig.json +7 -0
  46. package/emitter/vitest.config.ts +4 -0
  47. package/eng/scripts/Build-Packages.ps1 +86 -0
  48. package/eng/scripts/Check-GitChanges.ps1 +22 -0
  49. package/eng/scripts/Functions.ps1 +26 -0
  50. package/eng/scripts/Generate.ps1 +11 -0
  51. package/eng/scripts/Generation.psm1 +22 -0
  52. package/eng/scripts/Initialize-Repository.ps1 +40 -0
  53. package/eng/scripts/Test-Packages.ps1 +65 -0
  54. package/eng/scripts/ci/format.ts +3 -0
  55. package/eng/scripts/ci/lint.ts +39 -0
  56. package/eng/scripts/ci/mypy.ini +38 -0
  57. package/eng/scripts/ci/pylintrc +59 -0
  58. package/eng/scripts/ci/pyproject.toml +18 -0
  59. package/eng/scripts/ci/pyrightconfig.json +6 -0
  60. package/eng/scripts/ci/regenerate.ts +299 -0
  61. package/eng/scripts/ci/run-ci.ts +88 -0
  62. package/eng/scripts/ci/run_apiview.py +40 -0
  63. package/eng/scripts/ci/run_mypy.py +49 -0
  64. package/eng/scripts/ci/run_pylint.py +50 -0
  65. package/eng/scripts/ci/run_pyright.py +58 -0
  66. package/eng/scripts/ci/util.py +72 -0
  67. package/eng/scripts/ci/utils.ts +48 -0
  68. package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
  69. package/eng/scripts/setup/install.py +53 -0
  70. package/eng/scripts/setup/prepare.py +42 -0
  71. package/eng/scripts/setup/run-python3.ts +25 -0
  72. package/eng/scripts/setup/run_tsp.py +42 -0
  73. package/eng/scripts/setup/system-requirements.ts +261 -0
  74. package/eng/scripts/setup/venvtools.py +87 -0
  75. package/generator/LICENSE +21 -0
  76. package/generator/README.md +1 -0
  77. package/generator/dev_requirements.txt +13 -0
  78. package/generator/pygen/__init__.py +107 -0
  79. package/generator/pygen/_version.py +7 -0
  80. package/generator/pygen/black.py +71 -0
  81. package/generator/pygen/codegen/__init__.py +338 -0
  82. package/generator/pygen/codegen/_utils.py +17 -0
  83. package/generator/pygen/codegen/models/__init__.py +204 -0
  84. package/generator/pygen/codegen/models/base.py +186 -0
  85. package/generator/pygen/codegen/models/base_builder.py +118 -0
  86. package/generator/pygen/codegen/models/client.py +433 -0
  87. package/generator/pygen/codegen/models/code_model.py +237 -0
  88. package/generator/pygen/codegen/models/combined_type.py +149 -0
  89. package/generator/pygen/codegen/models/constant_type.py +129 -0
  90. package/generator/pygen/codegen/models/credential_types.py +214 -0
  91. package/generator/pygen/codegen/models/dictionary_type.py +127 -0
  92. package/generator/pygen/codegen/models/enum_type.py +238 -0
  93. package/generator/pygen/codegen/models/imports.py +291 -0
  94. package/generator/pygen/codegen/models/list_type.py +143 -0
  95. package/generator/pygen/codegen/models/lro_operation.py +142 -0
  96. package/generator/pygen/codegen/models/lro_paging_operation.py +32 -0
  97. package/generator/pygen/codegen/models/model_type.py +359 -0
  98. package/generator/pygen/codegen/models/operation.py +530 -0
  99. package/generator/pygen/codegen/models/operation_group.py +184 -0
  100. package/generator/pygen/codegen/models/paging_operation.py +155 -0
  101. package/generator/pygen/codegen/models/parameter.py +412 -0
  102. package/generator/pygen/codegen/models/parameter_list.py +387 -0
  103. package/generator/pygen/codegen/models/primitive_types.py +659 -0
  104. package/generator/pygen/codegen/models/property.py +170 -0
  105. package/generator/pygen/codegen/models/request_builder.py +189 -0
  106. package/generator/pygen/codegen/models/request_builder_parameter.py +115 -0
  107. package/generator/pygen/codegen/models/response.py +348 -0
  108. package/generator/pygen/codegen/models/utils.py +21 -0
  109. package/generator/pygen/codegen/serializers/__init__.py +574 -0
  110. package/generator/pygen/codegen/serializers/base_serializer.py +21 -0
  111. package/generator/pygen/codegen/serializers/builder_serializer.py +1507 -0
  112. package/generator/pygen/codegen/serializers/client_serializer.py +294 -0
  113. package/generator/pygen/codegen/serializers/enum_serializer.py +15 -0
  114. package/generator/pygen/codegen/serializers/general_serializer.py +213 -0
  115. package/generator/pygen/codegen/serializers/import_serializer.py +126 -0
  116. package/generator/pygen/codegen/serializers/metadata_serializer.py +198 -0
  117. package/generator/pygen/codegen/serializers/model_init_serializer.py +33 -0
  118. package/generator/pygen/codegen/serializers/model_serializer.py +317 -0
  119. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +89 -0
  120. package/generator/pygen/codegen/serializers/operations_init_serializer.py +44 -0
  121. package/generator/pygen/codegen/serializers/parameter_serializer.py +221 -0
  122. package/generator/pygen/codegen/serializers/patch_serializer.py +19 -0
  123. package/generator/pygen/codegen/serializers/request_builders_serializer.py +52 -0
  124. package/generator/pygen/codegen/serializers/sample_serializer.py +168 -0
  125. package/generator/pygen/codegen/serializers/test_serializer.py +292 -0
  126. package/generator/pygen/codegen/serializers/types_serializer.py +31 -0
  127. package/generator/pygen/codegen/serializers/utils.py +68 -0
  128. package/generator/pygen/codegen/templates/client.py.jinja2 +37 -0
  129. package/generator/pygen/codegen/templates/client_container.py.jinja2 +12 -0
  130. package/generator/pygen/codegen/templates/config.py.jinja2 +73 -0
  131. package/generator/pygen/codegen/templates/config_container.py.jinja2 +16 -0
  132. package/generator/pygen/codegen/templates/conftest.py.jinja2 +28 -0
  133. package/generator/pygen/codegen/templates/enum.py.jinja2 +13 -0
  134. package/generator/pygen/codegen/templates/enum_container.py.jinja2 +10 -0
  135. package/generator/pygen/codegen/templates/init.py.jinja2 +24 -0
  136. package/generator/pygen/codegen/templates/keywords.jinja2 +19 -0
  137. package/generator/pygen/codegen/templates/lro_operation.py.jinja2 +16 -0
  138. package/generator/pygen/codegen/templates/lro_paging_operation.py.jinja2 +18 -0
  139. package/generator/pygen/codegen/templates/macros.jinja2 +12 -0
  140. package/generator/pygen/codegen/templates/metadata.json.jinja2 +167 -0
  141. package/generator/pygen/codegen/templates/model_base.py.jinja2 +1157 -0
  142. package/generator/pygen/codegen/templates/model_container.py.jinja2 +12 -0
  143. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +97 -0
  144. package/generator/pygen/codegen/templates/model_init.py.jinja2 +28 -0
  145. package/generator/pygen/codegen/templates/model_msrest.py.jinja2 +92 -0
  146. package/generator/pygen/codegen/templates/operation.py.jinja2 +21 -0
  147. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +75 -0
  148. package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +19 -0
  149. package/generator/pygen/codegen/templates/operation_tools.jinja2 +81 -0
  150. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +17 -0
  151. package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +6 -0
  152. package/generator/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +21 -0
  153. package/generator/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +8 -0
  154. package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +107 -0
  155. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +9 -0
  156. package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +108 -0
  157. package/generator/pygen/codegen/templates/paging_operation.py.jinja2 +21 -0
  158. package/generator/pygen/codegen/templates/patch.py.jinja2 +19 -0
  159. package/generator/pygen/codegen/templates/pkgutil_init.py.jinja2 +1 -0
  160. package/generator/pygen/codegen/templates/request_builder.py.jinja2 +28 -0
  161. package/generator/pygen/codegen/templates/request_builders.py.jinja2 +10 -0
  162. package/generator/pygen/codegen/templates/rest_init.py.jinja2 +12 -0
  163. package/generator/pygen/codegen/templates/sample.py.jinja2 +44 -0
  164. package/generator/pygen/codegen/templates/serialization.py.jinja2 +2114 -0
  165. package/generator/pygen/codegen/templates/test.py.jinja2 +50 -0
  166. package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +26 -0
  167. package/generator/pygen/codegen/templates/types.py.jinja2 +7 -0
  168. package/generator/pygen/codegen/templates/validation.py.jinja2 +38 -0
  169. package/generator/pygen/codegen/templates/vendor.py.jinja2 +95 -0
  170. package/generator/pygen/codegen/templates/version.py.jinja2 +4 -0
  171. package/generator/pygen/m2r.py +65 -0
  172. package/generator/pygen/postprocess/__init__.py +183 -0
  173. package/generator/pygen/postprocess/get_all.py +19 -0
  174. package/generator/pygen/postprocess/venvtools.py +75 -0
  175. package/generator/pygen/preprocess/__init__.py +515 -0
  176. package/generator/pygen/preprocess/helpers.py +27 -0
  177. package/generator/pygen/preprocess/python_mappings.py +224 -0
  178. package/generator/pygen/utils.py +163 -0
  179. package/generator/pygen.egg-info/PKG-INFO +25 -0
  180. package/generator/pygen.egg-info/SOURCES.txt +66 -0
  181. package/generator/pygen.egg-info/dependency_links.txt +1 -0
  182. package/generator/pygen.egg-info/requires.txt +4 -0
  183. package/generator/pygen.egg-info/top_level.txt +1 -0
  184. package/generator/requirements.txt +12 -0
  185. package/generator/setup.py +55 -0
  186. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_models_common_types_managed_identity_async.py +63 -0
  187. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_models_resource_async.py +284 -0
  188. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_access_async.py +101 -0
  189. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_flatten_async.py +93 -0
  190. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +31 -0
  191. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_basic_async.py +76 -0
  192. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_lro_rpc_async.py +22 -0
  193. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_lro_standard_async.py +39 -0
  194. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py +33 -0
  195. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_page_async.py +58 -0
  196. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_scalar_async.py +41 -0
  197. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_traits_async.py +87 -0
  198. package/generator/test/azure/mock_api_tests/asynctests/test_azure_example_basic_async.py +30 -0
  199. package/generator/test/azure/mock_api_tests/asynctests/test_azure_special_headers_client_request_id_async.py +30 -0
  200. package/generator/test/azure/mock_api_tests/conftest.py +150 -0
  201. package/generator/test/azure/mock_api_tests/test_azure_arm_models_common_types_managed_identity.py +60 -0
  202. package/generator/test/azure/mock_api_tests/test_azure_arm_models_resource.py +254 -0
  203. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_access.py +92 -0
  204. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_flatten.py +84 -0
  205. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +28 -0
  206. package/generator/test/azure/mock_api_tests/test_azure_core_basic.py +70 -0
  207. package/generator/test/azure/mock_api_tests/test_azure_core_lro_rpc.py +20 -0
  208. package/generator/test/azure/mock_api_tests/test_azure_core_lro_standard.py +32 -0
  209. package/generator/test/azure/mock_api_tests/test_azure_core_model.py +30 -0
  210. package/generator/test/azure/mock_api_tests/test_azure_core_page.py +51 -0
  211. package/generator/test/azure/mock_api_tests/test_azure_core_scalar.py +35 -0
  212. package/generator/test/azure/mock_api_tests/test_azure_core_traits.py +85 -0
  213. package/generator/test/azure/mock_api_tests/test_azure_example_basic.py +29 -0
  214. package/generator/test/azure/mock_api_tests/test_azure_special_headers_client_request_id.py +29 -0
  215. package/generator/test/azure/requirements.txt +89 -0
  216. package/generator/test/azure/tox.ini +56 -0
  217. package/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py +121 -0
  218. package/generator/test/generic_mock_api_tests/asynctests/test_client_naming_async.py +69 -0
  219. package/generator/test/generic_mock_api_tests/asynctests/test_client_structure_async.py +62 -0
  220. package/generator/test/generic_mock_api_tests/asynctests/test_encode_bytes_async.py +133 -0
  221. package/generator/test/generic_mock_api_tests/asynctests/test_encode_datetime_async.py +127 -0
  222. package/generator/test/generic_mock_api_tests/asynctests/test_encode_duration_async.py +63 -0
  223. package/generator/test/generic_mock_api_tests/asynctests/test_encode_numeric_async.py +35 -0
  224. package/generator/test/generic_mock_api_tests/asynctests/test_headasboolean_async.py +35 -0
  225. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_basic_async.py +24 -0
  226. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_body_optionality_async.py +30 -0
  227. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_collection_format_async.py +44 -0
  228. package/generator/test/generic_mock_api_tests/asynctests/test_parameters_spread_async.py +76 -0
  229. package/generator/test/generic_mock_api_tests/asynctests/test_payload_content_negotiation_async.py +37 -0
  230. package/generator/test/generic_mock_api_tests/asynctests/test_payload_json_merge_patch_async.py +98 -0
  231. package/generator/test/generic_mock_api_tests/asynctests/test_payload_media_type_async.py +27 -0
  232. package/generator/test/generic_mock_api_tests/asynctests/test_payload_multipart_async.py +153 -0
  233. package/generator/test/generic_mock_api_tests/asynctests/test_payload_pageable_async.py +19 -0
  234. package/generator/test/generic_mock_api_tests/asynctests/test_payload_xml_async.py +103 -0
  235. package/generator/test/generic_mock_api_tests/asynctests/test_resiliency_srv_driven_async.py +128 -0
  236. package/generator/test/generic_mock_api_tests/asynctests/test_routes_async.py +331 -0
  237. package/generator/test/generic_mock_api_tests/asynctests/test_serialization_encoded_name_json_async.py +24 -0
  238. package/generator/test/generic_mock_api_tests/asynctests/test_server_endpoint_not_defined_async.py +18 -0
  239. package/generator/test/generic_mock_api_tests/asynctests/test_server_path_multiple_async.py +25 -0
  240. package/generator/test/generic_mock_api_tests/asynctests/test_server_path_single_async.py +18 -0
  241. package/generator/test/generic_mock_api_tests/asynctests/test_server_versions_not_versioned_async.py +28 -0
  242. package/generator/test/generic_mock_api_tests/asynctests/test_server_versions_versioned_async.py +34 -0
  243. package/generator/test/generic_mock_api_tests/asynctests/test_special_headers_conditional_request_async.py +38 -0
  244. package/generator/test/generic_mock_api_tests/asynctests/test_special_headers_repeatability_async.py +19 -0
  245. package/generator/test/generic_mock_api_tests/asynctests/test_special_words_async.py +42 -0
  246. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_array_async.py +118 -0
  247. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_dictionary_async.py +98 -0
  248. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_enum_extensible_async.py +25 -0
  249. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_enum_fixed_async.py +27 -0
  250. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_empty_async.py +32 -0
  251. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_enum_discriminator_async.py +70 -0
  252. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_nested_discriminator_async.py +85 -0
  253. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_not_discriminated_async.py +34 -0
  254. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_recursive_async.py +34 -0
  255. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_inheritance_single_discriminator_async.py +67 -0
  256. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_usage_async.py +32 -0
  257. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_visibility_async.py +47 -0
  258. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_additionalproperties_async.py +352 -0
  259. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_nullable_async.py +110 -0
  260. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_optional_async.py +197 -0
  261. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_property_valuetypes_async.py +315 -0
  262. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_scalar_async.py +60 -0
  263. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_union_async.py +90 -0
  264. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_added_async.py +36 -0
  265. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_made_optional_async.py +21 -0
  266. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_removed_async.py +21 -0
  267. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_renamed_from_async.py +29 -0
  268. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_return_type_changed_from_async.py +18 -0
  269. package/generator/test/generic_mock_api_tests/asynctests/test_versioning_type_changed_from_async.py +22 -0
  270. package/generator/test/generic_mock_api_tests/conftest.py +113 -0
  271. package/generator/test/generic_mock_api_tests/data/image.jpg +0 -0
  272. package/generator/test/generic_mock_api_tests/data/image.png +0 -0
  273. package/generator/test/generic_mock_api_tests/test_authentication.py +113 -0
  274. package/generator/test/generic_mock_api_tests/test_client_naming.py +57 -0
  275. package/generator/test/generic_mock_api_tests/test_client_structure.py +57 -0
  276. package/generator/test/generic_mock_api_tests/test_encode_bytes.py +128 -0
  277. package/generator/test/generic_mock_api_tests/test_encode_datetime.py +123 -0
  278. package/generator/test/generic_mock_api_tests/test_encode_duration.py +60 -0
  279. package/generator/test/generic_mock_api_tests/test_encode_numeric.py +31 -0
  280. package/generator/test/generic_mock_api_tests/test_headasboolean.py +33 -0
  281. package/generator/test/generic_mock_api_tests/test_parameters_basic.py +22 -0
  282. package/generator/test/generic_mock_api_tests/test_parameters_body_optionality.py +27 -0
  283. package/generator/test/generic_mock_api_tests/test_parameters_collection_format.py +37 -0
  284. package/generator/test/generic_mock_api_tests/test_parameters_spread.py +66 -0
  285. package/generator/test/generic_mock_api_tests/test_payload_content_negotiation.py +33 -0
  286. package/generator/test/generic_mock_api_tests/test_payload_json_merge_patch.py +93 -0
  287. package/generator/test/generic_mock_api_tests/test_payload_media_type.py +25 -0
  288. package/generator/test/generic_mock_api_tests/test_payload_multipart.py +140 -0
  289. package/generator/test/generic_mock_api_tests/test_payload_pageable.py +18 -0
  290. package/generator/test/generic_mock_api_tests/test_payload_xml.py +93 -0
  291. package/generator/test/generic_mock_api_tests/test_resiliency_srv_driven.py +122 -0
  292. package/generator/test/generic_mock_api_tests/test_routes.py +285 -0
  293. package/generator/test/generic_mock_api_tests/test_serialization_encoded_name_json.py +21 -0
  294. package/generator/test/generic_mock_api_tests/test_server_endpoint_not_defined.py +17 -0
  295. package/generator/test/generic_mock_api_tests/test_server_path_multiple.py +21 -0
  296. package/generator/test/generic_mock_api_tests/test_server_path_single.py +17 -0
  297. package/generator/test/generic_mock_api_tests/test_server_versions_not_versioned.py +25 -0
  298. package/generator/test/generic_mock_api_tests/test_server_versions_versioned.py +30 -0
  299. package/generator/test/generic_mock_api_tests/test_special_headers_conditional_request.py +34 -0
  300. package/generator/test/generic_mock_api_tests/test_special_headers_repeatability.py +18 -0
  301. package/generator/test/generic_mock_api_tests/test_special_words.py +37 -0
  302. package/generator/test/generic_mock_api_tests/test_typetest_array.py +103 -0
  303. package/generator/test/generic_mock_api_tests/test_typetest_dictionary.py +86 -0
  304. package/generator/test/generic_mock_api_tests/test_typetest_enum_extensible.py +23 -0
  305. package/generator/test/generic_mock_api_tests/test_typetest_enum_fixed.py +25 -0
  306. package/generator/test/generic_mock_api_tests/test_typetest_model_empty.py +29 -0
  307. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_enum_discriminator.py +58 -0
  308. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_nested_discriminator.py +79 -0
  309. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_not_discriminated.py +31 -0
  310. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_recursive.py +32 -0
  311. package/generator/test/generic_mock_api_tests/test_typetest_model_inheritance_single_discriminator.py +60 -0
  312. package/generator/test/generic_mock_api_tests/test_typetest_model_usage.py +28 -0
  313. package/generator/test/generic_mock_api_tests/test_typetest_model_visibility.py +40 -0
  314. package/generator/test/generic_mock_api_tests/test_typetest_property_additionalproperties.py +313 -0
  315. package/generator/test/generic_mock_api_tests/test_typetest_property_nullable.py +102 -0
  316. package/generator/test/generic_mock_api_tests/test_typetest_property_optional.py +174 -0
  317. package/generator/test/generic_mock_api_tests/test_typetest_property_valuetypes.py +286 -0
  318. package/generator/test/generic_mock_api_tests/test_typetest_scalar.py +53 -0
  319. package/generator/test/generic_mock_api_tests/test_typetest_union.py +80 -0
  320. package/generator/test/generic_mock_api_tests/test_versioning_added.py +33 -0
  321. package/generator/test/generic_mock_api_tests/test_versioning_made_optional.py +20 -0
  322. package/generator/test/generic_mock_api_tests/test_versioning_removed.py +20 -0
  323. package/generator/test/generic_mock_api_tests/test_versioning_renamed_from.py +27 -0
  324. package/generator/test/generic_mock_api_tests/test_versioning_return_type_changed_from.py +17 -0
  325. package/generator/test/generic_mock_api_tests/test_versioning_type_changed_from.py +21 -0
  326. package/generator/test/generic_mock_api_tests/unittests/test_model_base_serialization.py +4067 -0
  327. package/generator/test/generic_mock_api_tests/unittests/test_model_base_xml_serialization.py +1001 -0
  328. package/generator/test/unbranded/mock_api_tests/asynctests/test_unbranded_async.py +24 -0
  329. package/generator/test/unbranded/mock_api_tests/cadl-ranch-config.yaml +27 -0
  330. package/generator/test/unbranded/mock_api_tests/conftest.py +35 -0
  331. package/generator/test/unbranded/mock_api_tests/test_unbranded.py +57 -0
  332. package/generator/test/unbranded/requirements.txt +72 -0
  333. package/generator/test/unbranded/tox.ini +56 -0
  334. package/package.json +93 -0
@@ -0,0 +1,98 @@
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 payload.jsonmergepatch.aio import JsonMergePatchClient
8
+ from payload.jsonmergepatch.models import InnerModel, Resource, ResourcePatch
9
+
10
+ try:
11
+ from azure.core.serialization import NULL
12
+ except ImportError:
13
+ from corehttp.serialization import NULL
14
+
15
+
16
+ @pytest.fixture
17
+ async def client():
18
+ async with JsonMergePatchClient(endpoint="http://localhost:3000") as client:
19
+ yield client
20
+
21
+
22
+ @pytest.mark.asyncio
23
+ async def test_create_resource(client: JsonMergePatchClient):
24
+ inner_madge = InnerModel(name="InnerMadge", description="innerDesc")
25
+ create_resource = Resource(
26
+ name="Madge",
27
+ description="desc",
28
+ map={"key": inner_madge},
29
+ array=[inner_madge],
30
+ int_value=1,
31
+ float_value=1.1,
32
+ inner_model=inner_madge,
33
+ int_array=[1, 2, 3],
34
+ )
35
+ response = await client.create_resource(create_resource)
36
+ assert response == create_resource
37
+
38
+
39
+ @pytest.mark.asyncio
40
+ async def test_update_resource_model_input(client: JsonMergePatchClient):
41
+ update_resource = ResourcePatch(
42
+ description=NULL,
43
+ map={"key": InnerModel(description=NULL), "key2": NULL},
44
+ array=NULL,
45
+ int_value=NULL,
46
+ float_value=NULL,
47
+ inner_model=NULL,
48
+ int_array=NULL,
49
+ )
50
+ response = await client.update_resource(update_resource)
51
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
52
+
53
+
54
+ @pytest.mark.asyncio
55
+ async def test_update_resource_raw_input(client: JsonMergePatchClient):
56
+ response = await client.update_resource(
57
+ {
58
+ "description": None,
59
+ "map": {"key": {"description": None}, "key2": None},
60
+ "array": None,
61
+ "intValue": None,
62
+ "floatValue": None,
63
+ "innerModel": None,
64
+ "intArray": None,
65
+ }
66
+ )
67
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
68
+
69
+
70
+ @pytest.mark.asyncio
71
+ async def test_update_optional_resource_model_input(client: JsonMergePatchClient):
72
+ update_resource = ResourcePatch(
73
+ description=NULL,
74
+ map={"key": InnerModel(description=NULL), "key2": NULL},
75
+ array=NULL,
76
+ int_value=NULL,
77
+ float_value=NULL,
78
+ inner_model=NULL,
79
+ int_array=NULL,
80
+ )
81
+ response = await client.update_optional_resource(update_resource)
82
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
83
+
84
+
85
+ @pytest.mark.asyncio
86
+ async def test_update_optional_resource_raw_input(client: JsonMergePatchClient):
87
+ response = await client.update_optional_resource(
88
+ {
89
+ "description": None,
90
+ "map": {"key": {"description": None}, "key2": None},
91
+ "array": None,
92
+ "intValue": None,
93
+ "floatValue": None,
94
+ "innerModel": None,
95
+ "intArray": None,
96
+ }
97
+ )
98
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
@@ -0,0 +1,27 @@
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 payload.mediatype.aio import MediaTypeClient
8
+
9
+
10
+ @pytest.fixture
11
+ async def client():
12
+ async with MediaTypeClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ @pytest.mark.asyncio
17
+ async def test_json(client: MediaTypeClient):
18
+ data = "foo"
19
+ await client.string_body.send_as_json(data)
20
+ assert await client.string_body.get_as_json() == data
21
+
22
+
23
+ @pytest.mark.asyncio
24
+ async def test_text(client: MediaTypeClient):
25
+ data = "{cat}"
26
+ await client.string_body.send_as_text(data)
27
+ assert await client.string_body.get_as_text() == data
@@ -0,0 +1,153 @@
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
+ from pathlib import Path
7
+ import pytest
8
+ from payload.multipart import models
9
+ from payload.multipart.aio import MultiPartClient
10
+
11
+ JPG = Path(__file__).parent.parent / "data/image.jpg"
12
+ PNG = Path(__file__).parent.parent / "data/image.png"
13
+
14
+
15
+ @pytest.fixture
16
+ async def client():
17
+ async with MultiPartClient(endpoint="http://localhost:3000") as client:
18
+ yield client
19
+
20
+
21
+ @pytest.mark.asyncio
22
+ async def test_anonymous_model(client: MultiPartClient):
23
+ await client.form_data.anonymous_model({"profileImage": open(str(JPG), "rb")})
24
+
25
+
26
+ @pytest.mark.asyncio
27
+ async def test_basic(client: MultiPartClient):
28
+ await client.form_data.basic(
29
+ models.MultiPartRequest(
30
+ id="123",
31
+ profile_image=open(str(JPG), "rb"),
32
+ )
33
+ )
34
+
35
+
36
+ @pytest.mark.asyncio
37
+ async def test_binary_array_parts(client: MultiPartClient):
38
+ await client.form_data.binary_array_parts(
39
+ models.BinaryArrayPartsRequest(
40
+ id="123",
41
+ pictures=[
42
+ open(str(PNG), "rb"),
43
+ open(str(PNG), "rb"),
44
+ ],
45
+ )
46
+ )
47
+
48
+
49
+ @pytest.mark.asyncio
50
+ async def test_check_file_name_and_content_type(client: MultiPartClient):
51
+ await client.form_data.check_file_name_and_content_type(
52
+ models.MultiPartRequest(
53
+ id="123",
54
+ profile_image=("hello.jpg", open(str(JPG), "rb"), "image/jpg"),
55
+ )
56
+ )
57
+
58
+
59
+ @pytest.mark.asyncio
60
+ async def test_complex(client: MultiPartClient):
61
+ await client.form_data.file_array_and_basic(
62
+ models.ComplexPartsRequest(
63
+ id="123",
64
+ address=models.Address(city="X"),
65
+ pictures=[
66
+ open(str(PNG), "rb"),
67
+ open(str(PNG), "rb"),
68
+ ],
69
+ profile_image=open(str(JPG), "rb"),
70
+ )
71
+ )
72
+
73
+
74
+ @pytest.mark.asyncio
75
+ async def test_json_part(client: MultiPartClient):
76
+ await client.form_data.json_part(
77
+ models.JsonPartRequest(
78
+ address=models.Address(city="X"),
79
+ profile_image=open(str(JPG), "rb"),
80
+ )
81
+ )
82
+
83
+
84
+ @pytest.mark.asyncio
85
+ async def test_multi_binary_parts(client: MultiPartClient):
86
+ await client.form_data.multi_binary_parts(
87
+ models.MultiBinaryPartsRequest(
88
+ profile_image=open(str(JPG), "rb"),
89
+ picture=open(str(PNG), "rb"),
90
+ )
91
+ )
92
+ await client.form_data.multi_binary_parts(
93
+ models.MultiBinaryPartsRequest(
94
+ profile_image=open(str(JPG), "rb"),
95
+ )
96
+ )
97
+
98
+
99
+ @pytest.mark.asyncio
100
+ async def test_file_with_http_part_specific_content_type(client: MultiPartClient):
101
+ await client.form_data.http_parts.content_type.image_jpeg_content_type(
102
+ models.FileWithHttpPartSpecificContentTypeRequest(
103
+ profile_image=("hello.jpg", open(str(JPG), "rb"), "image/jpg"),
104
+ )
105
+ )
106
+
107
+
108
+ @pytest.mark.asyncio
109
+ async def test_file_with_http_part_required_content_type(client: MultiPartClient):
110
+ await client.form_data.http_parts.content_type.required_content_type(
111
+ models.FileWithHttpPartRequiredContentTypeRequest(
112
+ profile_image=open(str(JPG), "rb"),
113
+ )
114
+ )
115
+
116
+
117
+ @pytest.mark.asyncio
118
+ async def test_file_with_http_part_optional_content_type(client: MultiPartClient):
119
+ # call twice: one with content type, one without
120
+ await client.form_data.http_parts.content_type.optional_content_type(
121
+ models.FileWithHttpPartOptionalContentTypeRequest(
122
+ profile_image=("hello.jpg", open(str(JPG), "rb").read()),
123
+ )
124
+ )
125
+ await client.form_data.http_parts.content_type.optional_content_type(
126
+ models.FileWithHttpPartOptionalContentTypeRequest(
127
+ profile_image=("hello.jpg", open(str(JPG), "rb").read(), "application/octet-stream"),
128
+ )
129
+ )
130
+
131
+
132
+ @pytest.mark.asyncio
133
+ async def test_complex_with_http_part(client: MultiPartClient):
134
+ await client.form_data.http_parts.json_array_and_file_array(
135
+ models.ComplexHttpPartsModelRequest(
136
+ id="123",
137
+ previous_addresses=[
138
+ models.Address(city="Y"),
139
+ models.Address(city="Z"),
140
+ ],
141
+ address=models.Address(city="X"),
142
+ pictures=[
143
+ open(str(PNG), "rb"),
144
+ open(str(PNG), "rb"),
145
+ ],
146
+ profile_image=open(str(JPG), "rb"),
147
+ )
148
+ )
149
+
150
+
151
+ @pytest.mark.asyncio
152
+ async def test_http_parts_non_string_float(client: MultiPartClient):
153
+ await client.form_data.http_parts.non_string.float(models.FloatRequest(temperature=0.5))
@@ -0,0 +1,19 @@
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 payload.pageable.aio import PageableClient
8
+
9
+
10
+ @pytest.fixture
11
+ async def client():
12
+ async with PageableClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ @pytest.mark.asyncio
17
+ async def test_list(client: PageableClient):
18
+ result = [p async for p in client.list(maxpagesize=3)]
19
+ assert len(result) == 4
@@ -0,0 +1,103 @@
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 payload.xml.aio import XmlClient
8
+ from payload.xml.models import (
9
+ SimpleModel,
10
+ ModelWithSimpleArrays,
11
+ ModelWithArrayOfModel,
12
+ ModelWithAttributes,
13
+ ModelWithUnwrappedArray,
14
+ ModelWithRenamedFields,
15
+ ModelWithEmptyArray,
16
+ ModelWithText,
17
+ ModelWithDictionary,
18
+ ModelWithEncodedNames,
19
+ )
20
+
21
+
22
+ @pytest.fixture
23
+ async def client():
24
+ async with XmlClient(endpoint="http://localhost:3000") as client:
25
+ yield client
26
+
27
+
28
+ @pytest.mark.asyncio
29
+ async def test_simple_model(client: XmlClient):
30
+ model = SimpleModel(name="foo", age=123)
31
+ assert await client.simple_model_value.get() == model
32
+ await client.simple_model_value.put(model)
33
+
34
+
35
+ @pytest.mark.asyncio
36
+ async def test_model_with_simple_arrays(client: XmlClient):
37
+ model = ModelWithSimpleArrays(colors=["red", "green", "blue"], counts=[1, 2])
38
+ assert await client.model_with_simple_arrays_value.get() == model
39
+ await client.model_with_simple_arrays_value.put(model)
40
+
41
+
42
+ @pytest.mark.asyncio
43
+ async def test_model_with_array_of_model(client: XmlClient):
44
+ model = ModelWithArrayOfModel(
45
+ items_property=[
46
+ SimpleModel(name="foo", age=123),
47
+ SimpleModel(name="bar", age=456),
48
+ ]
49
+ )
50
+ assert await client.model_with_array_of_model_value.get() == model
51
+ await client.model_with_array_of_model_value.put(model)
52
+
53
+
54
+ @pytest.mark.asyncio
55
+ async def test_model_with_attributes(client: XmlClient):
56
+ model = ModelWithAttributes(id1=123, id2="foo", enabled=True)
57
+ assert await client.model_with_attributes_value.get() == model
58
+ await client.model_with_attributes_value.put(model)
59
+
60
+
61
+ @pytest.mark.asyncio
62
+ async def test_model_with_unwrapped_array(client: XmlClient):
63
+ model = ModelWithUnwrappedArray(colors=["red", "green", "blue"], counts=[1, 2])
64
+ assert await client.model_with_unwrapped_array_value.get() == model
65
+ await client.model_with_unwrapped_array_value.put(model)
66
+
67
+
68
+ @pytest.mark.asyncio
69
+ async def test_model_with_renamed_fields(client: XmlClient):
70
+ model = ModelWithRenamedFields(
71
+ input_data=SimpleModel(name="foo", age=123),
72
+ output_data=SimpleModel(name="bar", age=456),
73
+ )
74
+ assert await client.model_with_renamed_fields_value.get() == model
75
+ await client.model_with_renamed_fields_value.put(model)
76
+
77
+
78
+ @pytest.mark.asyncio
79
+ async def test_model_with_empty_array(client: XmlClient):
80
+ model = ModelWithEmptyArray(items_property=[])
81
+ assert await client.model_with_empty_array_value.get() == model
82
+ await client.model_with_empty_array_value.put(model)
83
+
84
+
85
+ @pytest.mark.asyncio
86
+ async def test_model_with_text(client: XmlClient):
87
+ model = ModelWithText(language="foo", content="\n This is some text.\n")
88
+ assert await client.model_with_text_value.get() == model
89
+ await client.model_with_text_value.put(model)
90
+
91
+
92
+ @pytest.mark.asyncio
93
+ async def test_model_with_dictionary(client: XmlClient):
94
+ model = ModelWithDictionary(metadata={"Color": "blue", "Count": "123", "Enabled": "false"})
95
+ assert await client.model_with_dictionary_value.get() == model
96
+ await client.model_with_dictionary_value.put(model)
97
+
98
+
99
+ @pytest.mark.asyncio
100
+ async def test_model_with_encoded_names(client: XmlClient):
101
+ model = ModelWithEncodedNames(model_data=SimpleModel(name="foo", age=123), colors=["red", "green", "blue"])
102
+ assert await client.model_with_encoded_names_value.get() == model
103
+ await client.model_with_encoded_names_value.put(model)
@@ -0,0 +1,128 @@
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 resiliency.srv.driven1.aio import ResiliencyServiceDrivenClient as V1Client
8
+ from resiliency.srv.driven2.aio import ResiliencyServiceDrivenClient as V2Client
9
+
10
+
11
+ def get_v1_client(service_deployment_version: str, api_version: str = "v1") -> V1Client:
12
+ return V1Client(
13
+ endpoint="http://localhost:3000",
14
+ service_deployment_version=service_deployment_version,
15
+ api_version=api_version,
16
+ )
17
+
18
+
19
+ def get_v2_client(service_deployment_version: str, api_version: str = "v2") -> V2Client:
20
+ return V2Client(
21
+ endpoint="http://localhost:3000",
22
+ service_deployment_version=service_deployment_version,
23
+ api_version=api_version,
24
+ )
25
+
26
+
27
+ @pytest.mark.asyncio
28
+ async def test_add_optional_param_from_none():
29
+ # old client to old service with api version v1
30
+ async with V1Client(endpoint="http://localhost:3000", service_deployment_version="v1") as client:
31
+ await client.from_none()
32
+
33
+ # old client to new service with api version v1
34
+ async with V1Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
35
+ await client.from_none()
36
+
37
+ # new client to new service with api version v1
38
+ async with V2Client(
39
+ endpoint="http://localhost:3000",
40
+ service_deployment_version="v2",
41
+ api_version="v1",
42
+ ) as client:
43
+ await client.from_none()
44
+
45
+ # new client to new service with api version v2
46
+ async with V2Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
47
+ await client.from_none(new_parameter="new")
48
+
49
+
50
+ @pytest.mark.asyncio
51
+ async def test_add_optional_param_from_one_required():
52
+ # old client to old service with api version v1
53
+ async with V1Client(endpoint="http://localhost:3000", service_deployment_version="v1") as client:
54
+ await client.from_one_required(parameter="required")
55
+
56
+ # old client to new service with api version v1
57
+ async with V1Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
58
+ await client.from_one_required(parameter="required")
59
+
60
+ # new client to new service with api version v1
61
+ async with V2Client(
62
+ endpoint="http://localhost:3000",
63
+ service_deployment_version="v2",
64
+ api_version="v1",
65
+ ) as client:
66
+ await client.from_one_required(parameter="required")
67
+
68
+ # new client to new service with api version v2
69
+ async with V2Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
70
+ await client.from_one_required(parameter="required", new_parameter="new")
71
+
72
+
73
+ @pytest.mark.asyncio
74
+ async def test_add_optional_param_from_one_optional():
75
+ # old client to old service with api version v1
76
+ async with V1Client(endpoint="http://localhost:3000", service_deployment_version="v1") as client:
77
+ await client.from_one_optional(parameter="optional")
78
+
79
+ # old client to new service with api version v1
80
+ async with V1Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
81
+ await client.from_one_optional(parameter="optional")
82
+
83
+ # new client to new service with api version v1
84
+ async with V2Client(
85
+ endpoint="http://localhost:3000",
86
+ service_deployment_version="v2",
87
+ api_version="v1",
88
+ ) as client:
89
+ await client.from_one_optional(parameter="optional")
90
+
91
+ # new client to new service with api version v2
92
+ async with V2Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
93
+ await client.from_one_optional(parameter="optional", new_parameter="new")
94
+
95
+
96
+ @pytest.mark.asyncio
97
+ async def test_break_the_glass(core_library):
98
+ request = core_library.rest.HttpRequest(method="DELETE", url="/add-operation")
99
+ async with V1Client(
100
+ endpoint="http://localhost:3000",
101
+ service_deployment_version="v2",
102
+ api_version="v2",
103
+ ) as client:
104
+ response = await client.send_request(request)
105
+ response.raise_for_status()
106
+
107
+
108
+ @pytest.mark.asyncio
109
+ async def test_add_operation():
110
+ async with V2Client(endpoint="http://localhost:3000", service_deployment_version="v2") as client:
111
+ await client.add_operation()
112
+
113
+
114
+ @pytest.mark.parametrize(
115
+ "func_name, params",
116
+ [
117
+ ("from_none", {"new_parameter": "new"}),
118
+ ("from_one_optional", {"parameter": "optional", "new_parameter": "new"}),
119
+ ("from_one_required", {"parameter": "required", "new_parameter": "new"}),
120
+ ("add_operation", {}),
121
+ ],
122
+ )
123
+ @pytest.mark.asyncio
124
+ async def test_new_client_with_old_apiversion_call_new_parameter(func_name, params):
125
+ client = get_v2_client(service_deployment_version="v2", api_version="v1")
126
+ with pytest.raises(ValueError) as ex:
127
+ await getattr(client, func_name)(**params)
128
+ assert "is not available in API version" in str(ex.value)