@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,40 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# --------------------------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
+
# --------------------------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
# This script is used to execute apiview generation within a tox environment. Depending on which package is being executed against,
|
|
9
|
+
# a failure may be suppressed.
|
|
10
|
+
|
|
11
|
+
from subprocess import check_call, CalledProcessError
|
|
12
|
+
import logging
|
|
13
|
+
from util import run_check
|
|
14
|
+
|
|
15
|
+
logging.getLogger().setLevel(logging.INFO)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _single_dir_apiview(mod):
|
|
19
|
+
loop = 0
|
|
20
|
+
while True:
|
|
21
|
+
try:
|
|
22
|
+
check_call(
|
|
23
|
+
[
|
|
24
|
+
"apistubgen",
|
|
25
|
+
"--pkg-path",
|
|
26
|
+
str(mod.absolute()),
|
|
27
|
+
]
|
|
28
|
+
)
|
|
29
|
+
except CalledProcessError as e:
|
|
30
|
+
if loop >= 2: # retry for maximum 3 times because sometimes the apistubgen has transient failure.
|
|
31
|
+
logging.error("{} exited with apiview generation error {}".format(mod.stem, e.returncode))
|
|
32
|
+
return False
|
|
33
|
+
else:
|
|
34
|
+
loop += 1
|
|
35
|
+
continue
|
|
36
|
+
return True
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
run_check("apiview", _single_dir_apiview, "APIView")
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# --------------------------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
+
# --------------------------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
# This script is used to execute mypy within a tox environment. Depending on which package is being executed against,
|
|
9
|
+
# a failure may be suppressed.
|
|
10
|
+
|
|
11
|
+
from subprocess import check_call, CalledProcessError
|
|
12
|
+
import os
|
|
13
|
+
import logging
|
|
14
|
+
import sys
|
|
15
|
+
from util import run_check
|
|
16
|
+
|
|
17
|
+
logging.getLogger().setLevel(logging.INFO)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_config_file_location():
|
|
21
|
+
mypy_ini_path = os.path.join(os.getcwd(), "../../eng/scripts/ci/mypy.ini")
|
|
22
|
+
if os.path.exists(mypy_ini_path):
|
|
23
|
+
return mypy_ini_path
|
|
24
|
+
else:
|
|
25
|
+
return os.path.join(os.getcwd(), "../../../eng/scripts/ci/mypy.ini")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _single_dir_mypy(mod):
|
|
29
|
+
inner_class = next(d for d in mod.iterdir() if d.is_dir() and not str(d).endswith("egg-info"))
|
|
30
|
+
try:
|
|
31
|
+
check_call(
|
|
32
|
+
[
|
|
33
|
+
sys.executable,
|
|
34
|
+
"-m",
|
|
35
|
+
"mypy",
|
|
36
|
+
"--config-file",
|
|
37
|
+
get_config_file_location(),
|
|
38
|
+
"--ignore-missing",
|
|
39
|
+
str(inner_class.absolute()),
|
|
40
|
+
]
|
|
41
|
+
)
|
|
42
|
+
return True
|
|
43
|
+
except CalledProcessError as e:
|
|
44
|
+
logging.error("{} exited with mypy error {}".format(inner_class.stem, e.returncode))
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if __name__ == "__main__":
|
|
49
|
+
run_check("mypy", _single_dir_mypy, "MyPy")
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# --------------------------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
+
# --------------------------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
# This script is used to execute pylint within a tox environment. Depending on which package is being executed against,
|
|
9
|
+
# a failure may be suppressed.
|
|
10
|
+
|
|
11
|
+
from subprocess import check_call, CalledProcessError
|
|
12
|
+
import os
|
|
13
|
+
import logging
|
|
14
|
+
import sys
|
|
15
|
+
from util import run_check
|
|
16
|
+
|
|
17
|
+
logging.getLogger().setLevel(logging.INFO)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_rfc_file_location():
|
|
21
|
+
rfc_file_location = os.path.join(os.getcwd(), "../../../eng/scripts/ci/pylintrc")
|
|
22
|
+
if os.path.exists(rfc_file_location):
|
|
23
|
+
return rfc_file_location
|
|
24
|
+
else:
|
|
25
|
+
return os.path.join(os.getcwd(), "../../../../eng/scripts/ci/pylintrc")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _single_dir_pylint(mod):
|
|
29
|
+
inner_class = next(d for d in mod.iterdir() if d.is_dir() and not str(d).endswith("egg-info"))
|
|
30
|
+
try:
|
|
31
|
+
check_call(
|
|
32
|
+
[
|
|
33
|
+
sys.executable,
|
|
34
|
+
"-m",
|
|
35
|
+
"pylint",
|
|
36
|
+
"--rcfile={}".format(get_rfc_file_location()),
|
|
37
|
+
"--evaluation=(max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention + info)/ statement) * 10)))",
|
|
38
|
+
"--load-plugins=pylint_guidelines_checker",
|
|
39
|
+
"--output-format=parseable",
|
|
40
|
+
str(inner_class.absolute()),
|
|
41
|
+
]
|
|
42
|
+
)
|
|
43
|
+
return True
|
|
44
|
+
except CalledProcessError as e:
|
|
45
|
+
logging.error("{} exited with linting error {}".format(str(inner_class.absolute()), e.returncode))
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
run_check("pylint", _single_dir_pylint, "Pylint")
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# --------------------------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
+
# --------------------------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
# This script is used to execute pyright within a tox environment. Depending on which package is being executed against,
|
|
9
|
+
# a failure may be suppressed.
|
|
10
|
+
|
|
11
|
+
import os
|
|
12
|
+
from subprocess import check_output, CalledProcessError
|
|
13
|
+
import logging
|
|
14
|
+
import sys
|
|
15
|
+
import time
|
|
16
|
+
from util import run_check
|
|
17
|
+
|
|
18
|
+
logging.getLogger().setLevel(logging.INFO)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_pyright_config_file_location():
|
|
22
|
+
pyright_config = os.path.join(os.getcwd(), "../../eng/scripts/ci/pyrightconfig.json")
|
|
23
|
+
if os.path.exists(pyright_config):
|
|
24
|
+
return pyright_config
|
|
25
|
+
else:
|
|
26
|
+
return os.path.join(os.getcwd(), "../../../eng/scripts/ci/pyrightconfig.json")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _single_dir_pyright(mod):
|
|
30
|
+
inner_class = next(d for d in mod.iterdir() if d.is_dir() and not str(d).endswith("egg-info"))
|
|
31
|
+
retries = 3
|
|
32
|
+
while retries:
|
|
33
|
+
try:
|
|
34
|
+
check_output(
|
|
35
|
+
[
|
|
36
|
+
sys.executable,
|
|
37
|
+
"-m",
|
|
38
|
+
"pyright",
|
|
39
|
+
"-p",
|
|
40
|
+
get_pyright_config_file_location(),
|
|
41
|
+
str(inner_class.absolute()),
|
|
42
|
+
],
|
|
43
|
+
text=True,
|
|
44
|
+
)
|
|
45
|
+
return True
|
|
46
|
+
except CalledProcessError as e:
|
|
47
|
+
logging.exception("{} exited with pyright error {}".format(inner_class.stem, e.returncode))
|
|
48
|
+
logging.error(f"PyRight stdout:\n{e.stdout}\n===========")
|
|
49
|
+
logging.error(f"PyRight stderr:\n{e.stderr}\n===========")
|
|
50
|
+
# PyRight has shown to randomly failed with a 217, retry the same folder 3 times should help
|
|
51
|
+
retries -= 1
|
|
52
|
+
time.sleep(5)
|
|
53
|
+
|
|
54
|
+
return False
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
if __name__ == "__main__":
|
|
58
|
+
run_check("pyright", _single_dir_pyright, "PyRight")
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# --------------------------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for license information.
|
|
6
|
+
# --------------------------------------------------------------------------------------------
|
|
7
|
+
import os
|
|
8
|
+
import logging
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import argparse
|
|
11
|
+
from multiprocessing import Pool
|
|
12
|
+
|
|
13
|
+
logging.getLogger().setLevel(logging.INFO)
|
|
14
|
+
|
|
15
|
+
ROOT_FOLDER = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "..", "generator"))
|
|
16
|
+
|
|
17
|
+
IGNORE_FOLDER = []
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def run_check(name, call_back, log_info):
|
|
21
|
+
parser = argparse.ArgumentParser(
|
|
22
|
+
description=f"Run {name} against target folder. Add a local custom plugin to the path prior to execution. "
|
|
23
|
+
)
|
|
24
|
+
parser.add_argument(
|
|
25
|
+
"-t",
|
|
26
|
+
"--test-folder",
|
|
27
|
+
dest="test_folder",
|
|
28
|
+
help="The test folder we're in. Can be 'azure', 'multiapi', or 'vanilla'",
|
|
29
|
+
required=True,
|
|
30
|
+
)
|
|
31
|
+
parser.add_argument(
|
|
32
|
+
"-g",
|
|
33
|
+
"--generator",
|
|
34
|
+
dest="generator",
|
|
35
|
+
help="The generator we're using. Can be 'legacy', 'version-tolerant'.",
|
|
36
|
+
required=False,
|
|
37
|
+
)
|
|
38
|
+
parser.add_argument(
|
|
39
|
+
"-f",
|
|
40
|
+
"--file-name",
|
|
41
|
+
dest="file_name",
|
|
42
|
+
help="The specific file name if you only want to run one file. Optional.",
|
|
43
|
+
required=False,
|
|
44
|
+
)
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"-s",
|
|
47
|
+
"--subfolder",
|
|
48
|
+
dest="subfolder",
|
|
49
|
+
help="The specific sub folder to validate, default to Expected/AcceptanceTests. Optional.",
|
|
50
|
+
required=False,
|
|
51
|
+
default="Expected/AcceptanceTests",
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
args = parser.parse_args()
|
|
55
|
+
|
|
56
|
+
pkg_dir = Path(ROOT_FOLDER) / Path("test") / Path(args.test_folder)
|
|
57
|
+
if args.generator:
|
|
58
|
+
pkg_dir /= Path(args.generator)
|
|
59
|
+
if args.subfolder:
|
|
60
|
+
pkg_dir /= Path(args.subfolder)
|
|
61
|
+
dirs = [d for d in pkg_dir.iterdir() if d.is_dir() and not d.stem.startswith("_") and d.stem not in IGNORE_FOLDER]
|
|
62
|
+
if args.file_name:
|
|
63
|
+
dirs = [d for d in dirs if args.file_name.lower() in d.stem.lower()]
|
|
64
|
+
if len(dirs) > 1:
|
|
65
|
+
with Pool() as pool:
|
|
66
|
+
result = pool.map(call_back, dirs)
|
|
67
|
+
response = all(result)
|
|
68
|
+
else:
|
|
69
|
+
response = call_back(dirs[0])
|
|
70
|
+
if not response:
|
|
71
|
+
logging.error("%s fails", log_info)
|
|
72
|
+
exit(0)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { exec } from "child_process";
|
|
4
|
+
import { existsSync } from "fs";
|
|
5
|
+
import { dirname, join, resolve } from "path";
|
|
6
|
+
import process from "process";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
import { parseArgs } from "util";
|
|
9
|
+
|
|
10
|
+
const argv = parseArgs({
|
|
11
|
+
args: process.argv.slice(2),
|
|
12
|
+
options: {
|
|
13
|
+
pythonPath: { type: "string" },
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// execute the command
|
|
18
|
+
export function executeCommand(command: string, prettyName: string) {
|
|
19
|
+
exec(command, (error, stdout, stderr) => {
|
|
20
|
+
if (error) {
|
|
21
|
+
console.error(chalk.red(`Error executing ${command}(stdout): ${stdout}`));
|
|
22
|
+
console.error(chalk.red(`Error executing ${command}{stderr}: ${stderr}`));
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (stderr) {
|
|
26
|
+
// Process stderr output
|
|
27
|
+
console.log(chalk.yellow(`${command}:\n${stderr}`));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.log(chalk.green(`${prettyName} passed`));
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Function to run a command and log the output
|
|
35
|
+
export function runCommand(command: string, prettyName: string) {
|
|
36
|
+
let pythonPath = argv.values.pythonPath
|
|
37
|
+
? resolve(argv.values.pythonPath)
|
|
38
|
+
: join(dirname(fileURLToPath(import.meta.url)), "..", "..", "..", "venv/");
|
|
39
|
+
if (existsSync(join(pythonPath, "bin"))) {
|
|
40
|
+
pythonPath = join(pythonPath, "bin", "python");
|
|
41
|
+
} else if (existsSync(join(pythonPath, "Scripts"))) {
|
|
42
|
+
pythonPath = join(pythonPath, "Scripts", "python");
|
|
43
|
+
} else {
|
|
44
|
+
throw new Error(pythonPath);
|
|
45
|
+
}
|
|
46
|
+
command = `${pythonPath} -m ${command}`;
|
|
47
|
+
executeCommand(command, prettyName);
|
|
48
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# -------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for
|
|
6
|
+
# license information.
|
|
7
|
+
# --------------------------------------------------------------------------
|
|
8
|
+
import sys
|
|
9
|
+
|
|
10
|
+
if not sys.version_info >= (3, 8, 0):
|
|
11
|
+
raise Exception("Autorest for Python extension requires Python 3.8 at least")
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
import pip
|
|
15
|
+
except ImportError:
|
|
16
|
+
raise Exception("Your Python installation doesn't have pip available")
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
import venv
|
|
20
|
+
except ImportError:
|
|
21
|
+
raise Exception("Your Python installation doesn't have venv available")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Now we have pip and Py >= 3.8, go to work
|
|
25
|
+
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
from venvtools import ExtendedEnvBuilder, python_run
|
|
29
|
+
|
|
30
|
+
_ROOT_DIR = Path(__file__).parent.parent.parent.parent
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def main():
|
|
34
|
+
venv_path = _ROOT_DIR / "venv"
|
|
35
|
+
if venv_path.exists():
|
|
36
|
+
env_builder = venv.EnvBuilder(with_pip=True)
|
|
37
|
+
venv_context = env_builder.ensure_directories(venv_path)
|
|
38
|
+
else:
|
|
39
|
+
env_builder = ExtendedEnvBuilder(with_pip=True, upgrade_deps=True)
|
|
40
|
+
env_builder.create(venv_path)
|
|
41
|
+
venv_context = env_builder.context
|
|
42
|
+
|
|
43
|
+
python_run(venv_context, "pip", ["install", "-U", "pip"])
|
|
44
|
+
python_run(
|
|
45
|
+
venv_context,
|
|
46
|
+
"pip",
|
|
47
|
+
["install", "-r", f"{_ROOT_DIR}/generator/requirements.txt"],
|
|
48
|
+
)
|
|
49
|
+
python_run(venv_context, "pip", ["install", "-e", f"{_ROOT_DIR}/generator"])
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
main()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# -------------------------------------------------------------------------
|
|
4
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
5
|
+
# Licensed under the MIT License. See License.txt in the project root for
|
|
6
|
+
# license information.
|
|
7
|
+
# --------------------------------------------------------------------------
|
|
8
|
+
import sys
|
|
9
|
+
import os
|
|
10
|
+
import argparse
|
|
11
|
+
|
|
12
|
+
if not sys.version_info >= (3, 8, 0):
|
|
13
|
+
raise Exception("Autorest for Python extension requires Python 3.8 at least")
|
|
14
|
+
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
import venv
|
|
17
|
+
|
|
18
|
+
from venvtools import python_run
|
|
19
|
+
|
|
20
|
+
_ROOT_DIR = Path(__file__).parent.parent.parent.parent
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main():
|
|
24
|
+
venv_path = _ROOT_DIR / "venv"
|
|
25
|
+
venv_preexists = venv_path.exists()
|
|
26
|
+
|
|
27
|
+
assert venv_preexists # Otherwise install was not done
|
|
28
|
+
|
|
29
|
+
env_builder = venv.EnvBuilder(with_pip=True)
|
|
30
|
+
venv_context = env_builder.ensure_directories(venv_path)
|
|
31
|
+
try:
|
|
32
|
+
python_run(
|
|
33
|
+
venv_context,
|
|
34
|
+
"pip",
|
|
35
|
+
["install", "-r", f"{_ROOT_DIR}/generator/dev_requirements.txt"],
|
|
36
|
+
)
|
|
37
|
+
except FileNotFoundError as e:
|
|
38
|
+
raise ValueError(e.filename)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
if __name__ == "__main__":
|
|
42
|
+
main()
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// This script wraps logic in @azure-tools/extension to resolve
|
|
2
|
+
// the path to Python 3 so that a Python script file can be run
|
|
3
|
+
// from an npm script in package.json. It uses the same Python 3
|
|
4
|
+
// path resolution algorithm as AutoRest so that the behavior
|
|
5
|
+
// is fully consistent (and also supports AUTOREST_PYTHON_EXE).
|
|
6
|
+
//
|
|
7
|
+
// Invoke it like so: "tsx run-python3.ts script.py"
|
|
8
|
+
|
|
9
|
+
import cp from "child_process";
|
|
10
|
+
import { patchPythonPath } from "./system-requirements.js";
|
|
11
|
+
|
|
12
|
+
async function runPython3(...args: string[]) {
|
|
13
|
+
const command = await patchPythonPath(["python", ...args], {
|
|
14
|
+
version: ">=3.8",
|
|
15
|
+
environmentVariable: "AUTOREST_PYTHON_EXE",
|
|
16
|
+
});
|
|
17
|
+
cp.execSync(command.join(" "), {
|
|
18
|
+
stdio: [0, 1, 2],
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
runPython3(...process.argv.slice(2)).catch((err) => {
|
|
23
|
+
console.error(err.toString()); // eslint-disable-line no-console
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
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 sys
|
|
7
|
+
import venv
|
|
8
|
+
import logging
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from pygen import m2r, preprocess, codegen, black
|
|
11
|
+
from pygen.utils import parse_args
|
|
12
|
+
|
|
13
|
+
_ROOT_DIR = Path(__file__).parent.parent.parent.parent
|
|
14
|
+
|
|
15
|
+
_LOGGER = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
if __name__ == "__main__":
|
|
18
|
+
venv_path = _ROOT_DIR / "venv"
|
|
19
|
+
venv_preexists = venv_path.exists()
|
|
20
|
+
|
|
21
|
+
assert venv_preexists # Otherwise install was not done
|
|
22
|
+
|
|
23
|
+
env_builder = venv.EnvBuilder(with_pip=True)
|
|
24
|
+
venv_context = env_builder.ensure_directories(venv_path)
|
|
25
|
+
|
|
26
|
+
if "--debug" in sys.argv or "--debug=true" in sys.argv:
|
|
27
|
+
try:
|
|
28
|
+
import debugpy # pylint: disable=import-outside-toplevel
|
|
29
|
+
except ImportError:
|
|
30
|
+
raise SystemExit("Please pip install ptvsd in order to use VSCode debugging")
|
|
31
|
+
|
|
32
|
+
# 5678 is the default attach port in the VS Code debug configurations
|
|
33
|
+
debugpy.listen(("localhost", 5678))
|
|
34
|
+
debugpy.wait_for_client()
|
|
35
|
+
breakpoint() # pylint: disable=undefined-variable
|
|
36
|
+
|
|
37
|
+
# run m2r
|
|
38
|
+
args, unknown_args = parse_args()
|
|
39
|
+
m2r.M2R(output_folder=args.output_folder, cadl_file=args.cadl_file, **unknown_args).process()
|
|
40
|
+
preprocess.PreProcessPlugin(output_folder=args.output_folder, cadl_file=args.cadl_file, **unknown_args).process()
|
|
41
|
+
codegen.CodeGenerator(output_folder=args.output_folder, cadl_file=args.cadl_file, **unknown_args).process()
|
|
42
|
+
black.BlackScriptPlugin(output_folder=args.output_folder, **unknown_args).process()
|