From 5dd948e582be7e097ac1e23dd0040f170a019a72 Mon Sep 17 00:00:00 2001 From: ChenxiJiang333 Date: Mon, 5 Aug 2024 15:08:09 +0800 Subject: [PATCH 01/12] add testcase for AzureCoreEmbeddingVector --- ...model_azure_core_embedding_vector_async.py | 33 +++++++++++++++++++ ..._core_model_azure_core_embedding_vector.py | 30 +++++++++++++++++ .../test/azure/requirements.txt | 1 + 3 files changed, 64 insertions(+) create mode 100644 packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py create mode 100644 packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py new file mode 100644 index 00000000000..3e747c9bcf3 --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py @@ -0,0 +1,33 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from specs.azure.core.model.aio import ModelClient +from specs.azure.core.model.models import AzureEmbeddingModel + + +@pytest.fixture +async def client(): + async with ModelClient() as client: + yield client + + +@pytest.mark.asyncio +async def test_azure_core_embedding_vector_post(client: ModelClient): + embedding_model = AzureEmbeddingModel(embedding=[ 0, 1, 2, 3, 4 ]) + result = await client.azure_core_embedding_vector.post( + body=embedding_model, + ) + assert result == AzureEmbeddingModel(embedding=[5, 6, 7, 8, 9]) + + +@pytest.mark.asyncio +async def test_azure_core_embedding_vector_put(client: ModelClient): + await client.azure_core_embedding_vector.put(body=[ 0, 1, 2, 3, 4 ]) + + +@pytest.mark.asyncio +async def test_azure_core_embedding_vector_get(client: ModelClient): + await client.azure_core_embedding_vector.get() diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py new file mode 100644 index 00000000000..94fb8154699 --- /dev/null +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py @@ -0,0 +1,30 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import pytest +from specs.azure.core.model import ModelClient +from specs.azure.core.model.models import AzureEmbeddingModel + + +@pytest.fixture +def client(): + with ModelClient() as client: + yield client + + +def test_azure_core_embedding_vector_post(client: ModelClient): + embedding_model = AzureEmbeddingModel(embedding=[ 0, 1, 2, 3, 4 ]) + result = client.azure_core_embedding_vector.post( + body=embedding_model, + ) + assert result == AzureEmbeddingModel(embedding=[5, 6, 7, 8, 9]) + + +def test_azure_core_embedding_vector_put(client: ModelClient): + client.azure_core_embedding_vector.put(body=[ 0, 1, 2, 3, 4 ]) + + +def test_azure_core_embedding_vector_get(client: ModelClient): + client.azure_core_embedding_vector.get() diff --git a/packages/typespec-python/test/azure/requirements.txt b/packages/typespec-python/test/azure/requirements.txt index 97285e661a7..ad2be3ff537 100644 --- a/packages/typespec-python/test/azure/requirements.txt +++ b/packages/typespec-python/test/azure/requirements.txt @@ -11,6 +11,7 @@ azure-core==1.30.0 -e ./generated/azure-core-scalar -e ./generated/azurecore-lro-rpc -e ./generated/azure-core-lro-standard +-e ./generated/azure-core-model -e ./generated/azure-core-traits -e ./generated/azure-special-headers-client-request-id/ From 5ef4e0e15af1e9d93129f4b45bf7ac5343f188fc Mon Sep 17 00:00:00 2001 From: ChenxiJiang333 Date: Mon, 5 Aug 2024 15:28:50 +0800 Subject: [PATCH 02/12] fix format --- ...tcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md | 7 +++++++ ...t_azure_core_model_azure_core_embedding_vector_async.py | 6 +++--- .../test_azure_core_model_azure_core_embedding_vector.py | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 .chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md diff --git a/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md b/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md new file mode 100644 index 00000000000..98a52f0153f --- /dev/null +++ b/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md @@ -0,0 +1,7 @@ +--- +changeKind: internal +packages: + - "@azure-tools/typespec-python" +--- + +Add testcases for AzureCoreEmbeddingVector operations \ No newline at end of file diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py index 3e747c9bcf3..54ec0cd5b83 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py @@ -16,7 +16,7 @@ async def client(): @pytest.mark.asyncio async def test_azure_core_embedding_vector_post(client: ModelClient): - embedding_model = AzureEmbeddingModel(embedding=[ 0, 1, 2, 3, 4 ]) + embedding_model = AzureEmbeddingModel(embedding=[0, 1, 2, 3, 4]) result = await client.azure_core_embedding_vector.post( body=embedding_model, ) @@ -25,8 +25,8 @@ async def test_azure_core_embedding_vector_post(client: ModelClient): @pytest.mark.asyncio async def test_azure_core_embedding_vector_put(client: ModelClient): - await client.azure_core_embedding_vector.put(body=[ 0, 1, 2, 3, 4 ]) - + await client.azure_core_embedding_vector.put(body=[0, 1, 2, 3, 4]) + @pytest.mark.asyncio async def test_azure_core_embedding_vector_get(client: ModelClient): diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py index 94fb8154699..a80d24c3c5e 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py @@ -15,7 +15,7 @@ def client(): def test_azure_core_embedding_vector_post(client: ModelClient): - embedding_model = AzureEmbeddingModel(embedding=[ 0, 1, 2, 3, 4 ]) + embedding_model = AzureEmbeddingModel(embedding=[0, 1, 2, 3, 4]) result = client.azure_core_embedding_vector.post( body=embedding_model, ) @@ -23,7 +23,7 @@ def test_azure_core_embedding_vector_post(client: ModelClient): def test_azure_core_embedding_vector_put(client: ModelClient): - client.azure_core_embedding_vector.put(body=[ 0, 1, 2, 3, 4 ]) + client.azure_core_embedding_vector.put(body=[0, 1, 2, 3, 4]) def test_azure_core_embedding_vector_get(client: ModelClient): From e581f87120b1e45b6bd90549a3a78d76cbff73c8 Mon Sep 17 00:00:00 2001 From: ChenxiJiang333 Date: Mon, 5 Aug 2024 15:36:21 +0800 Subject: [PATCH 03/12] fix format --- ...-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .chronus/changes/{add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md => add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md} (58%) diff --git a/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md b/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md similarity index 58% rename from .chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md rename to .chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md index 98a52f0153f..8c12e1f5914 100644 --- a/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-28-30.md +++ b/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md @@ -4,4 +4,4 @@ packages: - "@azure-tools/typespec-python" --- -Add testcases for AzureCoreEmbeddingVector operations \ No newline at end of file +Add testcases for AzureCoreEmbeddingVector operations \ No newline at end of file From 4211f31c770fe91400701f349954c9b0d2bff4d8 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:35:47 +0800 Subject: [PATCH 04/12] fix --- packages/typespec-python/src/utils.ts | 3 +- .../core/model/aio/operations/_operations.py | 32 +++++++++++++++---- .../core/model/operations/_operations.py | 32 +++++++++++++++---- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/packages/typespec-python/src/utils.ts b/packages/typespec-python/src/utils.ts index 5b2476761ed..f4886a5485b 100644 --- a/packages/typespec-python/src/utils.ts +++ b/packages/typespec-python/src/utils.ts @@ -116,7 +116,8 @@ export function isAzureCoreModel(t: SdkType | undefined): boolean { return ( tspType.kind === "Model" && tspType.namespace !== undefined && - ["Azure.Core", "Azure.Core.Foundations"].includes(getNamespaceFullName(tspType.namespace)) + ["Azure.Core", "Azure.Core.Foundations"].includes(getNamespaceFullName(tspType.namespace)) && + !["EmbeddingVector"].includes(tspType.name) ); } diff --git a/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/aio/operations/_operations.py b/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/aio/operations/_operations.py index 7a530062178..0b50f4ce731 100644 --- a/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/aio/operations/_operations.py +++ b/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/aio/operations/_operations.py @@ -61,12 +61,20 @@ def __init__(self, *args, **kwargs) -> None: self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace_async - async def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements + async def get(self, **kwargs: Any) -> List[int]: """get an embedding vector. - :return: None - :rtype: None + :return: list of int + :rtype: list[int] :raises ~azure.core.exceptions.HttpResponseError: + + Example: + .. code-block:: python + + # response body for status code(s): 200 + response == [ + 0 + ] """ error_map: MutableMapping[int, Type[HttpResponseError]] = { 401: ClientAuthenticationError, @@ -79,7 +87,7 @@ async def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-retu _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[None] = kwargs.pop("cls", None) + cls: ClsType[List[int]] = kwargs.pop("cls", None) _request = build_azure_core_embedding_vector_get_request( headers=_headers, @@ -87,7 +95,7 @@ async def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-retu ) _request.url = self._client.format_url(_request.url) - _stream = False + _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) @@ -95,11 +103,23 @@ async def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-retu response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) raise HttpResponseError(response=response) + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(List[int], response.json()) + if cls: - return cls(pipeline_response, None, {}) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore @overload async def put( # pylint: disable=inconsistent-return-statements diff --git a/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/operations/_operations.py b/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/operations/_operations.py index 9e76fa53ae5..b2f0c1a7ca2 100644 --- a/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/operations/_operations.py +++ b/packages/typespec-python/test/azure/generated/azure-core-model/specs/azure/core/model/operations/_operations.py @@ -105,12 +105,20 @@ def __init__(self, *args, **kwargs): self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace - def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements + def get(self, **kwargs: Any) -> List[int]: """get an embedding vector. - :return: None - :rtype: None + :return: list of int + :rtype: list[int] :raises ~azure.core.exceptions.HttpResponseError: + + Example: + .. code-block:: python + + # response body for status code(s): 200 + response == [ + 0 + ] """ error_map: MutableMapping[int, Type[HttpResponseError]] = { 401: ClientAuthenticationError, @@ -123,7 +131,7 @@ def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-sta _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[None] = kwargs.pop("cls", None) + cls: ClsType[List[int]] = kwargs.pop("cls", None) _request = build_azure_core_embedding_vector_get_request( headers=_headers, @@ -131,7 +139,7 @@ def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-sta ) _request.url = self._client.format_url(_request.url) - _stream = False + _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) @@ -139,11 +147,23 @@ def get(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-sta response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) raise HttpResponseError(response=response) + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(List[int], response.json()) + if cls: - return cls(pipeline_response, None, {}) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore @overload def put( # pylint: disable=inconsistent-return-statements From 998531f324ed8300886b2be49e0dc5a38148006c Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:45:30 +0800 Subject: [PATCH 05/12] update --- ...embedding_vector_async.py => test_azure_core_model_async.py} | 2 +- ..._azure_core_embedding_vector.py => test_azure_core_model.py} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename packages/typespec-python/test/azure/mock_api_tests/asynctests/{test_azure_core_model_azure_core_embedding_vector_async.py => test_azure_core_model_async.py} (94%) rename packages/typespec-python/test/azure/mock_api_tests/{test_azure_core_model_azure_core_embedding_vector.py => test_azure_core_model.py} (93%) diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py similarity index 94% rename from packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py rename to packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py index 54ec0cd5b83..cf0e2ef966e 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_azure_core_embedding_vector_async.py +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py @@ -30,4 +30,4 @@ async def test_azure_core_embedding_vector_put(client: ModelClient): @pytest.mark.asyncio async def test_azure_core_embedding_vector_get(client: ModelClient): - await client.azure_core_embedding_vector.get() + await [0, 1, 2, 3, 4] == client.azure_core_embedding_vector.get() diff --git a/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py b/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model.py similarity index 93% rename from packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py rename to packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model.py index a80d24c3c5e..adca0211e51 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model_azure_core_embedding_vector.py +++ b/packages/typespec-python/test/azure/mock_api_tests/test_azure_core_model.py @@ -27,4 +27,4 @@ def test_azure_core_embedding_vector_put(client: ModelClient): def test_azure_core_embedding_vector_get(client: ModelClient): - client.azure_core_embedding_vector.get() + assert [0, 1, 2, 3, 4] == client.azure_core_embedding_vector.get() From 580fac384db115c5bffe9552011eb75c57fa09d9 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:11:24 +0800 Subject: [PATCH 06/12] fix --- packages/typespec-python/src/http.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/typespec-python/src/http.ts b/packages/typespec-python/src/http.ts index d72bfebbe4a..9229b34a93b 100644 --- a/packages/typespec-python/src/http.ts +++ b/packages/typespec-python/src/http.ts @@ -69,7 +69,7 @@ function emitInitialLroHttpMethod( operationGroupName: string, ): Record { return { - ...emitHttpOperation(context, rootClient, operationGroupName, method.operation), + ...emitHttpOperation(context, rootClient, operationGroupName, method.operation, method), name: `_${camelToSnakeCase(method.name)}_initial`, isLroInitialOperation: true, wantTracing: false, @@ -169,7 +169,7 @@ function emitHttpOperation( responses.push(emitHttpResponse(context, statusCodes, response, method)!); } for (const [statusCodes, exception] of operation.exceptions) { - exceptions.push(emitHttpResponse(context, statusCodes, exception)!); + exceptions.push(emitHttpResponse(context, statusCodes, exception, undefined, true)!); } const result = { url: operation.path, @@ -326,13 +326,20 @@ function emitHttpResponse( statusCodes: HttpStatusCodeRange | number | "*", response: SdkHttpResponse, method?: SdkServiceMethod, + isException = false, ): Record | undefined { if (!response) return undefined; let type = undefined; - if (response.type && !isAzureCoreModel(response.type)) { + if (isException) { + if (response.type && !isAzureCoreModel(response.type)) { + type = getType(context, response.type); + } + } else if (method && !method.kind.includes("basic")) { + if (method.response.type) { + type = getType(context, method.response.type); + } + } else if (response.type) { type = getType(context, response.type); - } else if (method && method.response.type && !isAzureCoreModel(method.response.type)) { - type = getType(context, method.response.type); } return { headers: response.headers.map((x) => emitHttpResponseHeader(context, x)), From bbad05fe20f48dfe7805831f8057d826e99a7ec8 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:13:14 +0800 Subject: [PATCH 07/12] changelog --- .chronus/changes/add-test-2024-7-8-18-12-59.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .chronus/changes/add-test-2024-7-8-18-12-59.md diff --git a/.chronus/changes/add-test-2024-7-8-18-12-59.md b/.chronus/changes/add-test-2024-7-8-18-12-59.md new file mode 100644 index 00000000000..662bb13cc95 --- /dev/null +++ b/.chronus/changes/add-test-2024-7-8-18-12-59.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@azure-tools/typespec-python" +--- + +Fix for get right response and exception \ No newline at end of file From e9db18fb8d7ab6cd477f3aabc608b4329a397b1a Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Thu, 8 Aug 2024 18:13:57 +0800 Subject: [PATCH 08/12] Delete .chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md --- ...tcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md diff --git a/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md b/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md deleted file mode 100644 index 8c12e1f5914..00000000000 --- a/.chronus/changes/add-testcase-for-AzureCoreEmbeddingVector-2024-7-5-15-35-48.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: internal -packages: - - "@azure-tools/typespec-python" ---- - -Add testcases for AzureCoreEmbeddingVector operations \ No newline at end of file From c7da4ad03e6e1d6856f3e9157a8869f974b1cd79 Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Thu, 8 Aug 2024 18:14:11 +0800 Subject: [PATCH 09/12] Update add-test-2024-7-8-18-12-59.md --- .chronus/changes/add-test-2024-7-8-18-12-59.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chronus/changes/add-test-2024-7-8-18-12-59.md b/.chronus/changes/add-test-2024-7-8-18-12-59.md index 662bb13cc95..537b2ac1014 100644 --- a/.chronus/changes/add-test-2024-7-8-18-12-59.md +++ b/.chronus/changes/add-test-2024-7-8-18-12-59.md @@ -4,4 +4,4 @@ packages: - "@azure-tools/typespec-python" --- -Fix for get right response and exception \ No newline at end of file +Fix to get right response and exception From 28c2f65c7c335c25cd680e98993e6c6d88e39f3f Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:16:17 +0800 Subject: [PATCH 10/12] revert --- packages/typespec-python/src/utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/typespec-python/src/utils.ts b/packages/typespec-python/src/utils.ts index f4886a5485b..5b2476761ed 100644 --- a/packages/typespec-python/src/utils.ts +++ b/packages/typespec-python/src/utils.ts @@ -116,8 +116,7 @@ export function isAzureCoreModel(t: SdkType | undefined): boolean { return ( tspType.kind === "Model" && tspType.namespace !== undefined && - ["Azure.Core", "Azure.Core.Foundations"].includes(getNamespaceFullName(tspType.namespace)) && - !["EmbeddingVector"].includes(tspType.name) + ["Azure.Core", "Azure.Core.Foundations"].includes(getNamespaceFullName(tspType.namespace)) ); } From 2b122040fb4cf512eaa7fe626a88556c391a6864 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Thu, 8 Aug 2024 19:11:15 +0800 Subject: [PATCH 11/12] review --- .../generator/pygen/codegen/models/code_model.py | 4 ++-- .../generator/pygen/codegen/models/model_type.py | 3 +-- packages/typespec-python/src/http.ts | 8 ++++---- packages/typespec-python/src/utils.ts | 5 +++-- .../asynctests/test_azure_core_model_async.py | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/typespec-python/generator/pygen/codegen/models/code_model.py b/packages/typespec-python/generator/pygen/codegen/models/code_model.py index 710b228870c..856723e60ec 100644 --- a/packages/typespec-python/generator/pygen/codegen/models/code_model.py +++ b/packages/typespec-python/generator/pygen/codegen/models/code_model.py @@ -7,7 +7,7 @@ from .base import BaseType from .enum_type import EnumType -from .model_type import ModelType +from .model_type import ModelType, UsageFlags from .combined_type import CombinedType from .client import Client from .request_builder import RequestBuilder, OverloadedRequestBuilder @@ -164,7 +164,7 @@ def model_types(self) -> List[ModelType]: self._model_types = [ t for t in self.types_map.values() - if isinstance(t, ModelType) and not (self.options["models_mode"] == "dpg" and t.page_result_model) + if isinstance(t, ModelType) and t.usage != UsageFlags.Default.value ] return self._model_types diff --git a/packages/typespec-python/generator/pygen/codegen/models/model_type.py b/packages/typespec-python/generator/pygen/codegen/models/model_type.py index f510f16ad79..19a2c4ee900 100644 --- a/packages/typespec-python/generator/pygen/codegen/models/model_type.py +++ b/packages/typespec-python/generator/pygen/codegen/models/model_type.py @@ -84,9 +84,8 @@ def __init__( self._got_polymorphic_subtypes = False self.internal: bool = self.yaml_data.get("internal", False) self.snake_case_name: str = self.yaml_data["snakeCaseName"] - self.page_result_model: bool = self.yaml_data.get("pageResultModel", False) self.cross_language_definition_id: Optional[str] = self.yaml_data.get("crossLanguageDefinitionId") - self.usage: int = self.yaml_data.get("usage", 0) + self.usage: int = self.yaml_data.get("usage", UsageFlags.Input.value | UsageFlags.Output.value) @property def is_usage_output(self) -> bool: diff --git a/packages/typespec-python/src/http.ts b/packages/typespec-python/src/http.ts index 9229b34a93b..40635989ba3 100644 --- a/packages/typespec-python/src/http.ts +++ b/packages/typespec-python/src/http.ts @@ -23,7 +23,7 @@ import { getDescriptionAndSummary, getImplementation, isAbstract, - isAzureCoreModel, + isAzureCoreErrorResponse, } from "./utils.js"; import { KnownTypes, getType } from "./types.js"; import { PythonSdkContext } from "./lib.js"; @@ -103,8 +103,8 @@ function addPagingInformation( operationGroupName: string, ) { for (const response of method.operation.responses.values()) { - if (response.type && !isAzureCoreModel(response.type)) { - getType(context, response.type)["pageResultModel"] = true; + if (response.type) { + getType(context, response.type)["usage"] = UsageFlags.None; } } const itemType = getType(context, method.response.type!); @@ -331,7 +331,7 @@ function emitHttpResponse( if (!response) return undefined; let type = undefined; if (isException) { - if (response.type && !isAzureCoreModel(response.type)) { + if (response.type && !isAzureCoreErrorResponse(response.type)) { type = getType(context, response.type); } } else if (method && !method.kind.includes("basic")) { diff --git a/packages/typespec-python/src/utils.ts b/packages/typespec-python/src/utils.ts index 5b2476761ed..7b25a68e26e 100644 --- a/packages/typespec-python/src/utils.ts +++ b/packages/typespec-python/src/utils.ts @@ -109,14 +109,15 @@ export function emitParamBase( }; } -export function isAzureCoreModel(t: SdkType | undefined): boolean { +export function isAzureCoreErrorResponse(t: SdkType | undefined): boolean { if (!t) return false; const tspType = t.__raw; if (!tspType) return false; return ( tspType.kind === "Model" && tspType.namespace !== undefined && - ["Azure.Core", "Azure.Core.Foundations"].includes(getNamespaceFullName(tspType.namespace)) + ["Azure.Core", "Azure.Core.Foundations"].includes(getNamespaceFullName(tspType.namespace)) && + tspType.name === "ErrorResponse" ); } diff --git a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py index cf0e2ef966e..b2f8eed8952 100644 --- a/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py +++ b/packages/typespec-python/test/azure/mock_api_tests/asynctests/test_azure_core_model_async.py @@ -30,4 +30,4 @@ async def test_azure_core_embedding_vector_put(client: ModelClient): @pytest.mark.asyncio async def test_azure_core_embedding_vector_get(client: ModelClient): - await [0, 1, 2, 3, 4] == client.azure_core_embedding_vector.get() + assert [0, 1, 2, 3, 4] == (await client.azure_core_embedding_vector.get()) From ac9a399e137a16e56a96ce97ea49fb46f3df06b1 Mon Sep 17 00:00:00 2001 From: msyyc <70930885+msyyc@users.noreply.github.com> Date: Fri, 9 Aug 2024 10:02:50 +0800 Subject: [PATCH 12/12] black --- .../generator/pygen/codegen/models/code_model.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/typespec-python/generator/pygen/codegen/models/code_model.py b/packages/typespec-python/generator/pygen/codegen/models/code_model.py index 856723e60ec..7ddb90fe379 100644 --- a/packages/typespec-python/generator/pygen/codegen/models/code_model.py +++ b/packages/typespec-python/generator/pygen/codegen/models/code_model.py @@ -162,9 +162,7 @@ def model_types(self) -> List[ModelType]: """All of the model types in this class""" if not self._model_types: self._model_types = [ - t - for t in self.types_map.values() - if isinstance(t, ModelType) and t.usage != UsageFlags.Default.value + t for t in self.types_map.values() if isinstance(t, ModelType) and t.usage != UsageFlags.Default.value ] return self._model_types