@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,58 @@
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 typing import AsyncIterable
8
+ from specs.azure.core.page import models, aio
9
+
10
+ VALID_USER = models.User(id=1, name="Madge", etag="11bdc430-65e8-45ad-81d9-8ffa60d55b59")
11
+
12
+
13
+ @pytest.fixture
14
+ async def client():
15
+ async with aio.PageClient() as client:
16
+ yield client
17
+
18
+
19
+ async def _list_with_page_tests(pager: AsyncIterable[models.User]):
20
+ result = [p async for p in pager]
21
+ assert len(result) == 1
22
+ assert result[0].id == 1
23
+ assert result[0].name == "Madge"
24
+ assert result[0].etag == "11bdc430-65e8-45ad-81d9-8ffa60d55b59"
25
+ assert result[0].orders is None
26
+
27
+
28
+ @pytest.mark.asyncio
29
+ async def test_list_with_page(client: aio.PageClient):
30
+ await _list_with_page_tests(client.list_with_page())
31
+
32
+
33
+ @pytest.mark.asyncio
34
+ async def test_list_with_custom_page_model(client: aio.PageClient):
35
+ await _list_with_page_tests(client.list_with_custom_page_model())
36
+ with pytest.raises(AttributeError):
37
+ models.CustomPageModel
38
+
39
+
40
+ @pytest.mark.asyncio
41
+ async def test_list_with_parameters(client: aio.PageClient):
42
+ result = [
43
+ item
44
+ async for item in client.list_with_parameters(models.ListItemInputBody(input_name="Madge"), another="Second")
45
+ ]
46
+ assert len(result) == 1
47
+ assert result[0] == VALID_USER
48
+
49
+
50
+ @pytest.mark.asyncio
51
+ async def test_two_models_as_page_item(client: aio.PageClient):
52
+ result = [item async for item in client.two_models_as_page_item.list_first_item()]
53
+ assert len(result) == 1
54
+ assert result[0].id == 1
55
+
56
+ result = [item async for item in client.two_models_as_page_item.list_second_item()]
57
+ assert len(result) == 1
58
+ assert result[0].name == "Madge"
@@ -0,0 +1,41 @@
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 specs.azure.core.scalar.aio import ScalarClient
8
+ from specs.azure.core.scalar import models
9
+
10
+
11
+ @pytest.fixture
12
+ async def client():
13
+ async with ScalarClient() as client:
14
+ yield client
15
+
16
+
17
+ @pytest.mark.asyncio
18
+ async def test_azure_location_scalar_get(client: ScalarClient):
19
+ result = await client.azure_location_scalar.get()
20
+ assert result == "eastus"
21
+
22
+
23
+ @pytest.mark.asyncio
24
+ async def test_azure_location_scalar_put(client: ScalarClient):
25
+ await client.azure_location_scalar.put("eastus")
26
+
27
+
28
+ @pytest.mark.asyncio
29
+ async def test_azure_location_scalar_post(client: ScalarClient):
30
+ result = await client.azure_location_scalar.post(models.AzureLocationModel(location="eastus"))
31
+ assert result == models.AzureLocationModel(location="eastus")
32
+
33
+
34
+ @pytest.mark.asyncio
35
+ async def test_azure_location_scalar_header(client: ScalarClient):
36
+ await client.azure_location_scalar.header(region="eastus")
37
+
38
+
39
+ @pytest.mark.asyncio
40
+ async def test_azure_location_scalar_query(client: ScalarClient):
41
+ await client.azure_location_scalar.query(region="eastus")
@@ -0,0 +1,87 @@
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 functools
7
+ from datetime import datetime
8
+
9
+ import pytest
10
+ from azure.core.exceptions import HttpResponseError
11
+ from azure.core import MatchConditions
12
+ from specs.azure.core.traits.aio import TraitsClient
13
+ from specs.azure.core.traits.models import UserActionParam
14
+
15
+
16
+ @pytest.fixture
17
+ async def client():
18
+ async with TraitsClient() as client:
19
+ yield client
20
+
21
+
22
+ @pytest.mark.asyncio
23
+ async def test_get(client: TraitsClient, check_client_request_id_header):
24
+ async def assert_test_get(**kwargs):
25
+ checked = {}
26
+ result, header = await client.smoke_test(
27
+ id=1,
28
+ foo="123",
29
+ if_unmodified_since=datetime(year=2022, month=8, day=26, hour=14, minute=38, second=0),
30
+ if_modified_since=datetime(year=2021, month=8, day=26, hour=14, minute=38, second=0),
31
+ cls=lambda x, y, z: (y, z),
32
+ raw_request_hook=functools.partial(
33
+ check_client_request_id_header, header="x-ms-client-request-id", checked=checked
34
+ ),
35
+ **kwargs,
36
+ )
37
+ assert result.id == 1
38
+ assert result.name == "Madge"
39
+ assert header["ETag"] == "11bdc430-65e8-45ad-81d9-8ffa60d55b59"
40
+ assert header["bar"] == "456"
41
+ assert header["x-ms-client-request-id"] == checked["x-ms-client-request-id"]
42
+
43
+ await assert_test_get(etag="valid", match_condition=MatchConditions.IfNotModified)
44
+ await assert_test_get(etag="invalid", match_condition=MatchConditions.IfModified)
45
+ with pytest.raises(HttpResponseError):
46
+ await assert_test_get()
47
+
48
+
49
+ @pytest.mark.asyncio
50
+ async def test_repeatable_action(client: TraitsClient, check_repeatability_header):
51
+ result, header = await client.repeatable_action(
52
+ id=1,
53
+ body=UserActionParam(user_action_value="test"),
54
+ cls=lambda x, y, z: (y, z),
55
+ raw_request_hook=check_repeatability_header,
56
+ )
57
+ assert result.user_action_result == "test"
58
+ assert header["Repeatability-Result"] == "accepted"
59
+
60
+ result, header = await client.repeatable_action(
61
+ id=1,
62
+ body=UserActionParam(user_action_value="test"),
63
+ cls=lambda x, y, z: (y, z),
64
+ headers={
65
+ "Repeatability-Request-ID": "5942d803-e3fa-4f96-8f67-607d7bd607f5",
66
+ "Repeatability-First-Sent": "Sun, 06 Nov 1994 08:49:37 GMT",
67
+ },
68
+ raw_request_hook=check_repeatability_header,
69
+ )
70
+ assert result.user_action_result == "test"
71
+ assert header["Repeatability-Result"] == "accepted"
72
+
73
+ with pytest.raises(HttpResponseError):
74
+ await client.repeatable_action(
75
+ id=1,
76
+ body=UserActionParam(user_action_value="test"),
77
+ cls=lambda x, y, z: (y, z),
78
+ headers={"Repeatability-Request-ID": "wrong-id"},
79
+ )
80
+
81
+ with pytest.raises(HttpResponseError):
82
+ await client.repeatable_action(
83
+ id=1,
84
+ body=UserActionParam(user_action_value="test"),
85
+ cls=lambda x, y, z: (y, z),
86
+ headers={"Repeatability-First-Sent": "wrong-datetime"},
87
+ )
@@ -0,0 +1,30 @@
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 specs.azure.example.basic.aio import AzureExampleClient
8
+ from specs.azure.example.basic.models import ActionRequest, Model
9
+
10
+
11
+ @pytest.fixture
12
+ async def client():
13
+ async with AzureExampleClient() as client:
14
+ yield client
15
+
16
+
17
+ @pytest.mark.asyncio
18
+ async def test_basic_action(client: AzureExampleClient):
19
+ body = ActionRequest(
20
+ string_property="text",
21
+ model_property=Model(int32_property=1, float32_property=1.5, enum_property="EnumValue1"),
22
+ array_property=["item"],
23
+ record_property={"record": "value"},
24
+ )
25
+ result = await client.basic_action(
26
+ body=body,
27
+ query_param="query",
28
+ header_param="header",
29
+ )
30
+ assert result.string_property == body.string_property
@@ -0,0 +1,30 @@
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 functools
7
+
8
+ import pytest
9
+
10
+ from azure.specialheaders.xmsclientrequestid.aio import XmsClientRequestIdClient
11
+
12
+
13
+ @pytest.fixture
14
+ async def client():
15
+ async with XmsClientRequestIdClient() as client:
16
+ yield client
17
+
18
+
19
+ @pytest.mark.asyncio
20
+ async def test_get(client: XmsClientRequestIdClient, check_client_request_id_header):
21
+ checked = {}
22
+ result, resp = await client.get(
23
+ cls=lambda x, y, z: (y, x),
24
+ raw_request_hook=functools.partial(
25
+ check_client_request_id_header, header="x-ms-client-request-id", checked=checked
26
+ ),
27
+ )
28
+ assert result is None
29
+ assert resp.http_response.headers["x-ms-client-request-id"] == checked["x-ms-client-request-id"]
30
+ pass
@@ -0,0 +1,150 @@
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 os
7
+ import subprocess
8
+ import signal
9
+ import pytest
10
+ import re
11
+ from typing import Literal
12
+ from pathlib import Path
13
+
14
+
15
+ def start_server_process():
16
+ path = Path(os.path.dirname(__file__)) / Path("../../../../node_modules/@azure-tools/cadl-ranch-specs")
17
+ os.chdir(path.resolve())
18
+ cmd = "cadl-ranch serve ./http --coverageFile ./cadl-ranch-coverage-python-standard.json"
19
+ if os.name == "nt":
20
+ return subprocess.Popen(cmd, shell=True)
21
+ return subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)
22
+
23
+
24
+ def terminate_server_process(process):
25
+ if os.name == "nt":
26
+ process.kill()
27
+ else:
28
+ os.killpg(os.getpgid(process.pid), signal.SIGTERM) # Send the signal to all the process groups
29
+
30
+
31
+ @pytest.fixture(scope="session", autouse=True)
32
+ def testserver():
33
+ """Start cadl ranch mock api tests"""
34
+ server = start_server_process()
35
+ yield
36
+ terminate_server_process(server)
37
+
38
+
39
+ _VALID_UUID = re.compile(r"^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$")
40
+ _VALID_RFC7231 = re.compile(
41
+ r"^(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{2}\s"
42
+ r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT$"
43
+ )
44
+
45
+
46
+ def validate_format(value: str, format: Literal["uuid", "rfc7231"]):
47
+ if format == "uuid":
48
+ assert _VALID_UUID.match(value)
49
+ elif format == "rfc7231":
50
+ assert _VALID_RFC7231.match(value)
51
+ else:
52
+ raise ValueError("Unknown format")
53
+
54
+
55
+ @pytest.fixture
56
+ def check_repeatability_header():
57
+ def func(request):
58
+ validate_format(request.http_request.headers["Repeatability-Request-ID"], "uuid")
59
+ validate_format(request.http_request.headers["Repeatability-First-Sent"], "rfc7231")
60
+
61
+ return func
62
+
63
+
64
+ @pytest.fixture
65
+ def check_client_request_id_header():
66
+ def func(request, header: str, checked: dict):
67
+ validate_format(request.http_request.headers[header], "uuid")
68
+ checked[header] = request.http_request.headers[header]
69
+
70
+ return func
71
+
72
+
73
+ # ================== after azure-core fix, the following code can be removed (begin) ==================
74
+ import urllib.parse
75
+ from azure.core.rest import HttpRequest
76
+
77
+
78
+ def update_api_version_of_status_link(status_link: str):
79
+ request_params = {}
80
+ parsed_status_link = urllib.parse.urlparse(status_link)
81
+ request_params = {
82
+ key.lower(): [urllib.parse.quote(v) for v in value]
83
+ for key, value in urllib.parse.parse_qs(parsed_status_link.query).items()
84
+ }
85
+ request_params["api-version"] = "2022-12-01-preview"
86
+ status_link = urllib.parse.urljoin(status_link, parsed_status_link.path)
87
+ return status_link, request_params
88
+
89
+
90
+ @pytest.fixture
91
+ def polling_method():
92
+ from azure.core.polling.base_polling import LROBasePolling
93
+
94
+ class TempLroBasePolling(LROBasePolling):
95
+
96
+ def request_status(self, status_link: str):
97
+ if self._path_format_arguments:
98
+ status_link = self._client.format_url(status_link, **self._path_format_arguments)
99
+ status_link, request_params = update_api_version_of_status_link(status_link)
100
+ if "request_id" not in self._operation_config:
101
+ self._operation_config["request_id"] = self._get_request_id()
102
+
103
+ rest_request = HttpRequest("GET", status_link, params=request_params)
104
+ return self._client.send_request(rest_request, _return_pipeline_response=True, **self._operation_config)
105
+
106
+ return TempLroBasePolling(0)
107
+
108
+
109
+ @pytest.fixture
110
+ def async_polling_method():
111
+ from azure.core.polling.async_base_polling import AsyncLROBasePolling
112
+
113
+ class AsyncTempLroBasePolling(AsyncLROBasePolling):
114
+
115
+ async def request_status(self, status_link: str):
116
+ if self._path_format_arguments:
117
+ status_link = self._client.format_url(status_link, **self._path_format_arguments)
118
+ status_link, request_params = update_api_version_of_status_link(status_link)
119
+ # Re-inject 'x-ms-client-request-id' while polling
120
+ if "request_id" not in self._operation_config:
121
+ self._operation_config["request_id"] = self._get_request_id()
122
+
123
+ rest_request = HttpRequest("GET", status_link, params=request_params)
124
+ return await self._client.send_request(
125
+ rest_request, _return_pipeline_response=True, **self._operation_config
126
+ )
127
+
128
+ return AsyncTempLroBasePolling(0)
129
+
130
+
131
+ # ================== after azure-core fix, the up code can be removed (end) ==================
132
+
133
+
134
+ @pytest.fixture()
135
+ def credential():
136
+ """I actually don't need anything, since the authentication policy
137
+ will bypass it.
138
+ """
139
+
140
+ class FakeCredential:
141
+ pass
142
+
143
+ return FakeCredential()
144
+
145
+
146
+ @pytest.fixture()
147
+ def authentication_policy():
148
+ from azure.core.pipeline.policies import SansIOHTTPPolicy
149
+
150
+ return SansIOHTTPPolicy()
@@ -0,0 +1,60 @@
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.models.commontypes.managedidentity import ManagedIdentityClient
8
+ from azure.resourcemanager.models.commontypes.managedidentity import models
9
+
10
+ SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
+ RESOURCE_GROUP_NAME = "test-rg"
12
+
13
+
14
+ @pytest.fixture
15
+ def client(credential, authentication_policy):
16
+ with ManagedIdentityClient(
17
+ credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
18
+ ) as client:
19
+ yield client
20
+
21
+
22
+ def test_managed_identity_tracked_resources_get(client):
23
+ result = client.managed_identity_tracked_resources.get(
24
+ resource_group_name=RESOURCE_GROUP_NAME, managed_identity_tracked_resource_name="identity"
25
+ )
26
+ assert result.location == "eastus"
27
+ assert result.identity.type == "SystemAssigned"
28
+ assert result.properties.provisioning_state == "Succeeded"
29
+
30
+
31
+ def test_managed_identity_tracked_resources_create_with_system_assigned(client):
32
+ result = client.managed_identity_tracked_resources.create_with_system_assigned(
33
+ resource_group_name=RESOURCE_GROUP_NAME,
34
+ managed_identity_tracked_resource_name="identity",
35
+ resource=models.ManagedIdentityTrackedResource(
36
+ location="eastus", identity=models.ManagedServiceIdentity(type="SystemAssigned")
37
+ ),
38
+ )
39
+ assert result.location == "eastus"
40
+ assert result.identity.type == "SystemAssigned"
41
+ assert result.properties.provisioning_state == "Succeeded"
42
+
43
+
44
+ def test_managed_identity_tracked_resources_update_with_user_assigned_and_system_assigned(client):
45
+ result = client.managed_identity_tracked_resources.update_with_user_assigned_and_system_assigned(
46
+ resource_group_name=RESOURCE_GROUP_NAME,
47
+ managed_identity_tracked_resource_name="identity",
48
+ properties=models.ManagedIdentityTrackedResource(
49
+ location="eastus",
50
+ identity=models.ManagedServiceIdentity(
51
+ type="SystemAssigned,UserAssigned",
52
+ user_assigned_identities={
53
+ "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id1": models.UserAssignedIdentity()
54
+ },
55
+ ),
56
+ ),
57
+ )
58
+ assert result.location == "eastus"
59
+ assert result.identity.type == "SystemAssigned,UserAssigned"
60
+ assert result.properties.provisioning_state == "Succeeded"