From 69fef9458694af48f4c525c4748962b0ff856f62 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Wed, 23 Jul 2025 14:06:34 -0400 Subject: [PATCH 1/4] import mixin from init file --- .chronus/changes/python-bumpDeps-2025-6-23-14-5-43.md | 7 +++++++ .../generator/pygen/codegen/models/client.py | 4 +--- .../codegen/serializers/operations_init_serializer.py | 6 +----- 3 files changed, 9 insertions(+), 8 deletions(-) create mode 100644 .chronus/changes/python-bumpDeps-2025-6-23-14-5-43.md diff --git a/.chronus/changes/python-bumpDeps-2025-6-23-14-5-43.md b/.chronus/changes/python-bumpDeps-2025-6-23-14-5-43.md new file mode 100644 index 00000000000..1fad251667e --- /dev/null +++ b/.chronus/changes/python-bumpDeps-2025-6-23-14-5-43.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/http-client-python" +--- + +Import mixins from operations init file to get patch changes \ No newline at end of file diff --git a/packages/http-client-python/generator/pygen/codegen/models/client.py b/packages/http-client-python/generator/pygen/codegen/models/client.py index 8708b7eae64..68b52c28565 100644 --- a/packages/http-client-python/generator/pygen/codegen/models/client.py +++ b/packages/http-client-python/generator/pygen/codegen/models/client.py @@ -322,13 +322,11 @@ def imports(self, async_mode: bool, **kwargs) -> FileImport: ) serialize_namespace = kwargs.get("serialize_namespace", self.code_model.namespace) for og in self.operation_groups: - suffix = f".{og.filename}" if (not self.code_model.options["multiapi"]) and og.is_mixin else "" file_import.add_submodule_import( self.code_model.get_relative_import_path( serialize_namespace, self.code_model.get_imported_namespace_for_operation(og.client_namespace, async_mode), - ) - + suffix, + ), og.class_name, ImportType.LOCAL, ) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py index 343103b6592..b48b6e77216 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py @@ -26,11 +26,7 @@ def operation_group_imports(self) -> List[str]: def _get_filename(operation_group: OperationGroup) -> str: return "_operations" if self.code_model.options["combine-operation-files"] else operation_group.filename - return [ - f"from .{_get_filename(og)} import {og.class_name} # type: ignore" - for og in self.operation_groups - if not og.is_mixin or self.code_model.options["multiapi"] - ] + return [f"from .{_get_filename(og)} import {og.class_name} # type: ignore" for og in self.operation_groups] def serialize(self) -> str: operation_group_init_template = self.env.get_template("operations_folder_init.py.jinja2") From 1f96fa39df2f97d57ab6c59fc577bb51e7f176cf Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Wed, 23 Jul 2025 14:54:15 -0400 Subject: [PATCH 2/4] add mixin group back to the __all__ --- .../pygen/codegen/templates/operations_folder_init.py.jinja2 | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 index c93692096be..e34d55cdde5 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 @@ -10,9 +10,7 @@ {{ keywords.patch_imports() }} __all__ = [ {% for operation_group in operation_groups %} - {% if not operation_group.is_mixin or code_model.options["multiapi"] %} '{{ operation_group.class_name }}', - {% endif %} {% endfor %} ] {{ keywords.extend_all }} From fc3421845d30b32ea7e0d530080042f0a8cbd58d Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Wed, 23 Jul 2025 15:01:03 -0400 Subject: [PATCH 3/4] format and add pylint disable --- .../codegen/serializers/operations_init_serializer.py | 11 ++++++++++- .../templates/operations_folder_init.py.jinja2 | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py index b48b6e77216..85ef760d980 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py @@ -9,6 +9,12 @@ from ..models import CodeModel, OperationGroup +def get_pylint_disable(code_model: CodeModel, og: OperationGroup) -> str: + if og.is_mixin and not code_model.options["multiapi"]: + return " pylint: disable=unused-import" + return "" + + class OperationsInitSerializer: def __init__( self, @@ -26,7 +32,10 @@ def operation_group_imports(self) -> List[str]: def _get_filename(operation_group: OperationGroup) -> str: return "_operations" if self.code_model.options["combine-operation-files"] else operation_group.filename - return [f"from .{_get_filename(og)} import {og.class_name} # type: ignore" for og in self.operation_groups] + return [ + f"from .{_get_filename(og)} import {og.class_name} # type: ignore{get_pylint_disable(self.code_model, og)}" + for og in self.operation_groups + ] def serialize(self) -> str: operation_group_init_template = self.env.get_template("operations_folder_init.py.jinja2") diff --git a/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 index e34d55cdde5..c93692096be 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 @@ -10,7 +10,9 @@ {{ keywords.patch_imports() }} __all__ = [ {% for operation_group in operation_groups %} + {% if not operation_group.is_mixin or code_model.options["multiapi"] %} '{{ operation_group.class_name }}', + {% endif %} {% endfor %} ] {{ keywords.extend_all }} From d0f9edee228c3aac274c43ebe276acc5d1500e29 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Wed, 23 Jul 2025 16:59:25 -0400 Subject: [PATCH 4/4] fix pylint and mypy ignores on the same line --- .../pygen/codegen/serializers/operations_init_serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py index 85ef760d980..0ca067433a6 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/operations_init_serializer.py @@ -11,7 +11,7 @@ def get_pylint_disable(code_model: CodeModel, og: OperationGroup) -> str: if og.is_mixin and not code_model.options["multiapi"]: - return " pylint: disable=unused-import" + return " # pylint: disable=unused-import" return ""