@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,113 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import os
7
+ import subprocess
8
+ import signal
9
+ import pytest
10
+ import importlib
11
+ from pathlib import Path
12
+ from typing import List
13
+
14
+ FILE_FOLDER = Path(__file__).parent
15
+
16
+
17
+ def start_server_process():
18
+ path = Path(os.path.dirname(__file__)) / Path("../../../node_modules/@azure-tools/cadl-ranch-specs")
19
+ os.chdir(path.resolve())
20
+ cmd = "cadl-ranch serve ./http"
21
+ if os.name == "nt":
22
+ return subprocess.Popen(cmd, shell=True)
23
+ return subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)
24
+
25
+
26
+ def terminate_server_process(process):
27
+ if os.name == "nt":
28
+ process.kill()
29
+ else:
30
+ os.killpg(os.getpgid(process.pid), signal.SIGTERM) # Send the signal to all the process groups
31
+
32
+
33
+ @pytest.fixture(scope="session", autouse=True)
34
+ def testserver():
35
+ """Start cadl ranch mock api tests"""
36
+ server = start_server_process()
37
+ yield
38
+ terminate_server_process(server)
39
+
40
+
41
+ """
42
+ Use to disambiguate the core library we use
43
+ """
44
+
45
+
46
+ @pytest.fixture
47
+ def core_library():
48
+ try:
49
+ return importlib.import_module("azure.core")
50
+ except ModuleNotFoundError:
51
+ return importlib.import_module("corehttp")
52
+
53
+
54
+ @pytest.fixture
55
+ def key_credential(core_library):
56
+ try:
57
+ return core_library.credentials.AzureKeyCredential
58
+ except AttributeError:
59
+ return core_library.credentials.ServiceKeyCredential
60
+
61
+
62
+ SPECIAL_WORDS = [
63
+ "and",
64
+ "as",
65
+ "assert",
66
+ "async",
67
+ "await",
68
+ "break",
69
+ "class",
70
+ "constructor",
71
+ "continue",
72
+ "def",
73
+ "del",
74
+ "elif",
75
+ "else",
76
+ "except",
77
+ "exec",
78
+ "finally",
79
+ "for",
80
+ "from",
81
+ "global",
82
+ "if",
83
+ "import",
84
+ "in",
85
+ "is",
86
+ "lambda",
87
+ "not",
88
+ "or",
89
+ "pass",
90
+ "raise",
91
+ "return",
92
+ "try",
93
+ "while",
94
+ "with",
95
+ "yield",
96
+ ]
97
+
98
+
99
+ @pytest.fixture
100
+ def special_words() -> List[str]:
101
+ return SPECIAL_WORDS
102
+
103
+
104
+ @pytest.fixture
105
+ def png_data() -> bytes:
106
+ with open(str(FILE_FOLDER / "data/image.png"), "rb") as file_in:
107
+ return file_in.read()
108
+
109
+
110
+ @pytest.fixture
111
+ def jpg_data() -> bytes:
112
+ with open(str(FILE_FOLDER / "data/image.jpg"), "rb") as file_in:
113
+ return file_in.read()
@@ -0,0 +1,113 @@
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 authentication.apikey import ApiKeyClient
8
+ from authentication.oauth2 import OAuth2Client
9
+ from authentication.union import UnionClient
10
+ from authentication.http.custom import CustomClient
11
+
12
+
13
+ # Utilities functions
14
+
15
+
16
+ @pytest.fixture
17
+ def api_key_client(key_credential):
18
+ client = None
19
+
20
+ def _build_client(client_type):
21
+ client = client_type(key_credential("valid-key"))
22
+ return client
23
+
24
+ yield _build_client
25
+ if client:
26
+ client.close()
27
+
28
+
29
+ @pytest.fixture
30
+ def token_credential(core_library):
31
+ class FakeCredential:
32
+ @staticmethod
33
+ def get_token(*scopes):
34
+ return core_library.credentials.AccessToken(token="".join(scopes), expires_on=1800)
35
+
36
+ return FakeCredential()
37
+
38
+
39
+ @pytest.fixture
40
+ def oauth2_client(token_credential):
41
+ client = None
42
+
43
+ def _build_client(client_type):
44
+ client = client_type(token_credential)
45
+ return client
46
+
47
+ yield _build_client
48
+ if client:
49
+ client.close()
50
+
51
+
52
+ @pytest.fixture
53
+ def http_custom_client(key_credential):
54
+ client = None
55
+
56
+ def _build_client():
57
+ client = CustomClient(key_credential("valid-key"))
58
+ return client
59
+
60
+ yield _build_client
61
+ if client:
62
+ client.close()
63
+
64
+
65
+ # Tests
66
+
67
+
68
+ def test_api_key_valid(api_key_client):
69
+ client = api_key_client(ApiKeyClient)
70
+ client.valid()
71
+
72
+
73
+ def test_api_key_invalid(api_key_client, core_library):
74
+ client = api_key_client(ApiKeyClient)
75
+ with pytest.raises(core_library.exceptions.HttpResponseError) as ex:
76
+ client.invalid()
77
+ assert ex.value.status_code == 403
78
+ assert ex.value.reason == "Forbidden"
79
+
80
+
81
+ def test_oauth2_valid(oauth2_client):
82
+ client = oauth2_client(OAuth2Client)
83
+ client.valid(enforce_https=False)
84
+
85
+
86
+ def test_oauth2_invalid(oauth2_client, core_library):
87
+ client = oauth2_client(OAuth2Client)
88
+ with pytest.raises(core_library.exceptions.HttpResponseError) as ex:
89
+ client.invalid(enforce_https=False)
90
+ assert ex.value.status_code == 403
91
+
92
+
93
+ def test_union_keyvalid(api_key_client):
94
+ client = api_key_client(UnionClient)
95
+ client.valid_key()
96
+
97
+
98
+ def test_union_tokenvalid(oauth2_client):
99
+ client = oauth2_client(UnionClient)
100
+ client.valid_token(enforce_https=False)
101
+
102
+
103
+ def test_http_custom_valid(http_custom_client):
104
+ client = http_custom_client()
105
+ client.valid()
106
+
107
+
108
+ def test_http_custom_invalid(http_custom_client, core_library):
109
+ client = http_custom_client()
110
+ with pytest.raises(core_library.exceptions.HttpResponseError) as ex:
111
+ client.invalid()
112
+ assert ex.value.status_code == 403
113
+ assert ex.value.reason == "Forbidden"
@@ -0,0 +1,57 @@
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 client.naming import NamingClient, models
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with NamingClient() as client:
13
+ yield client
14
+
15
+
16
+ def test_client(client: NamingClient):
17
+ client.client(models.ClientNameModel(client_name=True))
18
+
19
+
20
+ def test_language(client: NamingClient):
21
+ client.language(models.LanguageClientNameModel(python_name=True))
22
+
23
+
24
+ def test_compatible_with_encoded_name(client: NamingClient):
25
+ client.compatible_with_encoded_name(models.ClientNameAndJsonEncodedNameModel(client_name=True))
26
+
27
+
28
+ def test_operation(client: NamingClient):
29
+ client.client_name()
30
+
31
+
32
+ def test_parameter(client: NamingClient):
33
+ client.parameter(client_name="true")
34
+
35
+
36
+ def test_header_request(client: NamingClient):
37
+ client.request(client_name="true")
38
+
39
+
40
+ def test_header_response(client: NamingClient):
41
+ assert client.response(cls=lambda x, y, z: z)["default-name"] == "true"
42
+
43
+
44
+ def test_model_client(client: NamingClient):
45
+ client.client_model.client(models.ClientModel(default_name=True))
46
+
47
+
48
+ def test_model_language(client: NamingClient):
49
+ client.client_model.language(models.PythonModel(default_name=True))
50
+
51
+
52
+ def test_union_enum_member_name(client: NamingClient):
53
+ client.union_enum.union_enum_member_name(models.ExtensibleEnum.CLIENT_ENUM_VALUE1)
54
+
55
+
56
+ def test_union_enum_name(client: NamingClient):
57
+ client.union_enum.union_enum_name(models.ClientExtensibleEnum.ENUM_VALUE1)
@@ -0,0 +1,57 @@
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 client.structure.service.models import ClientType
7
+ from client.structure.service import ServiceClient
8
+ from client.structure.multiclient import ClientAClient, ClientBClient
9
+ from client.structure.renamedoperation import RenamedOperationClient
10
+ from client.structure.twooperationgroup import TwoOperationGroupClient
11
+
12
+
13
+ def test_structure_default():
14
+ client = ServiceClient(endpoint="http://localhost:3000", client=ClientType.DEFAULT)
15
+ client.one()
16
+ client.two()
17
+ client.foo.three()
18
+ client.foo.four()
19
+ client.bar.five()
20
+ client.bar.six()
21
+ client.baz.foo.seven()
22
+ client.qux.eight()
23
+ client.qux.bar.nine()
24
+
25
+
26
+ def test_structure_multiclient():
27
+ client_a = ClientAClient(endpoint="http://localhost:3000", client=ClientType.MULTI_CLIENT)
28
+ client_a.renamed_one()
29
+ client_a.renamed_three()
30
+ client_a.renamed_five()
31
+
32
+ client_b = ClientBClient(endpoint="http://localhost:3000", client=ClientType.MULTI_CLIENT)
33
+ client_b.renamed_two()
34
+ client_b.renamed_four()
35
+ client_b.renamed_six()
36
+
37
+
38
+ def test_structure_renamed_operation():
39
+ client = RenamedOperationClient(endpoint="http://localhost:3000", client=ClientType.RENAMED_OPERATION)
40
+ client.renamed_one()
41
+ client.renamed_three()
42
+ client.renamed_five()
43
+
44
+ client.group.renamed_two()
45
+ client.group.renamed_four()
46
+ client.group.renamed_six()
47
+
48
+
49
+ def test_structure_two_operation_group():
50
+ client = TwoOperationGroupClient(endpoint="http://localhost:3000", client=ClientType.TWO_OPERATION_GROUP)
51
+ client.group1.one()
52
+ client.group1.three()
53
+ client.group1.four()
54
+
55
+ client.group2.two()
56
+ client.group2.five()
57
+ client.group2.six()
@@ -0,0 +1,128 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+ from encode.bytes import BytesClient
10
+ from encode.bytes.models import (
11
+ DefaultBytesProperty,
12
+ Base64urlBytesProperty,
13
+ Base64BytesProperty,
14
+ Base64urlArrayBytesProperty,
15
+ )
16
+
17
+ FILE_FOLDER = Path(__file__).parent
18
+
19
+
20
+ @pytest.fixture
21
+ def client():
22
+ with BytesClient() as client:
23
+ yield client
24
+
25
+
26
+ def test_query(client: BytesClient):
27
+ client.query.default(
28
+ value=bytes("test", "utf-8"),
29
+ )
30
+ client.query.base64(
31
+ value=bytes("test", "utf-8"),
32
+ )
33
+ client.query.base64_url(
34
+ value=bytes("test", "utf-8"),
35
+ )
36
+ client.query.base64_url_array(
37
+ value=[
38
+ bytes("test", "utf-8"),
39
+ bytes("test", "utf-8"),
40
+ ],
41
+ )
42
+
43
+
44
+ def test_property(client: BytesClient):
45
+ result = client.property.default(
46
+ DefaultBytesProperty(
47
+ value=bytes("test", "utf-8"),
48
+ )
49
+ )
50
+ assert result.value == bytes("test", "utf-8")
51
+
52
+ result = client.property.base64(
53
+ Base64BytesProperty(
54
+ value=bytes("test", "utf-8"),
55
+ )
56
+ )
57
+ assert result.value == bytes("test", "utf-8")
58
+
59
+ result = client.property.base64_url(
60
+ Base64urlBytesProperty(
61
+ value=bytes("test", "utf-8"),
62
+ )
63
+ )
64
+ assert result.value == bytes("test", "utf-8")
65
+
66
+ result = client.property.base64_url_array(
67
+ Base64urlArrayBytesProperty(
68
+ value=[
69
+ bytes("test", "utf-8"),
70
+ bytes("test", "utf-8"),
71
+ ],
72
+ )
73
+ )
74
+ assert result.value == [
75
+ bytes("test", "utf-8"),
76
+ bytes("test", "utf-8"),
77
+ ]
78
+
79
+
80
+ def test_header(client: BytesClient):
81
+ client.header.default(
82
+ value=bytes("test", "utf-8"),
83
+ )
84
+ client.header.base64(
85
+ value=bytes("test", "utf-8"),
86
+ )
87
+ client.header.base64_url(
88
+ value=bytes("test", "utf-8"),
89
+ )
90
+ client.header.base64_url_array(
91
+ value=[
92
+ bytes("test", "utf-8"),
93
+ bytes("test", "utf-8"),
94
+ ],
95
+ )
96
+
97
+
98
+ @pytest.fixture
99
+ def png_data() -> bytes:
100
+ with open(str(FILE_FOLDER / "data/image.png"), "rb") as file_in:
101
+ return file_in.read()
102
+
103
+
104
+ def test_request_body(client: BytesClient, png_data: bytes):
105
+ client.request_body.default(
106
+ value=bytes("test", "utf-8"),
107
+ )
108
+ client.request_body.octet_stream(
109
+ value=png_data,
110
+ )
111
+ client.request_body.custom_content_type(
112
+ value=png_data,
113
+ )
114
+ client.request_body.base64(
115
+ value=bytes("test", "utf-8"),
116
+ )
117
+ client.request_body.base64_url(
118
+ value=bytes("test", "utf-8"),
119
+ )
120
+
121
+
122
+ def test_response_body(client: BytesClient, png_data: bytes):
123
+ expected = b"test"
124
+ assert expected == client.response_body.default()
125
+ assert expected == client.response_body.base64()
126
+ assert expected == client.response_body.base64_url()
127
+ assert b"".join(client.response_body.octet_stream()) == png_data
128
+ assert b"".join(client.response_body.custom_content_type()) == png_data
@@ -0,0 +1,123 @@
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 datetime
7
+
8
+ import pytest
9
+ from encode.datetime import DatetimeClient
10
+ from encode.datetime.models import (
11
+ DefaultDatetimeProperty,
12
+ Rfc3339DatetimeProperty,
13
+ Rfc7231DatetimeProperty,
14
+ UnixTimestampDatetimeProperty,
15
+ UnixTimestampArrayDatetimeProperty,
16
+ )
17
+
18
+
19
+ @pytest.fixture
20
+ def client():
21
+ with DatetimeClient() as client:
22
+ yield client
23
+
24
+
25
+ def test_query(client: DatetimeClient):
26
+ client.query.default(
27
+ value=datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc),
28
+ )
29
+ client.query.rfc3339(
30
+ value=datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc),
31
+ )
32
+ client.query.rfc7231(
33
+ value=datetime.datetime(2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc),
34
+ )
35
+ client.query.unix_timestamp(
36
+ value=datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
37
+ )
38
+ client.query.unix_timestamp_array(
39
+ value=[
40
+ datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
41
+ datetime.datetime(2023, 6, 14, 9, 17, 36, tzinfo=datetime.timezone.utc),
42
+ ],
43
+ )
44
+
45
+
46
+ def test_property(client: DatetimeClient):
47
+ result = client.property.default(
48
+ DefaultDatetimeProperty(
49
+ value=datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc),
50
+ )
51
+ )
52
+ assert result.value == datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc)
53
+
54
+ result = client.property.rfc3339(
55
+ Rfc3339DatetimeProperty(
56
+ value=datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc),
57
+ )
58
+ )
59
+ assert result.value == datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc)
60
+
61
+ result = client.property.rfc7231(
62
+ Rfc7231DatetimeProperty(
63
+ value=datetime.datetime(2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc),
64
+ )
65
+ )
66
+ assert result.value == datetime.datetime(2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc)
67
+
68
+ result = client.property.unix_timestamp(
69
+ UnixTimestampDatetimeProperty(
70
+ value=datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
71
+ )
72
+ )
73
+ assert result.value == datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc)
74
+
75
+ result = client.property.unix_timestamp_array(
76
+ UnixTimestampArrayDatetimeProperty(
77
+ value=[
78
+ datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
79
+ datetime.datetime(2023, 6, 14, 9, 17, 36, tzinfo=datetime.timezone.utc),
80
+ ],
81
+ )
82
+ )
83
+ assert result.value == [
84
+ datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
85
+ datetime.datetime(2023, 6, 14, 9, 17, 36, tzinfo=datetime.timezone.utc),
86
+ ]
87
+
88
+
89
+ def test_header(client: DatetimeClient):
90
+ client.header.default(
91
+ value=datetime.datetime(2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc),
92
+ )
93
+ client.header.rfc3339(
94
+ value=datetime.datetime(2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc),
95
+ )
96
+ client.header.rfc7231(
97
+ value=datetime.datetime(2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc),
98
+ )
99
+ client.header.unix_timestamp(
100
+ value=datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
101
+ )
102
+ client.header.unix_timestamp_array(
103
+ value=[
104
+ datetime.datetime(2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc),
105
+ datetime.datetime(2023, 6, 14, 9, 17, 36, tzinfo=datetime.timezone.utc),
106
+ ]
107
+ )
108
+
109
+
110
+ def test_response_header(client: DatetimeClient):
111
+ cls = lambda x, y, z: z
112
+ assert client.response_header.default(cls=cls)["value"] == datetime.datetime(
113
+ 2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc
114
+ )
115
+ assert client.response_header.rfc3339(cls=cls)["value"] == datetime.datetime(
116
+ 2022, 8, 26, 18, 38, 0, tzinfo=datetime.timezone.utc
117
+ )
118
+ assert client.response_header.rfc7231(cls=cls)["value"] == datetime.datetime(
119
+ 2022, 8, 26, 14, 38, 0, tzinfo=datetime.timezone.utc
120
+ )
121
+ assert client.response_header.unix_timestamp(cls=cls)["value"] == datetime.datetime(
122
+ 2023, 6, 12, 10, 47, 44, tzinfo=datetime.timezone.utc
123
+ )
@@ -0,0 +1,60 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import datetime
7
+
8
+ import pytest
9
+ from encode.duration import DurationClient
10
+ from encode.duration.models import (
11
+ Int32SecondsDurationProperty,
12
+ ISO8601DurationProperty,
13
+ FloatSecondsDurationProperty,
14
+ DefaultDurationProperty,
15
+ FloatSecondsDurationArrayProperty,
16
+ )
17
+
18
+
19
+ @pytest.fixture
20
+ def client():
21
+ with DurationClient() as client:
22
+ yield client
23
+
24
+
25
+ def test_query(client: DurationClient):
26
+ client.query.default(input=datetime.timedelta(days=40))
27
+ client.query.iso8601(input=datetime.timedelta(days=40))
28
+ client.query.int32_seconds(input=36)
29
+ client.query.int32_seconds_array(input=[36, 47])
30
+ client.query.float_seconds(input=35.625)
31
+ client.query.float64_seconds(input=35.625)
32
+
33
+
34
+ def test_property(client: DurationClient):
35
+ result = client.property.default(DefaultDurationProperty(value=datetime.timedelta(days=40)))
36
+ assert result.value == datetime.timedelta(days=40)
37
+ result = client.property.default(DefaultDurationProperty(value="P40D"))
38
+ assert result.value == datetime.timedelta(days=40)
39
+ result = client.property.iso8601(ISO8601DurationProperty(value=datetime.timedelta(days=40)))
40
+ assert result.value == datetime.timedelta(days=40)
41
+ result = client.property.iso8601(ISO8601DurationProperty(value="P40D"))
42
+ assert result.value == datetime.timedelta(days=40)
43
+ result = client.property.int32_seconds(Int32SecondsDurationProperty(value=36))
44
+ assert result.value == 36
45
+ result = client.property.float_seconds(FloatSecondsDurationProperty(value=35.625))
46
+ assert abs(result.value - 35.625) < 0.0001
47
+ result = client.property.float64_seconds(FloatSecondsDurationProperty(value=35.625))
48
+ assert abs(result.value - 35.625) < 0.0001
49
+ result = client.property.float_seconds_array(FloatSecondsDurationArrayProperty(value=[35.625, 46.75]))
50
+ assert abs(result.value[0] - 35.625) < 0.0001
51
+ assert abs(result.value[1] - 46.75) < 0.0001
52
+
53
+
54
+ def test_header(client: DurationClient):
55
+ client.header.default(duration=datetime.timedelta(days=40))
56
+ client.header.iso8601(duration=datetime.timedelta(days=40))
57
+ client.header.iso8601_array(duration=[datetime.timedelta(days=40), datetime.timedelta(days=50)])
58
+ client.header.int32_seconds(duration=36)
59
+ client.header.float_seconds(duration=35.625)
60
+ client.header.float64_seconds(duration=35.625)
@@ -0,0 +1,31 @@
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 encode.numeric import NumericClient, models
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with NumericClient() as client:
13
+ yield client
14
+
15
+
16
+ def test_safeint_as_string(client: NumericClient):
17
+ result = client.property.safeint_as_string(models.SafeintAsStringProperty(value=10000000000))
18
+ assert result.value == 10000000000
19
+ assert result["value"] == "10000000000"
20
+
21
+
22
+ def test_uint32_as_string_optional(client: NumericClient):
23
+ result = client.property.uint32_as_string_optional(models.Uint32AsStringProperty(value=1))
24
+ assert result.value == 1
25
+ assert result["value"] == "1"
26
+
27
+
28
+ def test_uint8_as_string_optional(client: NumericClient):
29
+ result = client.property.uint8_as_string(models.Uint32AsStringProperty(value=255))
30
+ assert result.value == 255
31
+ assert result["value"] == "255"