@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,338 @@
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 logging
7
+ from typing import Dict, Any, Union, Optional
8
+ from pathlib import Path
9
+ import yaml
10
+
11
+
12
+ from .. import Plugin
13
+ from ..utils import parse_args
14
+ from .models.code_model import CodeModel
15
+ from .serializers import JinjaSerializer
16
+ from ._utils import DEFAULT_HEADER_TEXT, VALID_PACKAGE_MODE, TYPESPEC_PACKAGE_MODE
17
+
18
+
19
+ def _default_pprint(package_name: str) -> str:
20
+ return " ".join([i.capitalize() for i in package_name.split("-")])
21
+
22
+
23
+ _LOGGER = logging.getLogger(__name__)
24
+
25
+
26
+ class OptionsRetriever:
27
+ OPTIONS_TO_DEFAULT = {
28
+ "azure-arm": False,
29
+ "flavor": "azure", # need to default to azure in shared code so we don't break swagger generation
30
+ "no-async": False,
31
+ "low-level-client": False,
32
+ "version-tolerant": True,
33
+ "keep-version-file": False,
34
+ "no-namespace-folders": False,
35
+ "basic-setup-py": False,
36
+ "client-side-validation": False,
37
+ "multiapi": False,
38
+ "polymorphic-examples": 5,
39
+ "generate-sample": False,
40
+ "generate-test": False,
41
+ "from-typespec": False,
42
+ "emit-cross-language-definition-file": False,
43
+ }
44
+
45
+ @property
46
+ def is_azure_flavor(self) -> bool:
47
+ return self.flavor == "azure"
48
+
49
+ def __init__(self, options: Dict[str, Any]) -> None:
50
+ self.options = options
51
+
52
+ def __getattr__(self, prop: str) -> Any:
53
+ key = prop.replace("_", "-")
54
+ return self.options.get(key, self.OPTIONS_TO_DEFAULT.get(key))
55
+
56
+ @property
57
+ def company_name(self) -> str:
58
+ return self.options.get("company-name", "Microsoft" if self.is_azure_flavor else "")
59
+
60
+ @property
61
+ def license_header(self) -> str:
62
+ license_header = self.options.get(
63
+ "header-text",
64
+ (DEFAULT_HEADER_TEXT.format(company_name=self.company_name) if self.company_name else ""),
65
+ )
66
+ if license_header:
67
+ license_header = license_header.replace("\n", "\n# ")
68
+ license_header = (
69
+ "# --------------------------------------------------------------------------\n# " + license_header
70
+ )
71
+ license_header += "\n# --------------------------------------------------------------------------"
72
+ return license_header
73
+
74
+ @property
75
+ def show_operations(self) -> bool:
76
+ return self.options.get("show-operations", not self.low_level_client)
77
+
78
+ @property
79
+ def _models_mode_default(self) -> str:
80
+ models_mode_default = "none" if self.low_level_client or self.version_tolerant else "msrest"
81
+ if self.options.get("cadl_file") is not None:
82
+ models_mode_default = "dpg"
83
+ return models_mode_default
84
+
85
+ @property
86
+ def original_models_mode(self) -> str:
87
+ return self.options.get("models-mode", self._models_mode_default)
88
+
89
+ @property
90
+ def models_mode(self) -> Union[str, bool]:
91
+ # switch to falsy value for easier code writing
92
+ return False if self.original_models_mode == "none" else self.original_models_mode
93
+
94
+ @property
95
+ def tracing(self) -> bool:
96
+ return self.options.get(
97
+ "tracing",
98
+ self.show_operations and self.is_azure_flavor,
99
+ )
100
+
101
+ @property
102
+ def show_send_request(self) -> bool:
103
+ return self.options.get(
104
+ "show-send-request",
105
+ self._low_level_or_version_tolerant,
106
+ )
107
+
108
+ @property
109
+ def _low_level_or_version_tolerant(self) -> bool:
110
+ return self.low_level_client or self.version_tolerant
111
+
112
+ @property
113
+ def only_path_and_body_params_positional(self) -> bool:
114
+ return self.options.get(
115
+ "only-path-and-body-params-positional",
116
+ self._low_level_or_version_tolerant,
117
+ )
118
+
119
+ @property
120
+ def combine_operation_files(self) -> bool:
121
+ return self.options.get(
122
+ "combine-operation-files",
123
+ self.version_tolerant,
124
+ )
125
+
126
+ @property
127
+ def package_pprint_name(self) -> str:
128
+ return self.options.get("package-pprint-name") or _default_pprint(str(self.package_name))
129
+
130
+ @property
131
+ def default_optional_constants_to_none(self) -> bool:
132
+ return self.options.get(
133
+ "default-optional-constants-to-none",
134
+ self._low_level_or_version_tolerant,
135
+ )
136
+
137
+ @property
138
+ def builders_visibility(self) -> str:
139
+ builders_visibility = self.options.get("builders-visibility")
140
+ if builders_visibility is None:
141
+ return "public" if self.low_level_client else "embedded"
142
+ return builders_visibility.lower()
143
+
144
+ @property
145
+ def head_as_boolean(self) -> bool:
146
+ head_as_boolean = self.options.get("head-as-boolean", True)
147
+ # Force some options in ARM MODE
148
+ return True if self.azure_arm else head_as_boolean
149
+
150
+ @property
151
+ def package_mode(self) -> str:
152
+ return self.options.get("packaging-files-dir") or self.options.get("package-mode", "")
153
+
154
+ @property
155
+ def packaging_files_config(self) -> Optional[Dict[str, Any]]:
156
+ packaging_files_config = self.options.get("packaging-files-config")
157
+ if packaging_files_config is None:
158
+ return None
159
+ # packaging-files-config is either a string or a dict
160
+ # if it's a string, we can split on the comma to get the dict
161
+ # otherwise we just return
162
+ try:
163
+ return {k.strip(): v.strip() for k, v in [i.split(":") for i in packaging_files_config.split("|")]}
164
+ except AttributeError:
165
+ return packaging_files_config
166
+
167
+ @property
168
+ def package_version(self) -> Optional[str]:
169
+ return str(self.options.get("package-version", ""))
170
+
171
+
172
+ class CodeGenerator(Plugin):
173
+ def __init__(self, *args, **kwargs: Any) -> None:
174
+ super().__init__(*args, **kwargs)
175
+ self.options_retriever = OptionsRetriever(self.options)
176
+
177
+ def _validate_code_model_options(self) -> None:
178
+ if self.options_retriever.builders_visibility not in [
179
+ "public",
180
+ "hidden",
181
+ "embedded",
182
+ ]:
183
+ raise ValueError("The value of --builders-visibility must be either 'public', 'hidden', or 'embedded'")
184
+
185
+ if self.options_retriever.original_models_mode not in ["msrest", "dpg", "none"]:
186
+ raise ValueError(
187
+ "--models-mode can only be 'msrest', 'dpg' or 'none'. "
188
+ "Pass in 'msrest' if you want msrest models, or "
189
+ "'none' if you don't want any."
190
+ )
191
+
192
+ if not self.options_retriever.show_operations and self.options_retriever.builders_visibility == "embedded":
193
+ raise ValueError(
194
+ "Can not embed builders without operations. "
195
+ "Either set --show-operations to True, or change the value of --builders-visibility "
196
+ "to 'public' or 'hidden'."
197
+ )
198
+
199
+ if self.options_retriever.basic_setup_py and not self.options_retriever.package_version:
200
+ raise ValueError("--basic-setup-py must be used with --package-version")
201
+
202
+ if self.options_retriever.package_mode and not self.options_retriever.package_version:
203
+ raise ValueError("--package-mode must be used with --package-version")
204
+
205
+ if not self.options_retriever.show_operations and self.options_retriever.combine_operation_files:
206
+ raise ValueError(
207
+ "Can not combine operation files if you are not showing operations. "
208
+ "If you want operation files, pass in flag --show-operations"
209
+ )
210
+
211
+ if self.options_retriever.package_mode:
212
+ if (
213
+ (
214
+ self.options_retriever.package_mode not in TYPESPEC_PACKAGE_MODE
215
+ and self.options_retriever.from_typespec
216
+ )
217
+ or (
218
+ self.options_retriever.package_mode not in VALID_PACKAGE_MODE
219
+ and not self.options_retriever.from_typespec
220
+ )
221
+ ) and not Path(self.options_retriever.package_mode).exists():
222
+ raise ValueError(
223
+ f"--package-mode can only be {' or '.join(TYPESPEC_PACKAGE_MODE)} or directory which contains template files" # pylint: disable=line-too-long
224
+ )
225
+
226
+ if self.options_retriever.multiapi and self.options_retriever.version_tolerant:
227
+ raise ValueError(
228
+ "Can not currently generate version tolerant multiapi SDKs. "
229
+ "We are working on creating a new multiapi SDK for version tolerant and it is not available yet."
230
+ )
231
+
232
+ if self.options_retriever.client_side_validation and self.options_retriever.version_tolerant:
233
+ raise ValueError("Can not generate version tolerant with --client-side-validation. ")
234
+
235
+ if not (self.options_retriever.azure_arm or self.options_retriever.version_tolerant):
236
+ _LOGGER.warning(
237
+ "You are generating with options that would not allow the SDK to be shipped as an official Azure SDK. "
238
+ "Please read https://aka.ms/azsdk/dpcodegen for more details."
239
+ )
240
+
241
+ if not self.options_retriever.is_azure_flavor and self.options_retriever.tracing:
242
+ raise ValueError("Can only have tracing turned on for Azure SDKs.")
243
+
244
+ @staticmethod
245
+ def remove_cloud_errors(yaml_data: Dict[str, Any]) -> None:
246
+ for client in yaml_data["clients"]:
247
+ for group in client["operationGroups"]:
248
+ for operation in group["operations"]:
249
+ if not operation.get("exceptions"):
250
+ continue
251
+ i = 0
252
+ while i < len(operation["exceptions"]):
253
+ exception = operation["exceptions"][i]
254
+ if (
255
+ exception.get("schema")
256
+ and exception["schema"]["language"]["default"]["name"] == "CloudError"
257
+ ):
258
+ del operation["exceptions"][i]
259
+ i -= 1
260
+ i += 1
261
+ if yaml_data.get("schemas") and yaml_data["schemas"].get("objects"):
262
+ for i in range(len(yaml_data["schemas"]["objects"])):
263
+ obj_schema = yaml_data["schemas"]["objects"][i]
264
+ if obj_schema["language"]["default"]["name"] == "CloudError":
265
+ del yaml_data["schemas"]["objects"][i]
266
+ break
267
+
268
+ def _build_code_model_options(self) -> Dict[str, Any]:
269
+ flags = [
270
+ "azure_arm",
271
+ "head_as_boolean",
272
+ "license_header",
273
+ "keep_version_file",
274
+ "no_async",
275
+ "no_namespace_folders",
276
+ "basic_setup_py",
277
+ "package_name",
278
+ "package_version",
279
+ "client_side_validation",
280
+ "tracing",
281
+ "multiapi",
282
+ "polymorphic_examples",
283
+ "models_mode",
284
+ "builders_visibility",
285
+ "show_operations",
286
+ "show_send_request",
287
+ "only_path_and_body_params_positional",
288
+ "version_tolerant",
289
+ "low_level_client",
290
+ "combine_operation_files",
291
+ "package_mode",
292
+ "package_pprint_name",
293
+ "packaging_files_config",
294
+ "default_optional_constants_to_none",
295
+ "generate_sample",
296
+ "generate_test",
297
+ "default_api_version",
298
+ "from_typespec",
299
+ "flavor",
300
+ "company_name",
301
+ "emit_cross_language_definition_file",
302
+ ]
303
+ return {f: getattr(self.options_retriever, f) for f in flags}
304
+
305
+ def get_yaml(self) -> Dict[str, Any]:
306
+ # cadl file doesn't have to be relative to output folder
307
+ with open(self.options["cadl_file"], "r", encoding="utf-8-sig") as fd:
308
+ return yaml.safe_load(fd.read())
309
+
310
+ def get_serializer(self, code_model: CodeModel):
311
+ return JinjaSerializer(code_model, output_folder=self.output_folder)
312
+
313
+ def process(self) -> bool:
314
+ # List the input file, should be only one
315
+ self._validate_code_model_options()
316
+ options = self._build_code_model_options()
317
+ yaml_data = self.get_yaml()
318
+
319
+ if self.options_retriever.azure_arm:
320
+ self.remove_cloud_errors(yaml_data)
321
+
322
+ code_model = CodeModel(yaml_data=yaml_data, options=options)
323
+ if not self.options_retriever.is_azure_flavor and any(client.lro_operations for client in code_model.clients):
324
+ raise ValueError("Only support LROs for Azure SDKs")
325
+ serializer = self.get_serializer(code_model)
326
+ serializer.serialize()
327
+
328
+ return True
329
+
330
+
331
+ if __name__ == "__main__":
332
+ # CADL pipeline will call this
333
+ parsed_args, unknown_args = parse_args()
334
+ CodeGenerator(
335
+ output_folder=parsed_args.output_folder,
336
+ cadl_file=parsed_args.cadl_file,
337
+ **unknown_args,
338
+ ).process()
@@ -0,0 +1,17 @@
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
+
7
+ DEFAULT_HEADER_TEXT = (
8
+ "Copyright (c) {company_name} Corporation. All rights reserved.\n"
9
+ "Licensed under the MIT License. See License.txt in the project root for license information.\n"
10
+ "Code generated by {company_name} (R) Python Code Generator.\n"
11
+ "Changes may cause incorrect behavior and will be lost if the code is regenerated."
12
+ )
13
+
14
+ SWAGGER_PACKAGE_MODE = ["mgmtplane", "dataplane"] # for backward compatibility
15
+ TYPESPEC_PACKAGE_MODE = ["azure-mgmt", "azure-dataplane", "generic"]
16
+ VALID_PACKAGE_MODE = SWAGGER_PACKAGE_MODE + TYPESPEC_PACKAGE_MODE
17
+ NAME_LENGTH_LIMIT = 40
@@ -0,0 +1,204 @@
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 logging
7
+ from typing import Any, Dict, Union, Optional
8
+ from .base import BaseModel
9
+ from .base_builder import BaseBuilder, ParameterListType
10
+ from .code_model import CodeModel
11
+ from .client import Client
12
+ from .model_type import ModelType, JSONModelType, DPGModelType, MsrestModelType
13
+ from .dictionary_type import DictionaryType
14
+ from .list_type import ListType
15
+ from .combined_type import CombinedType
16
+ from .primitive_types import (
17
+ ByteArraySchema,
18
+ DateType,
19
+ DatetimeType,
20
+ DurationType,
21
+ IntegerType,
22
+ FloatType,
23
+ StringType,
24
+ TimeType,
25
+ AnyType,
26
+ PrimitiveType,
27
+ BinaryType,
28
+ BooleanType,
29
+ AnyObjectType,
30
+ UnixTimeType,
31
+ SdkCoreType,
32
+ DecimalType,
33
+ MultiPartFileType,
34
+ )
35
+ from .enum_type import EnumType, EnumValue
36
+ from .base import BaseType
37
+ from .constant_type import ConstantType
38
+ from .imports import FileImport, ImportType, TypingSection
39
+ from .lro_operation import LROOperation
40
+ from .paging_operation import PagingOperation
41
+ from .parameter import (
42
+ Parameter,
43
+ ParameterMethodLocation,
44
+ ParameterLocation,
45
+ BodyParameter,
46
+ ParameterDelimeter,
47
+ ClientParameter,
48
+ ConfigParameter,
49
+ )
50
+ from .operation import Operation
51
+ from .property import Property
52
+ from .operation_group import OperationGroup
53
+ from .response import Response
54
+ from .parameter_list import (
55
+ ParameterList,
56
+ ClientGlobalParameterList,
57
+ ConfigGlobalParameterList,
58
+ )
59
+ from .request_builder import (
60
+ RequestBuilder,
61
+ OverloadedRequestBuilder,
62
+ RequestBuilderBase,
63
+ )
64
+ from .lro_paging_operation import LROPagingOperation
65
+ from .request_builder_parameter import (
66
+ RequestBuilderParameter,
67
+ RequestBuilderBodyParameter,
68
+ )
69
+ from .credential_types import (
70
+ TokenCredentialType,
71
+ KeyCredentialType,
72
+ ARMChallengeAuthenticationPolicyType,
73
+ BearerTokenCredentialPolicyType,
74
+ KeyCredentialPolicyType,
75
+ CredentialType,
76
+ )
77
+
78
+ __all__ = [
79
+ "KeyCredentialPolicyType",
80
+ "AnyType",
81
+ "BaseModel",
82
+ "BaseType",
83
+ "CodeModel",
84
+ "Client",
85
+ "ConstantType",
86
+ "ModelType",
87
+ "DictionaryType",
88
+ "ListType",
89
+ "EnumType",
90
+ "EnumValue",
91
+ "FileImport",
92
+ "ImportType",
93
+ "TypingSection",
94
+ "PrimitiveType",
95
+ "LROOperation",
96
+ "Operation",
97
+ "PagingOperation",
98
+ "Parameter",
99
+ "ParameterList",
100
+ "OperationGroup",
101
+ "Property",
102
+ "RequestBuilder",
103
+ "Response",
104
+ "TokenCredentialType",
105
+ "LROPagingOperation",
106
+ "BaseBuilder",
107
+ "RequestBuilderParameter",
108
+ "BinaryType",
109
+ "ClientGlobalParameterList",
110
+ "ConfigGlobalParameterList",
111
+ "ParameterMethodLocation",
112
+ "ParameterLocation",
113
+ "OverloadedRequestBuilder",
114
+ "RequestBuilderBase",
115
+ "BodyParameter",
116
+ "RequestBuilderBodyParameter",
117
+ "ParameterDelimeter",
118
+ "CredentialType",
119
+ "ClientParameter",
120
+ "ConfigParameter",
121
+ "ParameterListType",
122
+ ]
123
+
124
+ TYPE_TO_OBJECT = {
125
+ "integer": IntegerType,
126
+ "float": FloatType,
127
+ "decimal": DecimalType,
128
+ "string": StringType,
129
+ "list": ListType,
130
+ "dict": DictionaryType,
131
+ "constant": ConstantType,
132
+ "enum": EnumType,
133
+ "enumvalue": EnumValue,
134
+ "binary": BinaryType,
135
+ "any": AnyType,
136
+ "utcDateTime": DatetimeType,
137
+ "offsetDateTime": DatetimeType,
138
+ "plainTime": TimeType,
139
+ "duration": DurationType,
140
+ "plainDate": DateType,
141
+ "bytes": ByteArraySchema,
142
+ "boolean": BooleanType,
143
+ "combined": CombinedType,
144
+ "OAuth2": TokenCredentialType,
145
+ "Key": KeyCredentialType,
146
+ "ARMChallengeAuthenticationPolicy": ARMChallengeAuthenticationPolicyType,
147
+ "BearerTokenCredentialPolicy": BearerTokenCredentialPolicyType,
148
+ "KeyCredentialPolicy": KeyCredentialPolicyType,
149
+ "any-object": AnyObjectType,
150
+ "unixtime": UnixTimeType,
151
+ "credential": StringType,
152
+ "sdkcore": SdkCoreType,
153
+ "multipartfile": MultiPartFileType,
154
+ }
155
+ _LOGGER = logging.getLogger(__name__)
156
+
157
+
158
+ def build_type(yaml_data: Dict[str, Any], code_model: CodeModel) -> BaseType:
159
+ yaml_id = id(yaml_data)
160
+ try:
161
+ return code_model.lookup_type(yaml_id)
162
+ except KeyError:
163
+ # Not created yet, let's create it and add it to the index
164
+ pass
165
+ response: Optional[BaseType] = None
166
+ if yaml_data["type"] == "model":
167
+ # need to special case model to avoid recursion
168
+ if yaml_data["base"] == "json" or not code_model.options["models_mode"]:
169
+ model_type = JSONModelType
170
+ elif yaml_data["base"] == "dpg":
171
+ model_type = DPGModelType # type: ignore
172
+ else:
173
+ model_type = MsrestModelType # type: ignore
174
+ response = model_type(yaml_data, code_model)
175
+ code_model.types_map[yaml_id] = response
176
+ response.fill_instance_from_yaml(yaml_data, code_model)
177
+ elif yaml_data["type"] == "enum":
178
+ # avoid recursion because we add the parent enum type to the enum value
179
+ response = EnumType(
180
+ yaml_data,
181
+ code_model,
182
+ values=[],
183
+ value_type=build_type(yaml_data["valueType"], code_model),
184
+ )
185
+ code_model.types_map[yaml_id] = response
186
+ response.fill_instance_from_yaml(yaml_data, code_model)
187
+ else:
188
+ object_type = yaml_data.get("type")
189
+ if object_type not in TYPE_TO_OBJECT:
190
+ _LOGGER.warning(
191
+ 'Unrecognized definition type "%s" is found, falling back it as "string"! ',
192
+ yaml_data["type"],
193
+ )
194
+ object_type = "string"
195
+ response = TYPE_TO_OBJECT[object_type].from_yaml(yaml_data, code_model) # type: ignore
196
+ if response is None:
197
+ raise ValueError("response can not be None")
198
+ code_model.types_map[yaml_id] = response
199
+ return response
200
+
201
+
202
+ RequestBuilderType = Union[RequestBuilder, OverloadedRequestBuilder]
203
+ ParameterType = Union[Parameter, RequestBuilderParameter, ClientParameter, ConfigParameter]
204
+ OperationType = Union[Operation, LROOperation, PagingOperation, LROPagingOperation]