diff --git a/.chronus/changes/auto-iscai-msft-python-fixBathDocIssue-2025-8-29-17-55-57.md b/.chronus/changes/auto-iscai-msft-python-fixBathDocIssue-2025-8-29-17-55-57.md new file mode 100644 index 00000000000..4af6456d3a3 --- /dev/null +++ b/.chronus/changes/auto-iscai-msft-python-fixBathDocIssue-2025-8-29-17-55-57.md @@ -0,0 +1,9 @@ +--- +# Change versionKind to one of: internal, fix, dependencies, feature, deprecation, breaking +changeKind: fix +packages: + - "@autorest/python" + - "@azure-tools/typespec-python" +--- + +[python] ensure first line in param description wrap around is a space diff --git a/packages/autorest.python/package.json b/packages/autorest.python/package.json index 39cb615f3c8..05c328f38b6 100644 --- a/packages/autorest.python/package.json +++ b/packages/autorest.python/package.json @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/Azure/autorest.python/blob/main/README.md", "dependencies": { - "@typespec/http-client-python": "https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz", + "@typespec/http-client-python": "https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz", "@autorest/system-requirements": "~1.0.2", "fs-extra": "~11.2.0", "tsx": "~4.19.1" diff --git a/packages/typespec-python/package.json b/packages/typespec-python/package.json index 994abe70fc2..aae6f0be050 100644 --- a/packages/typespec-python/package.json +++ b/packages/typespec-python/package.json @@ -67,7 +67,7 @@ "js-yaml": "~4.1.0", "semver": "~7.6.2", "tsx": "~4.19.1", - "@typespec/http-client-python": "https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz", + "@typespec/http-client-python": "https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz", "fs-extra": "~11.2.0" }, "devDependencies": { @@ -86,7 +86,7 @@ "@azure-tools/typespec-azure-rulesets": "~0.60.0", "@azure-tools/typespec-autorest": "~0.60.0", "@azure-tools/typespec-client-generator-core": "~0.60.2", - "@azure-tools/azure-http-specs": "0.1.0-alpha.29", + "@azure-tools/azure-http-specs": "0.1.0-alpha.30-dev.5", "@typespec/http-specs": "0.1.0-alpha.26", "@typespec/spector": "0.1.0-alpha.18", "@typespec/spec-api": "0.1.0-alpha.9", diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/apiview-properties.json b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/apiview-properties.json index 6912b488bc6..02fd6fef2a1 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/apiview-properties.json +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/apiview-properties.json @@ -5,6 +5,10 @@ "specs.azure.clientgenerator.core.override.operations.ReorderParametersOperations.reorder": "_Specs_.Azure.ClientGenerator.Core.Override.ReorderParameters.reorder", "specs.azure.clientgenerator.core.override.aio.operations.ReorderParametersOperations.reorder": "_Specs_.Azure.ClientGenerator.Core.Override.ReorderParameters.reorder", "specs.azure.clientgenerator.core.override.operations.GroupParametersOperations.group": "_Specs_.Azure.ClientGenerator.Core.Override.GroupParameters.group", - "specs.azure.clientgenerator.core.override.aio.operations.GroupParametersOperations.group": "_Specs_.Azure.ClientGenerator.Core.Override.GroupParameters.group" + "specs.azure.clientgenerator.core.override.aio.operations.GroupParametersOperations.group": "_Specs_.Azure.ClientGenerator.Core.Override.GroupParameters.group", + "specs.azure.clientgenerator.core.override.operations.RequireOptionalParameterOperations.require_optional": "_Specs_.Azure.ClientGenerator.Core.Override.RequireOptionalParameter.requireOptional", + "specs.azure.clientgenerator.core.override.aio.operations.RequireOptionalParameterOperations.require_optional": "_Specs_.Azure.ClientGenerator.Core.Override.RequireOptionalParameter.requireOptional", + "specs.azure.clientgenerator.core.override.operations.RemoveOptionalParameterOperations.remove_optional": "_Specs_.Azure.ClientGenerator.Core.Override.RemoveOptionalParameter.removeOptional", + "specs.azure.clientgenerator.core.override.aio.operations.RemoveOptionalParameterOperations.remove_optional": "_Specs_.Azure.ClientGenerator.Core.Override.RemoveOptionalParameter.removeOptional" } } \ No newline at end of file diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_remove_optional_parameter_operations.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_remove_optional_parameter_operations.py new file mode 100644 index 00000000000..8971bc3b65c --- /dev/null +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_remove_optional_parameter_operations.py @@ -0,0 +1,24 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils import recorded_by_proxy +from testpreparer import OverrideClientTestBase, OverridePreparer + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestOverrideRemoveOptionalParameterOperations(OverrideClientTestBase): + @OverridePreparer() + @recorded_by_proxy + def test_remove_optional_parameter_remove_optional(self, override_endpoint): + client = self.create_client(endpoint=override_endpoint) + response = client.remove_optional_parameter.remove_optional( + param1="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_remove_optional_parameter_operations_async.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_remove_optional_parameter_operations_async.py new file mode 100644 index 00000000000..444fd5f3f56 --- /dev/null +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_remove_optional_parameter_operations_async.py @@ -0,0 +1,25 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils.aio import recorded_by_proxy_async +from testpreparer import OverridePreparer +from testpreparer_async import OverrideClientTestBaseAsync + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestOverrideRemoveOptionalParameterOperationsAsync(OverrideClientTestBaseAsync): + @OverridePreparer() + @recorded_by_proxy_async + async def test_remove_optional_parameter_remove_optional(self, override_endpoint): + client = self.create_async_client(endpoint=override_endpoint) + response = await client.remove_optional_parameter.remove_optional( + param1="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_require_optional_parameter_operations.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_require_optional_parameter_operations.py new file mode 100644 index 00000000000..f0941eda9ba --- /dev/null +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_require_optional_parameter_operations.py @@ -0,0 +1,25 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils import recorded_by_proxy +from testpreparer import OverrideClientTestBase, OverridePreparer + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestOverrideRequireOptionalParameterOperations(OverrideClientTestBase): + @OverridePreparer() + @recorded_by_proxy + def test_require_optional_parameter_require_optional(self, override_endpoint): + client = self.create_client(endpoint=override_endpoint) + response = client.require_optional_parameter.require_optional( + param1="str", + param2="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_require_optional_parameter_operations_async.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_require_optional_parameter_operations_async.py new file mode 100644 index 00000000000..b211008e1e7 --- /dev/null +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/generated_tests/test_override_require_optional_parameter_operations_async.py @@ -0,0 +1,26 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils.aio import recorded_by_proxy_async +from testpreparer import OverridePreparer +from testpreparer_async import OverrideClientTestBaseAsync + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestOverrideRequireOptionalParameterOperationsAsync(OverrideClientTestBaseAsync): + @OverridePreparer() + @recorded_by_proxy_async + async def test_require_optional_parameter_require_optional(self, override_endpoint): + client = self.create_async_client(endpoint=override_endpoint) + response = await client.require_optional_parameter.require_optional( + param1="str", + param2="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/_client.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/_client.py index f7d9d02a29b..18f33dea2f0 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/_client.py +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/_client.py @@ -16,7 +16,12 @@ from ._configuration import OverrideClientConfiguration from ._utils.serialization import Deserializer, Serializer -from .operations import GroupParametersOperations, ReorderParametersOperations +from .operations import ( + GroupParametersOperations, + RemoveOptionalParameterOperations, + ReorderParametersOperations, + RequireOptionalParameterOperations, +) class OverrideClient: # pylint: disable=client-accepts-api-version-keyword @@ -28,6 +33,12 @@ class OverrideClient: # pylint: disable=client-accepts-api-version-keyword :ivar group_parameters: GroupParametersOperations operations :vartype group_parameters: specs.azure.clientgenerator.core.override.operations.GroupParametersOperations + :ivar require_optional_parameter: RequireOptionalParameterOperations operations + :vartype require_optional_parameter: + specs.azure.clientgenerator.core.override.operations.RequireOptionalParameterOperations + :ivar remove_optional_parameter: RemoveOptionalParameterOperations operations + :vartype remove_optional_parameter: + specs.azure.clientgenerator.core.override.operations.RemoveOptionalParameterOperations :keyword endpoint: Service host. Default value is "http://localhost:3000". :paramtype endpoint: str """ @@ -66,6 +77,12 @@ def __init__( # pylint: disable=missing-client-constructor-parameter-credential self.group_parameters = GroupParametersOperations( self._client, self._config, self._serialize, self._deserialize ) + self.require_optional_parameter = RequireOptionalParameterOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.remove_optional_parameter = RemoveOptionalParameterOperations( + self._client, self._config, self._serialize, self._deserialize + ) def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: """Runs the network request through the client's chained policies. diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/_client.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/_client.py index a0cdf5bdff3..f5f9bd68d99 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/_client.py +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/_client.py @@ -16,7 +16,12 @@ from .._utils.serialization import Deserializer, Serializer from ._configuration import OverrideClientConfiguration -from .operations import GroupParametersOperations, ReorderParametersOperations +from .operations import ( + GroupParametersOperations, + RemoveOptionalParameterOperations, + ReorderParametersOperations, + RequireOptionalParameterOperations, +) class OverrideClient: # pylint: disable=client-accepts-api-version-keyword @@ -28,6 +33,12 @@ class OverrideClient: # pylint: disable=client-accepts-api-version-keyword :ivar group_parameters: GroupParametersOperations operations :vartype group_parameters: specs.azure.clientgenerator.core.override.aio.operations.GroupParametersOperations + :ivar require_optional_parameter: RequireOptionalParameterOperations operations + :vartype require_optional_parameter: + specs.azure.clientgenerator.core.override.aio.operations.RequireOptionalParameterOperations + :ivar remove_optional_parameter: RemoveOptionalParameterOperations operations + :vartype remove_optional_parameter: + specs.azure.clientgenerator.core.override.aio.operations.RemoveOptionalParameterOperations :keyword endpoint: Service host. Default value is "http://localhost:3000". :paramtype endpoint: str """ @@ -66,6 +77,12 @@ def __init__( # pylint: disable=missing-client-constructor-parameter-credential self.group_parameters = GroupParametersOperations( self._client, self._config, self._serialize, self._deserialize ) + self.require_optional_parameter = RequireOptionalParameterOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.remove_optional_parameter = RemoveOptionalParameterOperations( + self._client, self._config, self._serialize, self._deserialize + ) def send_request( self, request: HttpRequest, *, stream: bool = False, **kwargs: Any diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/__init__.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/__init__.py index 8324a141af3..66ecd0da327 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/__init__.py +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/__init__.py @@ -14,6 +14,8 @@ from ._operations import ReorderParametersOperations # type: ignore from ._operations import GroupParametersOperations # type: ignore +from ._operations import RequireOptionalParameterOperations # type: ignore +from ._operations import RemoveOptionalParameterOperations # type: ignore from ._patch import __all__ as _patch_all from ._patch import * @@ -22,6 +24,8 @@ __all__ = [ "ReorderParametersOperations", "GroupParametersOperations", + "RequireOptionalParameterOperations", + "RemoveOptionalParameterOperations", ] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/_operations.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/_operations.py index fb41f2e054b..8020ce31f34 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/_operations.py +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/aio/operations/_operations.py @@ -22,7 +22,12 @@ from azure.core.tracing.decorator_async import distributed_trace_async from ..._utils.serialization import Deserializer, Serializer -from ...operations._operations import build_group_parameters_group_request, build_reorder_parameters_reorder_request +from ...operations._operations import ( + build_group_parameters_group_request, + build_remove_optional_parameter_remove_optional_request, + build_reorder_parameters_reorder_request, + build_require_optional_parameter_require_optional_request, +) from .._configuration import OverrideClientConfiguration T = TypeVar("T") @@ -163,3 +168,139 @@ async def group(self, *, param1: str, param2: str, **kwargs: Any) -> None: if cls: return cls(pipeline_response, None, {}) # type: ignore + + +class RequireOptionalParameterOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~specs.azure.clientgenerator.core.override.aio.OverrideClient`'s + :attr:`require_optional_parameter` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: OverrideClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + async def require_optional(self, param1: str, param2: str, **kwargs: Any) -> None: + """require_optional. + + :param param1: Required. + :type param1: str + :param param2: Required. + :type param2: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_require_optional_parameter_require_optional_request( + param1=param1, + param2=param2, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + +class RemoveOptionalParameterOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~specs.azure.clientgenerator.core.override.aio.OverrideClient`'s + :attr:`remove_optional_parameter` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: OverrideClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + async def remove_optional(self, param1: str, *, param2: Optional[str] = None, **kwargs: Any) -> None: + """remove_optional. + + :param param1: Required. + :type param1: str + :keyword param2: Default value is None. + :paramtype param2: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_remove_optional_parameter_remove_optional_request( + param1=param1, + param2=param2, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/__init__.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/__init__.py index 8324a141af3..66ecd0da327 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/__init__.py +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/__init__.py @@ -14,6 +14,8 @@ from ._operations import ReorderParametersOperations # type: ignore from ._operations import GroupParametersOperations # type: ignore +from ._operations import RequireOptionalParameterOperations # type: ignore +from ._operations import RemoveOptionalParameterOperations # type: ignore from ._patch import __all__ as _patch_all from ._patch import * @@ -22,6 +24,8 @@ __all__ = [ "ReorderParametersOperations", "GroupParametersOperations", + "RequireOptionalParameterOperations", + "RemoveOptionalParameterOperations", ] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/_operations.py b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/_operations.py index d9c0dd3ead5..0f91a78e391 100644 --- a/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/_operations.py +++ b/packages/typespec-python/test/azure/generated/azure-client-generator-core-override/specs/azure/clientgenerator/core/override/operations/_operations.py @@ -58,6 +58,41 @@ def build_group_parameters_group_request(*, param1: str, param2: str, **kwargs: return HttpRequest(method="GET", url=_url, params=_params, **kwargs) +def build_require_optional_parameter_require_optional_request( # pylint: disable=name-too-long + param1: str, param2: str, **kwargs: Any +) -> HttpRequest: + # Construct URL + _url = "/azure/client-generator-core/override/require-optional/{param1}/{param2}" + path_format_arguments = { + "param1": _SERIALIZER.url("param1", param1, "str"), + "param2": _SERIALIZER.url("param2", param2, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + return HttpRequest(method="GET", url=_url, **kwargs) + + +def build_remove_optional_parameter_remove_optional_request( # pylint: disable=name-too-long + param1: str, *, param2: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + # Construct URL + _url = "/azure/client-generator-core/override/remove-optional/{param1}" + path_format_arguments = { + "param1": _SERIALIZER.url("param1", param1, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + if param2 is not None: + _params["param2"] = _SERIALIZER.query("param2", param2, "str") + + return HttpRequest(method="GET", url=_url, params=_params, **kwargs) + + class ReorderParametersOperations: """ .. warning:: @@ -196,3 +231,143 @@ def group( # pylint: disable=inconsistent-return-statements if cls: return cls(pipeline_response, None, {}) # type: ignore + + +class RequireOptionalParameterOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~specs.azure.clientgenerator.core.override.OverrideClient`'s + :attr:`require_optional_parameter` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: OverrideClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def require_optional( # pylint: disable=inconsistent-return-statements + self, param1: str, param2: str, **kwargs: Any + ) -> None: + """require_optional. + + :param param1: Required. + :type param1: str + :param param2: Required. + :type param2: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_require_optional_parameter_require_optional_request( + param1=param1, + param2=param2, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + +class RemoveOptionalParameterOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~specs.azure.clientgenerator.core.override.OverrideClient`'s + :attr:`remove_optional_parameter` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: OverrideClientConfiguration = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def remove_optional( # pylint: disable=inconsistent-return-statements + self, param1: str, *, param2: Optional[str] = None, **kwargs: Any + ) -> None: + """remove_optional. + + :param param1: Required. + :type param1: str + :keyword param2: Default value is None. + :paramtype param2: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_remove_optional_parameter_remove_optional_request( + param1=param1, + param2=param2, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba1cdf52c93..2b93dd4c2e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,8 +60,8 @@ importers: specifier: ~1.0.2 version: 1.0.2 '@typespec/http-client-python': - specifier: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz - version: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz(xd3x5iacuy73inmcnqmslujf7u) + specifier: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz + version: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz(xd3x5iacuy73inmcnqmslujf7u) fs-extra: specifier: ~11.2.0 version: 11.2.0 @@ -82,8 +82,8 @@ importers: packages/typespec-python: dependencies: '@typespec/http-client-python': - specifier: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz - version: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz(xd3x5iacuy73inmcnqmslujf7u) + specifier: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz + version: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz(xd3x5iacuy73inmcnqmslujf7u) fs-extra: specifier: ~11.2.0 version: 11.2.0 @@ -98,8 +98,8 @@ importers: version: 4.19.3 devDependencies: '@azure-tools/azure-http-specs': - specifier: 0.1.0-alpha.29 - version: 0.1.0-alpha.29(igdln2jjjvkaem5yy4paqsvzwm) + specifier: 0.1.0-alpha.30-dev.5 + version: 0.1.0-alpha.30-dev.5(igdln2jjjvkaem5yy4paqsvzwm) '@azure-tools/typespec-autorest': specifier: ~0.60.0 version: 0.60.0(mpeik6lrosno7jd4tcgh2q5a2a) @@ -209,16 +209,16 @@ packages: resolution: {integrity: sha512-T21naRb6JDdjjn2s/zwr9iCIv/9jviL/PRtiWAhi+3UA2WKH2wrId2VqJa4uVD7iEV8BLkuGgFmMkaMBG26hFw==} engines: {node: '>=12.0.0'} - '@azure-tools/azure-http-specs@0.1.0-alpha.29': - resolution: {integrity: sha512-kOxcSdtX9ueLFKmU/KgPYxijkOmhcDJs2wnZ5+TCAV8B+vfoZ3/txJO5LBRUqLcwHG+LTmnbcaxdt6kz6BGohw==} + '@azure-tools/azure-http-specs@0.1.0-alpha.30-dev.5': + resolution: {integrity: sha512-5lwqZRLux8BU9FK+BSZOTerWUKVB3SRhkVQIDkzh1DjmS7MPBCNXEtbvEZmM0EtLzJWiS5YjnRwj6UNiqw+wzw==} engines: {node: '>=20.0.0'} peerDependencies: - '@azure-tools/typespec-azure-core': ^0.60.0 + '@azure-tools/typespec-azure-core': ^0.60.0 || >=0.61.0-dev <0.61.0 '@typespec/compiler': ^1.4.0 '@typespec/http': ^1.4.0 - '@typespec/rest': ^0.74.0 - '@typespec/versioning': ^0.74.0 - '@typespec/xml': ^0.74.0 + '@typespec/rest': ^0.74.0 || >=0.75.0-dev <0.75.0 + '@typespec/versioning': ^0.74.0 || >=0.75.0-dev <0.75.0 + '@typespec/xml': ^0.74.0 || >=0.75.0-dev <0.75.0 '@azure-tools/typespec-autorest@0.60.0': resolution: {integrity: sha512-aIRr1e4g3irkjLTpxqzJ8BFnNFYwj4nlcG6cKGPuhNtiHhJgHjUhLVUNIW1A9O4jx+3RSErL9AkAl1ep+ZbiuA==} @@ -1677,8 +1677,8 @@ packages: peerDependencies: '@typespec/compiler': ^1.4.0 - '@typespec/http-client-python@https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz': - resolution: {tarball: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz} + '@typespec/http-client-python@https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz': + resolution: {tarball: https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz} version: 0.18.1 engines: {node: '>=20.0.0'} peerDependencies: @@ -4866,7 +4866,7 @@ snapshots: command-exists: 1.2.9 semver: 7.6.3 - '@azure-tools/azure-http-specs@0.1.0-alpha.29(igdln2jjjvkaem5yy4paqsvzwm)': + '@azure-tools/azure-http-specs@0.1.0-alpha.30-dev.5(igdln2jjjvkaem5yy4paqsvzwm)': dependencies: '@azure-tools/typespec-azure-core': 0.60.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/http@1.4.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/streams@0.74.0(@typespec/compiler@1.4.0(@types/node@24.1.0))))(@typespec/rest@0.74.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/http@1.4.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/streams@0.74.0(@typespec/compiler@1.4.0(@types/node@24.1.0))))) '@typespec/compiler': 1.4.0(@types/node@24.1.0) @@ -6460,7 +6460,7 @@ snapshots: dependencies: '@typespec/compiler': 1.4.0(@types/node@24.1.0) - '@typespec/http-client-python@https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM4Nzg0Ni9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz(xd3x5iacuy73inmcnqmslujf7u)': + '@typespec/http-client-python@https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTM5NzQ4NS9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.18.1.tgz(xd3x5iacuy73inmcnqmslujf7u)': dependencies: '@azure-tools/typespec-autorest': 0.60.0(mpeik6lrosno7jd4tcgh2q5a2a) '@azure-tools/typespec-azure-core': 0.60.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/http@1.4.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/streams@0.74.0(@typespec/compiler@1.4.0(@types/node@24.1.0))))(@typespec/rest@0.74.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/http@1.4.0(@typespec/compiler@1.4.0(@types/node@24.1.0))(@typespec/streams@0.74.0(@typespec/compiler@1.4.0(@types/node@24.1.0)))))