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