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