From 8e5f09091bbe1777721137bba605cd272b45a44c Mon Sep 17 00:00:00 2001 From: duongynhi000005-oss Date: Sun, 31 May 2026 22:05:43 +0700 Subject: [PATCH] refactor: convert if isinstance chains to match case (#36846) Co-authored-by: duongynhi000005-oss Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Asuka Minato --- api/core/agent/cot_completion_agent_runner.py | 21 +++++---- .../advanced_chat/generate_task_pipeline.py | 21 +++++---- .../agent_chat/generate_response_converter.py | 21 +++++---- .../apps/chat/generate_response_converter.py | 21 +++++---- .../common/workflow_response_converter.py | 46 ++++++++++--------- .../completion/generate_response_converter.py | 25 +++++----- .../based_generate_task_pipeline.py | 15 +++--- api/core/logging/filters.py | 19 ++++---- 8 files changed, 99 insertions(+), 90 deletions(-) diff --git a/api/core/agent/cot_completion_agent_runner.py b/api/core/agent/cot_completion_agent_runner.py index b677fc6af4..fd46dbc2fa 100644 --- a/api/core/agent/cot_completion_agent_runner.py +++ b/api/core/agent/cot_completion_agent_runner.py @@ -39,16 +39,17 @@ class CotCompletionAgentRunner(CotAgentRunner): historic_prompt = "" for message in historic_prompt_messages: - if isinstance(message, UserPromptMessage): - historic_prompt += f"Question: {message.content}\n\n" - elif isinstance(message, AssistantPromptMessage): - if isinstance(message.content, str): - historic_prompt += message.content + "\n\n" - elif isinstance(message.content, list): - for content in message.content: - if not isinstance(content, TextPromptMessageContent): - continue - historic_prompt += content.data + match message: + case UserPromptMessage(): + historic_prompt += f"Question: {message.content}\n\n" + case AssistantPromptMessage(): + if isinstance(message.content, str): + historic_prompt += message.content + "\n\n" + elif isinstance(message.content, list): + for content in message.content: + if not isinstance(content, TextPromptMessageContent): + continue + historic_prompt += content.data return historic_prompt diff --git a/api/core/app/apps/advanced_chat/generate_task_pipeline.py b/api/core/app/apps/advanced_chat/generate_task_pipeline.py index adbe2241ef..6f8117ee59 100644 --- a/api/core/app/apps/advanced_chat/generate_task_pipeline.py +++ b/api/core/app/apps/advanced_chat/generate_task_pipeline.py @@ -161,16 +161,17 @@ class AdvancedChatAppGenerateTaskPipeline(GraphRuntimeStateSupport): stream=stream, ) - if isinstance(user, EndUser): - self._user_id = user.id - user_session_id = user.session_id - self._created_by_role = CreatorUserRole.END_USER - elif isinstance(user, Account): - self._user_id = user.id - user_session_id = user.id - self._created_by_role = CreatorUserRole.ACCOUNT - else: - raise NotImplementedError(f"User type not supported: {type(user)}") + match user: + case EndUser(): + self._user_id = user.id + user_session_id = user.session_id + self._created_by_role = CreatorUserRole.END_USER + case Account(): + self._user_id = user.id + user_session_id = user.id + self._created_by_role = CreatorUserRole.ACCOUNT + case _: + raise NotImplementedError(f"User type not supported: {type(user)}") self._workflow_system_variables = build_system_variables( query=message.query, diff --git a/api/core/app/apps/agent_chat/generate_response_converter.py b/api/core/app/apps/agent_chat/generate_response_converter.py index 618509101a..f5173bb1e3 100644 --- a/api/core/app/apps/agent_chat/generate_response_converter.py +++ b/api/core/app/apps/agent_chat/generate_response_converter.py @@ -112,15 +112,16 @@ class AgentChatAppGenerateResponseConverter(AppGenerateResponseConverter[Chatbot "created_at": chunk.created_at, } - if isinstance(sub_stream_response, MessageEndStreamResponse): - sub_stream_response_dict = sub_stream_response.model_dump(mode="json") - metadata = sub_stream_response_dict.get("metadata", {}) - sub_stream_response_dict["metadata"] = cls._get_simple_metadata(metadata) - response_chunk.update(sub_stream_response_dict) - elif isinstance(sub_stream_response, ErrorStreamResponse): - data = cls._error_to_stream_response(sub_stream_response.err) - response_chunk.update(data) - else: - response_chunk.update(sub_stream_response.model_dump(mode="json")) + match sub_stream_response: + case MessageEndStreamResponse(): + sub_stream_response_dict = sub_stream_response.model_dump(mode="json") + metadata = sub_stream_response_dict.get("metadata", {}) + sub_stream_response_dict["metadata"] = cls._get_simple_metadata(metadata) + response_chunk.update(sub_stream_response_dict) + case ErrorStreamResponse(): + data = cls._error_to_stream_response(sub_stream_response.err) + response_chunk.update(data) + case _: + response_chunk.update(sub_stream_response.model_dump(mode="json")) yield response_chunk diff --git a/api/core/app/apps/chat/generate_response_converter.py b/api/core/app/apps/chat/generate_response_converter.py index 0869f0405b..4af52abb11 100644 --- a/api/core/app/apps/chat/generate_response_converter.py +++ b/api/core/app/apps/chat/generate_response_converter.py @@ -112,15 +112,16 @@ class ChatAppGenerateResponseConverter(AppGenerateResponseConverter[ChatbotAppBl "created_at": chunk.created_at, } - if isinstance(sub_stream_response, MessageEndStreamResponse): - sub_stream_response_dict = sub_stream_response.model_dump(mode="json") - metadata = sub_stream_response_dict.get("metadata", {}) - sub_stream_response_dict["metadata"] = cls._get_simple_metadata(metadata) - response_chunk.update(sub_stream_response_dict) - elif isinstance(sub_stream_response, ErrorStreamResponse): - data = cls._error_to_stream_response(sub_stream_response.err) - response_chunk.update(data) - else: - response_chunk.update(sub_stream_response.model_dump(mode="json")) + match sub_stream_response: + case MessageEndStreamResponse(): + sub_stream_response_dict = sub_stream_response.model_dump(mode="json") + metadata = sub_stream_response_dict.get("metadata", {}) + sub_stream_response_dict["metadata"] = cls._get_simple_metadata(metadata) + response_chunk.update(sub_stream_response_dict) + case ErrorStreamResponse(): + data = cls._error_to_stream_response(sub_stream_response.err) + response_chunk.update(data) + case _: + response_chunk.update(sub_stream_response.model_dump(mode="json")) yield response_chunk diff --git a/api/core/app/apps/common/workflow_response_converter.py b/api/core/app/apps/common/workflow_response_converter.py index 96fc55526c..1d178fd428 100644 --- a/api/core/app/apps/common/workflow_response_converter.py +++ b/api/core/app/apps/common/workflow_response_converter.py @@ -276,17 +276,18 @@ class WorkflowResponseConverter: created_by: CreatedByDict | dict[str, object] = {} user = self._user - if isinstance(user, Account): - created_by = AccountCreatedByDict( - id=user.id, - name=user.name, - email=user.email, - ) - elif isinstance(user, EndUser): - created_by = EndUserCreatedByDict( - id=user.id, - user=user.session_id, - ) + match user: + case Account(): + created_by = AccountCreatedByDict( + id=user.id, + name=user.name, + email=user.email, + ) + case EndUser(): + created_by = EndUserCreatedByDict( + id=user.id, + user=user.session_id, + ) return WorkflowFinishStreamResponse( task_id=task_id, @@ -455,17 +456,18 @@ class WorkflowResponseConverter: created_by: Mapping[str, object] user = creator_user - if isinstance(user, Account): - created_by = { - "id": user.id, - "name": user.name, - "email": user.email, - } - else: - created_by = { - "id": user.id, - "user": user.session_id, - } + match user: + case Account(): + created_by = { + "id": user.id, + "name": user.name, + "email": user.email, + } + case _: + created_by = { + "id": user.id, + "user": user.session_id, + } return WorkflowFinishStreamResponse( task_id=task_id, diff --git a/api/core/app/apps/completion/generate_response_converter.py b/api/core/app/apps/completion/generate_response_converter.py index 806575c256..4e2f7acc02 100644 --- a/api/core/app/apps/completion/generate_response_converter.py +++ b/api/core/app/apps/completion/generate_response_converter.py @@ -109,17 +109,18 @@ class CompletionAppGenerateResponseConverter(AppGenerateResponseConverter[Comple "created_at": chunk.created_at, } - if isinstance(sub_stream_response, MessageEndStreamResponse): - sub_stream_response_dict = sub_stream_response.model_dump(mode="json") - metadata = sub_stream_response_dict.get("metadata", {}) - if not isinstance(metadata, dict): - metadata = {} - sub_stream_response_dict["metadata"] = cls._get_simple_metadata(metadata) - response_chunk.update(sub_stream_response_dict) - elif isinstance(sub_stream_response, ErrorStreamResponse): - data = cls._error_to_stream_response(sub_stream_response.err) - response_chunk.update(data) - else: - response_chunk.update(sub_stream_response.model_dump(mode="json")) + match sub_stream_response: + case MessageEndStreamResponse(): + sub_stream_response_dict = sub_stream_response.model_dump(mode="json") + metadata = sub_stream_response_dict.get("metadata", {}) + if not isinstance(metadata, dict): + metadata = {} + sub_stream_response_dict["metadata"] = cls._get_simple_metadata(metadata) + response_chunk.update(sub_stream_response_dict) + case ErrorStreamResponse(): + data = cls._error_to_stream_response(sub_stream_response.err) + response_chunk.update(data) + case _: + response_chunk.update(sub_stream_response.model_dump(mode="json")) yield response_chunk diff --git a/api/core/app/task_pipeline/based_generate_task_pipeline.py b/api/core/app/task_pipeline/based_generate_task_pipeline.py index 9e688589db..f75dbe88b2 100644 --- a/api/core/app/task_pipeline/based_generate_task_pipeline.py +++ b/api/core/app/task_pipeline/based_generate_task_pipeline.py @@ -46,13 +46,14 @@ class BasedGenerateTaskPipeline: e = event.error err: Exception - if isinstance(e, InvokeAuthorizationError): - err = InvokeAuthorizationError("Incorrect API key provided") - elif isinstance(e, InvokeError | ValueError): - err = e - else: - description = getattr(e, "description", None) - err = Exception(description if description is not None else str(e)) + match e: + case InvokeAuthorizationError(): + err = InvokeAuthorizationError("Incorrect API key provided") + case InvokeError() | ValueError(): + err = e + case _: + description = getattr(e, "description", None) + err = Exception(description if description is not None else str(e)) if not message_id or not session: return err diff --git a/api/core/logging/filters.py b/api/core/logging/filters.py index e0a3148d56..3f6c565e13 100644 --- a/api/core/logging/filters.py +++ b/api/core/logging/filters.py @@ -83,15 +83,16 @@ class IdentityContextFilter(logging.Filter): identity: IdentityDict = {} - if isinstance(user, Account): - if user.current_tenant_id: - identity["tenant_id"] = user.current_tenant_id - identity["user_id"] = user.id - identity["user_type"] = "account" - elif isinstance(user, EndUser): - identity["tenant_id"] = user.tenant_id - identity["user_id"] = user.id - identity["user_type"] = user.type or "end_user" + match user: + case Account(): + if user.current_tenant_id: + identity["tenant_id"] = user.current_tenant_id + identity["user_id"] = user.id + identity["user_type"] = "account" + case EndUser(): + identity["tenant_id"] = user.tenant_id + identity["user_id"] = user.id + identity["user_type"] = user.type or "end_user" return identity except Exception: