@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,33 @@
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 headasbooleantrue import VisibilityClient as HeadAsBooleanTrueClient
8
+ from headasbooleantrue import models as models_true
9
+
10
+ from headasbooleanfalse import VisibilityClient as HeadAsBooleanFalseClient
11
+ from headasbooleanfalse import models as models_false
12
+
13
+
14
+ @pytest.fixture
15
+ def client_true():
16
+ with HeadAsBooleanTrueClient() as client:
17
+ yield client
18
+
19
+
20
+ @pytest.fixture
21
+ def client_false():
22
+ with HeadAsBooleanFalseClient() as client:
23
+ yield client
24
+
25
+
26
+ def test_head_true(client_true):
27
+ body = models_true.VisibilityModel(query_prop=123)
28
+ assert client_true.head_model(body) == True
29
+
30
+
31
+ def test_head_false(client_false):
32
+ body = models_false.VisibilityModel(query_prop=123)
33
+ assert client_false.head_model(body) is None
@@ -0,0 +1,22 @@
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 parameters.basic import BasicClient
8
+ from parameters.basic.models import User
9
+
10
+
11
+ @pytest.fixture
12
+ def client():
13
+ with BasicClient() as client:
14
+ yield client
15
+
16
+
17
+ def test_explicit_simple(client: BasicClient):
18
+ client.explicit_body.simple(User(name="foo"))
19
+
20
+
21
+ def test_implicit_simple(client: BasicClient):
22
+ client.implicit_body.simple(name="foo")
@@ -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 parameters.bodyoptionality import BodyOptionalityClient
8
+ from parameters.bodyoptionality.models import BodyModel
9
+
10
+
11
+ @pytest.fixture
12
+ def client():
13
+ with BodyOptionalityClient() as client:
14
+ yield client
15
+
16
+
17
+ def test_required_explicit(client: BodyOptionalityClient):
18
+ client.required_explicit(BodyModel(name="foo"))
19
+
20
+
21
+ def test_required_implicit(client: BodyOptionalityClient):
22
+ client.required_implicit(name="foo")
23
+
24
+
25
+ def test_optional_explicit(client: BodyOptionalityClient):
26
+ client.optional_explicit.set(BodyModel(name="foo"))
27
+ client.optional_explicit.omit()
@@ -0,0 +1,37 @@
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 parameters.collectionformat import CollectionFormatClient
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with CollectionFormatClient() as client:
13
+ yield client
14
+
15
+
16
+ def test_query_multi(client: CollectionFormatClient):
17
+ client.query.multi(colors=["blue", "red", "green"])
18
+
19
+
20
+ def test_query_csv(client: CollectionFormatClient):
21
+ client.query.csv(colors=["blue", "red", "green"])
22
+
23
+
24
+ def test_query_pipes(client: CollectionFormatClient):
25
+ client.query.pipes(colors=["blue", "red", "green"])
26
+
27
+
28
+ def test_query_ssv(client: CollectionFormatClient):
29
+ client.query.ssv(colors=["blue", "red", "green"])
30
+
31
+
32
+ def test_query_tsv(client: CollectionFormatClient):
33
+ client.query.tsv(colors=["blue", "red", "green"])
34
+
35
+
36
+ def test_csv_header(client: CollectionFormatClient):
37
+ client.header.csv(colors=["blue", "red", "green"])
@@ -0,0 +1,66 @@
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 parameters.spread import SpreadClient
8
+ from parameters.spread.models import BodyParameter
9
+
10
+
11
+ @pytest.fixture
12
+ def client():
13
+ with SpreadClient() as client:
14
+ yield client
15
+
16
+
17
+ def test_model_body(client: SpreadClient):
18
+ client.model.spread_as_request_body(name="foo")
19
+
20
+
21
+ def test_model_composite_request_only_with_body(client: SpreadClient):
22
+ client.model.spread_composite_request_only_with_body(BodyParameter(name="foo"))
23
+
24
+
25
+ def test_model_composite_request_without_body(client: SpreadClient):
26
+ client.model.spread_composite_request_without_body(name="foo", test_header="bar")
27
+
28
+
29
+ def test_model_composite_request(client: SpreadClient):
30
+ client.model.spread_composite_request(name="foo", body=BodyParameter(name="foo"), test_header="bar")
31
+
32
+
33
+ def test_model_composite_request_mix(client: SpreadClient):
34
+ client.model.spread_composite_request_mix(name="foo", prop="foo", test_header="bar")
35
+
36
+
37
+ def test_alias_body(client: SpreadClient):
38
+ client.alias.spread_as_request_body(name="foo")
39
+
40
+
41
+ def test_alias_parameter(client: SpreadClient):
42
+ client.alias.spread_as_request_parameter("1", x_ms_test_header="bar", name="foo")
43
+
44
+
45
+ def test_alias_multiple_parameter(client: SpreadClient):
46
+ client.alias.spread_with_multiple_parameters(
47
+ "1",
48
+ x_ms_test_header="bar",
49
+ required_string="foo",
50
+ required_int_list=[1, 2],
51
+ optional_string_list=["foo", "bar"],
52
+ optional_int=1,
53
+ )
54
+ client.alias.spread_with_multiple_parameters(
55
+ "1",
56
+ {"requiredString": "foo", "optionalInt": 1, "requiredIntList": [1, 2], "optionalStringList": ["foo", "bar"]},
57
+ x_ms_test_header="bar",
58
+ )
59
+
60
+
61
+ def test_inner_model(client: SpreadClient):
62
+ client.alias.spread_parameter_with_inner_model(id="1", x_ms_test_header="bar", body={"name": "foo"})
63
+
64
+
65
+ def test_inner_alias(client: SpreadClient):
66
+ client.alias.spread_parameter_with_inner_alias(id="1", x_ms_test_header="bar", body={"name": "foo", "age": 1})
@@ -0,0 +1,33 @@
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 base64
7
+ import pytest
8
+ from payload.contentnegotiation import ContentNegotiationClient
9
+ from payload.contentnegotiation.models import PngImageAsJson
10
+
11
+
12
+ @pytest.fixture
13
+ def client():
14
+ with ContentNegotiationClient(endpoint="http://localhost:3000") as client:
15
+ yield client
16
+
17
+
18
+ def test_get_avatar_as_png(client: ContentNegotiationClient, png_data: bytes):
19
+ assert b"".join(client.same_body.get_avatar_as_png()) == png_data
20
+
21
+
22
+ def test_get_avatar_as_jpeg(client: ContentNegotiationClient, jpg_data: bytes):
23
+ assert b"".join(client.same_body.get_avatar_as_jpeg()) == jpg_data
24
+
25
+
26
+ def test_different_body_get_avatar_as_png(client: ContentNegotiationClient, png_data: bytes):
27
+ assert b"".join(client.different_body.get_avatar_as_png()) == png_data
28
+
29
+
30
+ def test_different_body_get_avatar_as_json(client: ContentNegotiationClient, png_data: bytes):
31
+ result = client.different_body.get_avatar_as_json()
32
+ expected = PngImageAsJson(content=base64.b64encode(png_data).decode())
33
+ assert result == expected
@@ -0,0 +1,93 @@
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 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
+ def client():
18
+ with JsonMergePatchClient(endpoint="http://localhost:3000") as client:
19
+ yield client
20
+
21
+
22
+ def test_create_resource(client: JsonMergePatchClient):
23
+ inner_madge = InnerModel(name="InnerMadge", description="innerDesc")
24
+ create_resource = Resource(
25
+ name="Madge",
26
+ description="desc",
27
+ map={"key": inner_madge},
28
+ array=[inner_madge],
29
+ int_value=1,
30
+ float_value=1.1,
31
+ inner_model=inner_madge,
32
+ int_array=[1, 2, 3],
33
+ )
34
+ response = client.create_resource(create_resource)
35
+ assert response == create_resource
36
+
37
+
38
+ def test_update_resource_model_input(client: JsonMergePatchClient):
39
+ update_resource = ResourcePatch(
40
+ description=NULL,
41
+ map={"key": InnerModel(description=NULL), "key2": NULL},
42
+ array=NULL,
43
+ int_value=NULL,
44
+ float_value=NULL,
45
+ inner_model=NULL,
46
+ int_array=NULL,
47
+ )
48
+ response = client.update_resource(update_resource)
49
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
50
+
51
+
52
+ def test_update_resource_raw_input(client: JsonMergePatchClient):
53
+ response = client.update_resource(
54
+ {
55
+ "description": None,
56
+ "map": {"key": {"description": None}, "key2": None},
57
+ "array": None,
58
+ "intValue": None,
59
+ "floatValue": None,
60
+ "innerModel": None,
61
+ "intArray": None,
62
+ }
63
+ )
64
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
65
+
66
+
67
+ def test_update_optional_resource_model_input(client: JsonMergePatchClient):
68
+ update_resource = ResourcePatch(
69
+ description=NULL,
70
+ map={"key": InnerModel(description=NULL), "key2": NULL},
71
+ array=NULL,
72
+ int_value=NULL,
73
+ float_value=NULL,
74
+ inner_model=NULL,
75
+ int_array=NULL,
76
+ )
77
+ response = client.update_optional_resource(update_resource)
78
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
79
+
80
+
81
+ def test_update_optional_resource_raw_input(client: JsonMergePatchClient):
82
+ response = client.update_optional_resource(
83
+ {
84
+ "description": None,
85
+ "map": {"key": {"description": None}, "key2": None},
86
+ "array": None,
87
+ "intValue": None,
88
+ "floatValue": None,
89
+ "innerModel": None,
90
+ "intArray": None,
91
+ }
92
+ )
93
+ assert response == Resource(name="Madge", map={"key": InnerModel(name="InnerMadge")})
@@ -0,0 +1,25 @@
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 import MediaTypeClient
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with MediaTypeClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ def test_json(client: MediaTypeClient):
17
+ data = "foo"
18
+ client.string_body.send_as_json(data)
19
+ assert client.string_body.get_as_json() == data
20
+
21
+
22
+ def test_text(client: MediaTypeClient):
23
+ data = "{cat}"
24
+ client.string_body.send_as_text(data)
25
+ assert client.string_body.get_as_text() == data
@@ -0,0 +1,140 @@
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 MultiPartClient, models
9
+
10
+ JPG = Path(__file__).parent / "data/image.jpg"
11
+ PNG = Path(__file__).parent / "data/image.png"
12
+
13
+
14
+ @pytest.fixture
15
+ def client():
16
+ with MultiPartClient(endpoint="http://localhost:3000") as client:
17
+ yield client
18
+
19
+
20
+ def test_anonymous_model(client: MultiPartClient):
21
+ client.form_data.anonymous_model({"profileImage": open(str(JPG), "rb")})
22
+
23
+
24
+ def test_basic(client: MultiPartClient):
25
+ client.form_data.basic(
26
+ models.MultiPartRequest(
27
+ id="123",
28
+ profile_image=open(str(JPG), "rb"),
29
+ )
30
+ )
31
+
32
+
33
+ def test_binary_array_parts(client: MultiPartClient):
34
+ client.form_data.binary_array_parts(
35
+ models.BinaryArrayPartsRequest(
36
+ id="123",
37
+ pictures=[
38
+ open(str(PNG), "rb"),
39
+ open(str(PNG), "rb"),
40
+ ],
41
+ )
42
+ )
43
+
44
+
45
+ def test_check_file_name_and_content_type(client: MultiPartClient):
46
+ client.form_data.check_file_name_and_content_type(
47
+ models.MultiPartRequest(
48
+ id="123",
49
+ profile_image=("hello.jpg", open(str(JPG), "rb"), "image/jpg"),
50
+ )
51
+ )
52
+
53
+
54
+ def test_complex(client: MultiPartClient):
55
+ client.form_data.file_array_and_basic(
56
+ models.ComplexPartsRequest(
57
+ id="123",
58
+ address=models.Address(city="X"),
59
+ pictures=[
60
+ open(str(PNG), "rb"),
61
+ open(str(PNG), "rb"),
62
+ ],
63
+ profile_image=open(str(JPG), "rb"),
64
+ )
65
+ )
66
+
67
+
68
+ def test_json_part(client: MultiPartClient):
69
+ client.form_data.json_part(
70
+ models.JsonPartRequest(
71
+ address=models.Address(city="X"),
72
+ profile_image=open(str(JPG), "rb"),
73
+ )
74
+ )
75
+
76
+
77
+ def test_multi_binary_parts(client: MultiPartClient):
78
+ client.form_data.multi_binary_parts(
79
+ models.MultiBinaryPartsRequest(
80
+ profile_image=open(str(JPG), "rb"),
81
+ picture=open(str(PNG), "rb"),
82
+ )
83
+ )
84
+ client.form_data.multi_binary_parts(
85
+ models.MultiBinaryPartsRequest(
86
+ profile_image=open(str(JPG), "rb"),
87
+ )
88
+ )
89
+
90
+
91
+ def test_file_with_http_part_specific_content_type(client: MultiPartClient):
92
+ client.form_data.http_parts.content_type.image_jpeg_content_type(
93
+ models.FileWithHttpPartSpecificContentTypeRequest(
94
+ profile_image=("hello.jpg", open(str(JPG), "rb"), "image/jpg"),
95
+ )
96
+ )
97
+
98
+
99
+ def test_file_with_http_part_required_content_type(client: MultiPartClient):
100
+ client.form_data.http_parts.content_type.required_content_type(
101
+ models.FileWithHttpPartRequiredContentTypeRequest(
102
+ profile_image=open(str(JPG), "rb"),
103
+ )
104
+ )
105
+
106
+
107
+ def test_file_with_http_part_optional_content_type(client: MultiPartClient):
108
+ # call twice: one with content type, one without
109
+ client.form_data.http_parts.content_type.optional_content_type(
110
+ models.FileWithHttpPartOptionalContentTypeRequest(
111
+ profile_image=("hello.jpg", open(str(JPG), "rb").read()),
112
+ )
113
+ )
114
+ client.form_data.http_parts.content_type.optional_content_type(
115
+ models.FileWithHttpPartOptionalContentTypeRequest(
116
+ profile_image=("hello.jpg", open(str(JPG), "rb").read(), "application/octet-stream"),
117
+ )
118
+ )
119
+
120
+
121
+ def test_complex_with_http_part(client: MultiPartClient):
122
+ client.form_data.http_parts.json_array_and_file_array(
123
+ models.ComplexHttpPartsModelRequest(
124
+ id="123",
125
+ previous_addresses=[
126
+ models.Address(city="Y"),
127
+ models.Address(city="Z"),
128
+ ],
129
+ address=models.Address(city="X"),
130
+ pictures=[
131
+ open(str(PNG), "rb"),
132
+ open(str(PNG), "rb"),
133
+ ],
134
+ profile_image=open(str(JPG), "rb"),
135
+ )
136
+ )
137
+
138
+
139
+ def test_http_parts_non_string_float(client: MultiPartClient):
140
+ client.form_data.http_parts.non_string.float(models.FloatRequest(temperature=0.5))
@@ -0,0 +1,18 @@
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 import PageableClient
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with PageableClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ def test_list(client: PageableClient):
17
+ result = list(client.list(maxpagesize=3))
18
+ assert len(result) == 4
@@ -0,0 +1,93 @@
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 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
+ def client():
24
+ with XmlClient(endpoint="http://localhost:3000") as client:
25
+ yield client
26
+
27
+
28
+ def test_simple_model(client: XmlClient):
29
+ model = SimpleModel(name="foo", age=123)
30
+ assert client.simple_model_value.get() == model
31
+ client.simple_model_value.put(model)
32
+
33
+
34
+ def test_model_with_simple_arrays(client: XmlClient):
35
+ model = ModelWithSimpleArrays(colors=["red", "green", "blue"], counts=[1, 2])
36
+ assert client.model_with_simple_arrays_value.get() == model
37
+ client.model_with_simple_arrays_value.put(model)
38
+
39
+
40
+ def test_model_with_array_of_model(client: XmlClient):
41
+ model = ModelWithArrayOfModel(
42
+ items_property=[
43
+ SimpleModel(name="foo", age=123),
44
+ SimpleModel(name="bar", age=456),
45
+ ]
46
+ )
47
+ assert client.model_with_array_of_model_value.get() == model
48
+ client.model_with_array_of_model_value.put(model)
49
+
50
+
51
+ def test_model_with_attributes(client: XmlClient):
52
+ model = ModelWithAttributes(id1=123, id2="foo", enabled=True)
53
+ assert client.model_with_attributes_value.get() == model
54
+ client.model_with_attributes_value.put(model)
55
+
56
+
57
+ def test_model_with_unwrapped_array(client: XmlClient):
58
+ model = ModelWithUnwrappedArray(colors=["red", "green", "blue"], counts=[1, 2])
59
+ assert client.model_with_unwrapped_array_value.get() == model
60
+ client.model_with_unwrapped_array_value.put(model)
61
+
62
+
63
+ def test_model_with_renamed_fields(client: XmlClient):
64
+ model = ModelWithRenamedFields(
65
+ input_data=SimpleModel(name="foo", age=123),
66
+ output_data=SimpleModel(name="bar", age=456),
67
+ )
68
+ assert client.model_with_renamed_fields_value.get() == model
69
+ client.model_with_renamed_fields_value.put(model)
70
+
71
+
72
+ def test_model_with_empty_array(client: XmlClient):
73
+ model = ModelWithEmptyArray(items_property=[])
74
+ assert client.model_with_empty_array_value.get() == model
75
+ client.model_with_empty_array_value.put(model)
76
+
77
+
78
+ def test_model_with_text(client: XmlClient):
79
+ model = ModelWithText(language="foo", content="\n This is some text.\n")
80
+ assert client.model_with_text_value.get() == model
81
+ client.model_with_text_value.put(model)
82
+
83
+
84
+ def test_model_with_dictionary(client: XmlClient):
85
+ model = ModelWithDictionary(metadata={"Color": "blue", "Count": "123", "Enabled": "false"})
86
+ assert client.model_with_dictionary_value.get() == model
87
+ client.model_with_dictionary_value.put(model)
88
+
89
+
90
+ def test_model_with_encoded_names(client: XmlClient):
91
+ model = ModelWithEncodedNames(model_data=SimpleModel(name="foo", age=123), colors=["red", "green", "blue"])
92
+ assert client.model_with_encoded_names_value.get() == model
93
+ client.model_with_encoded_names_value.put(model)