From 23f3aa1a8fe2d8c6c4d5fef5a66574a09d0db5d0 Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Fri, 12 Jul 2024 09:57:45 +0800 Subject: [PATCH] Fix import when method name is reserved word (#2690) * optimize * fix * changelog --- .../changes/sdk-regen-optimization-2024-6-11-14-58-58.md | 7 +++++++ .../generator/pygen/codegen/models/client.py | 3 ++- .../generator/pygen/preprocess/__init__.py | 9 +++++++-- packages/typespec-python/generator/pygen/utils.py | 4 ++++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 .chronus/changes/sdk-regen-optimization-2024-6-11-14-58-58.md diff --git a/.chronus/changes/sdk-regen-optimization-2024-6-11-14-58-58.md b/.chronus/changes/sdk-regen-optimization-2024-6-11-14-58-58.md new file mode 100644 index 0000000000..1ee42c8dc4 --- /dev/null +++ b/.chronus/changes/sdk-regen-optimization-2024-6-11-14-58-58.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@azure-tools/typespec-python" +--- + +Fix import error when method name is reserved word in Pyhton \ No newline at end of file diff --git a/packages/typespec-python/generator/pygen/codegen/models/client.py b/packages/typespec-python/generator/pygen/codegen/models/client.py index 7b9cfe6251..a98342b870 100644 --- a/packages/typespec-python/generator/pygen/codegen/models/client.py +++ b/packages/typespec-python/generator/pygen/codegen/models/client.py @@ -18,6 +18,7 @@ from .parameter import Parameter, ParameterMethodLocation from .lro_operation import LROOperation from .lro_paging_operation import LROPagingOperation +from ...utils import extract_original_name ParameterListType = TypeVar( "ParameterListType", @@ -92,7 +93,7 @@ def add_og_request_builder(og: Dict[str, Any]): if operation_yaml.get("isLroInitialOperation"): # we want to change the name request_builder.name = request_builder.get_name( - request_builder.yaml_data["name"][1 : -len("_initial")], + extract_original_name(request_builder.yaml_data["name"]), request_builder.yaml_data, request_builder.code_model, request_builder.client, diff --git a/packages/typespec-python/generator/pygen/preprocess/__init__.py b/packages/typespec-python/generator/pygen/preprocess/__init__.py index 7c6002f1b4..88ca1946fe 100644 --- a/packages/typespec-python/generator/pygen/preprocess/__init__.py +++ b/packages/typespec-python/generator/pygen/preprocess/__init__.py @@ -8,7 +8,7 @@ import copy from typing import Callable, Dict, Any, List, Optional -from ..utils import to_snake_case +from ..utils import to_snake_case, extract_original_name from .helpers import ( add_redefined_builtin_info, pad_builtin_namespaces, @@ -362,7 +362,12 @@ def update_operation( yaml_data["groupName"] = self.pad_reserved_words(yaml_data["groupName"], PadType.OPERATION_GROUP) yaml_data["groupName"] = to_snake_case(yaml_data["groupName"]) yaml_data["name"] = yaml_data["name"].lower() - yaml_data["name"] = self.pad_reserved_words(yaml_data["name"], PadType.METHOD) + if yaml_data.get("isLroInitialOperation") is True: + yaml_data["name"] = ( + "_" + self.pad_reserved_words(extract_original_name(yaml_data["name"]), PadType.METHOD) + "_initial" + ) + else: + yaml_data["name"] = self.pad_reserved_words(yaml_data["name"], PadType.METHOD) yaml_data["description"] = update_description(yaml_data["description"], yaml_data["name"]) yaml_data["summary"] = update_description(yaml_data.get("summary", "")) body_parameter = yaml_data.get("bodyParameter") diff --git a/packages/typespec-python/generator/pygen/utils.py b/packages/typespec-python/generator/pygen/utils.py index 95bf493bde..2fa5f35c4a 100644 --- a/packages/typespec-python/generator/pygen/utils.py +++ b/packages/typespec-python/generator/pygen/utils.py @@ -147,3 +147,7 @@ def build_policies( "self._config.logging_policy", ] return [p for p in policies if p] + + +def extract_original_name(name: str) -> str: + return name[1 : -len("_initial")]